2024.10.01
自社の社内情報を未来の“ゴミ”にしないための備え 「情報量が多すぎる」時代がもたらす課題とは?
UnityTimelineをつかって演出の幅を広げよう(全1記事)
提供:株式会社Aiming
リンクをコピー
記事をブックマーク
土井英範氏(以下、土井):よろしくお願いします。
(会場拍手)
株式会社Aimingでリードソフトウェアエンジニアをやっております。土井と申します。お見知りおきください。よろしくお願いします。
もともとconnpass上で告知していた登壇者は平野という者でしたが、風邪をひいてしまいまして(笑)。僕がピンチヒッターで出ることになりました。平野の登壇を楽しみにしていた方は本当ごめんなさい。代わりにしゃべらせてください。よろしくお願いします。
タイトルなんですが、『UnityTimelineをつかって演出の幅を広げよう』です。Unityを使ってらっしゃる方、どのくらいいらっしゃいますか?
(会場挙手)
あ、ほぼ。大丈夫ですね。
演出といえば、まずカットシーンが最近ではよく要件に上がると思います。カットシーンという、ゲーム中で時間が決まったアニメーションを再生したいと。
また、同じカットシーンでも、ゲームの進行状況に合わせて違うキャラクターを表示したり。こんな要件があるかなと思います。
Unityの2017.1からTimeline機能というものが標準で搭載されるようになりました。カットシーンは一般的に、まずデザイナーさんがモデルデータと、Mayaなどの上でアニメーションを付けたものを時間を決めて作って、全部の時間軸上でムービーが完成する、みたいなものをUnityに取り込んで、それをアニメーターで再生するという流れだったかと思います。
ただ、修正や調整、キャラクターを差し替えるといった要件が出たときは大変です。エンジニアが自分たちで要件に合わせて実装を追加していかなければいけません。
ですが、UnityTimelineを使うと、プログラムは書かなければいけませんが、ちょっと楽になるよ、という話を紹介させてください。
その話の前に、仕事ではありませんが個人で作っているタイトルがあります。ずっと「半年後出る」と言い続けて1年半くらい経っちゃってるんですけど。こういうものがあります。とりあえず再生しますね。
(動画)
今、鳥が飛び立つシーンなんですが、これはTimelineで動いています。カメラが切り替わったりとか、ここまでTimelineです。ここから動的制御になり、キャラクターが動かせるようになります。そのうち、いつか出ると思うので、ぜひ出たらプレイしてみてください(笑)。
(会場笑)
よく見ますよね。ムービーシーンがゲーム中に再生される。でもそのゲームのエンジンを使って描画されるようなムービーをどう表現するか、というところでTimelineを使っています。
実際このデータを見てみると、こんな感じです。
昔フラッシュってありましたよね。フラッシュだと時間軸に並べてなにかを表示したり消したり、アニメーションさせていました。そんな機能がUnityに標準で搭載されるようになりました。
UnityのTimelineを使ってどんなことができるのかと言うと、先ほどお見せしたように、Unityの実行中にリアルタイムにムービーを再生できます。
あとは、先ほどラインが何トラックかあったと思いますが、鳥はこういう動き、カメラはこういう動き、みたいにキャラクターの動きを視覚的に表現ができるようになります。
UnityEditorが再生しなくてもエディター上で編集しながらプレビューできるので、調整がすごく楽になりますね。
最後に、アニメーションを使いまわせます。Mayaで時間が固定されたデータを吐き出すと、それが1本のアニメーションデータになりますが、例えば「歩く」など、カットシーン中に2回「歩く」が出てきたら、そこは同じUnity上の歩くモーションをセットして使い回すことができます。
Unity上で部品をつなぎ合わせてムービーを作りましょう、みたいな機能だと思っていただけるといいかなぁと思いますね。
今まではAnimatorという機能がありましたが、比較してみます。
Animatorはアニメーションという状態を持っていて、歩くとか走るとか、それを切り替えるという機能になります。これはスクリプトから制御したりしますよね。Timelineは、アニメーションを時間軸に応じて切り替える機能です。つまり、考え方がぜんぜん違うものだと理解しやすいです。
あとは、Timelineのすごいところなんですが、スクリプトで拡張できるんです。さきほどのトラックの部分って自分で何個かスクリプトを書くと、自分のプロジェクトに合った制御方法を取ることができます。
例えば画面の暗転ってよくやりますよね。あれをTimeline上にトラック1個つ作って、暗転、フェードイン、フェードアウトみたいなものを作ると、どこでも使いまわせるような処理になったり。
シーン上にパスを描いて、空間上にパスを引いて、そこに沿って動くようなオブジェクトを作ったときに、Timeline上でパスの0点から終点まである時間をかけて動く、といったことも視覚的に表現できます。
ほかにも、アニメーションの再生やオーディオの再生にも対応しています。最近はCinemachineというカメラの制御用のアセットが出ていまして、それを導入すると、先ほどのカメラを切り替えといった制御も時間軸でコントロールできます。
実際問題、スクリプトで書けてしまうので、スクリプトで書いてしまえばどんなことでも時間で制御できます。
細かい解説はググったらいろいろ出てくるので(笑)。キーワードやできることだけ覚えて帰っていただけたら今後につながるかなと思い、ここまで紹介させていただきました。
先ほどの作る段階でいろいろハマったところがあるので、紹介させていただきます。まず「Timelineでなんでもできるじゃん」って最初は思ってたんですが、やってみるとできないこと、向いていないことがけっこうありました。
例えば条件分岐して違うアニメーションを差し替えましょう、みたいなことはしんどいです。無理やりやったらできますが、これはやめたほうがいいですね。Animatorを素直に使って、それをスクリプト側で制御するほうが楽です。
あと再生時間が固定でないもの。例えばAポイント、Bポイントのどちらかに主人公がいて、終点が決まってるとしたら、距離が違います。歩く速度が一緒であればそのアニメーションの再生時間って変わりますよね。近いほうがより早く終わります。こういう処理は向いていません。素直にスクリプトで制御したほうがいいと思います(笑)。
ここからエンジニア向きの話になりますが、実行したときにいろいろな依存するオブジェクトを解決していかなければなりません。
例えばキャラクターを差し替えるという話だと、どのキャラクターを? という話が出てくると思いますが、TimelineのデータはUnityで言うとAssetBase、プロジェクトのフォルダに管理されるものなので、シーン上に配置されたものを使うのがちょっと苦手です。
解決方法はいろいろありますが、PlayableDirectorってトラックの左部分にいろいろ挿せるんです。ここは直接シーン上にオブジェクトを挿すことができます。Playableと言われているようなクラスを継承しているものは全部ここに挿せます。
トラックに配置される個々のクリップデータにもいろいろとオブジェクトを紐付けられるんですが、ここはちょっと大変です。自分でスクリプトを書いて、ExposedReference
MonoBehaviorでいうところのSerializeFieldのようなものがTimelineのクリップ用に用意されています。これなかなか最初はわからなくて、検索しても昔は出てきませんでした。ですので、キーワードを覚えてもらえるといいかなと思います。
あとは、Prefabにしたいという要件があります。シーンを再生するとき、Timelineの情報を保存したPrefabをシーンにInstantiateして再生すると、実行時にTimelineのPrefab情報はシーンにあるものって、そもそもありません。
紐付けが切れている状態でPrefabに保存されます。これは実行後にシーン上のオブジェクトを紐付けるスクリプトを自分で書かなければいけません。
Timelineのディレクターという再生するためのコンポーネントに、Bindingsというところがあります。Bindingsに、先ほどの紐付けが切れたものが下のほうにあるので、そこを実行時にこういうSetGenerictBindingというUnityのAPIを使うことで解決するので、これは自前でどうにかしなければいけません。
ただ、これを1度書いてしまうと、あとはPrefab化していろんなムービーを差し替えたりとかしやすくなります。
実は、これにすごく詰まったんですよ。1ヶ月か2ヶ月くらいよくわかりませんでした。僕は毎日家に帰ってジョナサンに行って、ジョナサンで2時間くらいプログラミングをしています。どんだけ好きなんだと(笑)。なのでこれは仕事と関係ありません。
あと、Timeline Readyなアセットが最近増えてきています。ちょっと宣伝させてもらいたいんですけど(笑)。僕が作ったアセットがあるので、興味のある方はご購入ください。
(会場笑)
これは何かと言うと、先ほどのデモでは、鳥を動かしながら強制スクロールみたいなシーンがありましたが、あそこで動くパスを空間上に引いて、そのパス上を時間軸に沿って動くようなパスを作って、それをTimelineで位置を制御できるようなアセットを作っています。
後半はエンジニア向きの話をしましたが、現場でいろいろカットシーン作るのとか、ワークフローに悩むと思います。Unityの2017以降ではTimelineという選択肢があるという前提で、どういった機能が必要か。
そもそも標準でできるのか、標準以外の機能をエンジニアが作らなければいけないのか、みたいな相談をしてやっていくと、カットインのワークフローがすごくスムーズになったり工数が減ったりするのではないかと思います。
以上、Timelineの紹介でした。ありがとうございました。
(会場拍手)
株式会社Aiming
2024.10.29
5〜10万円の低単価案件の受注をやめたら労働生産性が劇的に向上 相見積もり案件には提案書を出さないことで見えた“意外な効果”
2024.10.24
パワポ資料の「手戻り」が多すぎる問題の解消法 資料作成のプロが語る、修正の無限ループから抜け出す4つのコツ
2024.10.28
スキル重視の採用を続けた結果、早期離職が増え社員が1人に… 下半期の退職者ゼロを達成した「関係の質」向上の取り組み
2024.10.22
気づかぬうちに評価を下げる「ダメな口癖」3選 デキる人はやっている、上司の指摘に対する上手な返し方
2024.10.24
リスクを取らない人が多い日本は、むしろ稼ぐチャンス? 日本のGDP4位転落の今、個人に必要なマインドとは
2024.10.23
「初任給40万円時代」が、比較的早いうちにやってくる? これから淘汰される会社・生き残る会社の分かれ目
2024.10.23
「どうしてもあなたから買いたい」と言われる営業になるには 『無敗営業』著者が教える、納得感を高める商談の進め方
2024.10.28
“力を抜くこと”がリーダーにとって重要な理由 「人間の達人」タモリさんから学んだ自然体の大切さ
2024.10.29
「テスラの何がすごいのか」がわからない学生たち 起業率2年連続日本一の大学で「Appleのフレームワーク」を教えるわけ
2024.10.30
職場にいる「困った部下」への対処法 上司・部下間で生まれる“常識のズレ”を解消するには