2024.12.19
システムの穴を運用でカバーしようとしてミス多発… バグが大量発生、決算が合わない状態から業務効率化を実現するまで
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.12.20
日本の約10倍がん患者が殺到し、病院はキャパオーバー ジャパンハートが描く医療の未来と、カンボジアに新病院を作る理由
2024.12.19
12万通りの「資格の組み合わせ」の中で厳選された60の項目 532の資格を持つ林雄次氏の新刊『資格のかけ算』の見所
2024.12.16
32歳で成績最下位から1年でトップ営業になれた理由 売るテクニックよりも大事な「あり方」
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
PR | 2024.12.20
モンスター化したExcelが、ある日突然崩壊 昭和のガス工事会社を生まれ変わらせた、起死回生のノーコード活用術
2024.12.12
会議で発言しやすくなる「心理的安全性」を高めるには ファシリテーションがうまい人の3つの条件
2024.12.18
「社長以外みんな儲かる給与設計」にした理由 経営者たちが語る、優秀な人材集め・会社を発展させるためのヒント
2024.12.17
面接で「後輩を指導できなさそう」と思われる人の伝え方 歳を重ねるほど重視される経験の「ノウハウ化」
2024.12.13
ファシリテーターは「しゃべらないほうがいい」理由 入山章栄氏が語る、心理的安全性の高い場を作るポイント
2024.12.10
メールのラリー回数でわかる「評価されない人」の特徴 職場での評価を下げる行動5選
Climbers Startup JAPAN EXPO 2024 - 秋 -
2024.11.20 - 2024.11.21
『主体的なキャリア形成』を考える~資格のかけ算について〜
2024.12.07 - 2024.12.07
Startup CTO of the year 2024
2024.11.19 - 2024.11.19
社員の力を引き出す経営戦略〜ひとり一人が自ら成長する組織づくり〜
2024.11.20 - 2024.11.20
「確率思考」で未来を見通す 事業を成功に導く意思決定 ~エビデンス・ベースド・マーケティング思考の調査分析で事業に有効な予測手法とは~
2024.11.05 - 2024.11.05