Unityに関連する記事です

 ゲーム内でのムービー再生機能の実装を行います。
非常に実装内容が多くなるため、まずは2回の手順に分けて機能実装のための事前の準備を行います。

<学習内容>
 ・ムービー用のデータベースの作成方法(スクリプタブル・オブジェクトを利用)
 ・マネージャークラスの作成方法 ー関連する機能を1つのスクリプトにまとめて記載する手法(今回は VideoPlayer コンポーネントを制御する処理を1つのスクリプトにまとめる)ー



1.VideoData スクリプトを作成する


 ムービーの情報を登録するためのクラスと、それをまとめて管理するためのスクリプタブル・オブジェクトを作成します。
まずはムービー単位で管理するために VideoData クラスを作成します。これを List として扱えるようにします。

 VideoData クラス内には2つの変数を用意します。他に情報が必要な場合には適宜追加してください。
例えばここでは、3つ目の変数として Sprite 型の thumbnailSprite 変数を宣言していますが、この変数が任意で追加している部分です。


VideoData.cs

<= クリックすると開きます



2.VideoDataSO スクリプトを作成する


 VideoData クラスを List でまとめて管理して、スクリプタブル・オブジェクトとして利用できるようにします。

 スクリプタブル・オブジェクトは、[CreateAssetMenu] 属性を付与したクラスに、
MonoBehaviour の代わりに ScriptableObject 型を継承することで、アセットとして作成出来るようになります。


VideoDataSO.cs

<= クリックすると開きます


 スクリプトを作成したらセーブを行います。


3.VideoDataSO スクリプタブル・オブジェクトを作成する


 Datas フォルダ内で右クリックをしてメニューを開き、Create => Create VideoDataSO を選択してスクリプタブル・オブジェクトを作成します。
このメニューが表示されない場合には、VideoDataSO スクリプト内の CreateAssetMenu 属性の付与されているか、ScriptableObject を継承しているかの両方を確認してください。


<メニューからスクリプタブル・オブジェクトを作成>




 Size を 0 から変更し、Videos フォルダ内にインポートした mp4 ファイルの動画をドラッグアンドドロップしてアサインします。
この例では Size を 2 にし、2つの mp4 ファイルをアサインしています。

 VideoNo 変数は動画を管理する通し番号(ID)として利用する番号ですので、0 から順番に採番し、重複する番号を作らないようにしてください。

 VideoData クラス内に宣言している変数の数により、インスペクターに表示される情報が異なりますので、ここでは2パターン提示しておきます。


インスペクター画像(サムネイル画像を利用しない場合)



インスペクター画像(サムネイル画像を利用する場合)



4.DataBaseManager スクリプトを作成する


 スクリプタブル・オブジェクトは作成しただけではゲーム内で利用できないため、
VideoDataSO スクリプタブル・オブジェクト用の変数を用意して、そちらにアサインして利用するようにします。

 管理の方法はいくつかあり、VideoDataSO スクリプタブル・オブジェクトを、次の手順で作成する VideoClipManager スクリプトに管理させてもよいです。
今回は、今後、スクリプタブル・オブジェクトが増えることを想定し、複数のスクリプタブル・オブジェクトを管理するための専用のクラスとして
DataBaseManager を用意しています。

 また、スクリプタブル・オブジェクト内の必要なデータを見つける(検索して取得する)ための専用のメソッドを作成しています。
スクリプタブル・オブジェクトはデータベースとして利用できますが、必要なデータを見つけることが出来なければ活用していることになりません。
そのため、スクリプタブル・オブジェクト内の情報を検索するための処理をメソッド単位でまとめて用意しておく必要があります

 検索する機能を有した使い方を想定しているため、DataBaseManager クラスはシングルトンクラスとして作成しています。
シングルトンクラスとすることにより、外部のクラスからのアクセスが容易であるため、
利便性の高いクラスに今回のような検索用のメソッドを作成しておくと、非常に使い勝手のよいクラスになります。



DataBaseManager.cs

<= クリックすると開きます。



5.VideoClipManager スクリプトを作成する


 VideoPlayer を活用してムービー再生するための機能を持つスクリプトを作成します。
このスクリプトには VideoPlayer に関連する処理をまとめて記載しておきます。例えば、動画を再生するメソッド、停止するメソッドなどを用意します。

 こちらのクラスも利便性を考え、いずれのスクリプトからでも動画再生/停止のメソッドにアクセスしやすいように、シングルトンクラスとして作成しています。

 大切なポイントとしては、再生するムービーは毎回固定で同じ、という訳にはいきません。シーンごとに適切な動画を再生する必要があります。
そのため、先ほど作成した VideoDataSO スクリプタブル・オブジェクト内に登録されている VideoClip (ムービー動画)をその都度読み込んで、
ゲームの場面に適したムービーを再生する機能を持つ汎用的な処理が行えるように設計をしています。

 また今回は再生の途中でも画面をクリックすることでスキップする機能も合わせて実装します。
ただし、内部的にはムービーの一時停止の処理をスキップ用に流用していますので、
スキップだけではなく一時停止の機能も実装したい場合には、別の実装方法を検討する必要があります。


VideoClipManager.cs

<= クリックすると開きます


 スクリプトを作成したらセーブします。

 各メソッドや変数が、どういった役割を持って用意されているかをしっかりと理解してから進めてください。


5.VideoClip_Canvas ゲームオブジェクトに VideoClipManager スクリプトをアタッチして設定を行う


 VideoClipManager スクリプトをアタッチします。自動的に CanvasGroup コンポーネントもアタッチされます。


インスペクター画像




 以上でムービーの再生に必要なスクリプト群の作成が完了しました。
ただし、これは事前の準備であるため、実際には次の手順で、自分のプロジェクト内にムービー再生機能を取り入れていくことになります。

 => 次は VideoPlayer を利用したイベント処理の実装例 です。

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu



技術/知識(実装例)

2Dおはじきゲーム(発展編)

2D強制横スクロールアクション(発展編)

3Dダイビングアクション(発展編)

2Dタップシューティング(拡張編)

レースゲーム(抜粋)

2D放置ゲーム(発展編)

3Dレールガンシューティング(応用編)

3D脱出ゲーム(抜粋)

2Dリアルタイムストラテジー

2Dトップビューアドベンチャー(宴アセット使用)

3Dタップアクション(NavMeshAgent 使用)

2Dトップビューアクション(カエルの為に〜、ボコスカウォーズ風)

VideoPlayer イベント連動の実装例

VideoPlayer リスト内からムービー再生の実装例(発展)

AR 画像付きオブジェクト生成の実装例

AR リスト内から生成の実装例(発展)

private



このサイト内の作品はユニティちゃんライセンス条項の元に提供されています。

管理人/副管理人のみ編集できます