2024.10.10
将来は卵1パックの価格が2倍に? 多くの日本人が知らない世界の新潮流、「動物福祉」とは
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.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略
2024.11.13
週3日働いて年収2,000万稼ぐ元印刷屋のおじさん 好きなことだけして楽に稼ぐ3つのパターン
2024.11.11
自分の「本質的な才能」が見つかる一番簡単な質問 他者から「すごい」と思われても意外と気づかないのが才能
2024.11.13
“退職者が出た時の会社の対応”を従業員は見ている 離職防止策の前に見つめ直したい、部下との向き合い方
2024.11.12
自分の人生にプラスに働く「イライラ」は才能 自分の強みや才能につながる“良いイライラ”を見分けるポイント
2023.03.21
民間宇宙開発で高まる「飛行機とロケットの衝突」の危機...どうやって回避する?
2024.11.11
気づいたら借金、倒産して身ぐるみを剥がされる経営者 起業に「立派な動機」を求められる恐ろしさ
2024.11.11
「退職代行」を使われた管理職の本音と葛藤 メディアで話題、利用者が右肩上がり…企業が置かれている現状とは
2024.11.18
20名の会社でGoogleの採用を真似するのはもったいない 人手不足の時代における「脱能力主義」のヒント
2024.11.12
先週まで元気だったのに、突然辞める「びっくり退職」 退職代行サービスの影響も?上司と部下の“すれ違い”が起きる原因
2024.11.14
よってたかってハイリスクのビジネスモデルに仕立て上げるステークホルダー 「社会的理由」が求められる時代の起業戦略