Unityに関連する記事です

カットシーン


 3回の手順に分けて学習します。



 ゲーム内においては、ゲーム内にあるオブジェクトを利用したカットシーンが挿入されることがあります。

 ここでは Timeline と Cinemachine を組み合わせた、カットシーンの制作例を提示します。
この教材では、木の上に隠れていたゾンビが降りてくるのに合わせて、カメラの移動処理を行うシーンになっています。

 教材で学習した内容や、自分で調べた内容を元に、具体的なカットシーンの内容は自分で考えて作りましょう

 以下の動画は3回分の手順が完成した際のものです。


<実装動画>
動画ファイルへのリンク


<実装動画>
動画ファイルへのリンク


<実装動画>
動画ファイルへのリンク


設計


 Unity の用意している Timeline と Chinemachine の機能を活用して、カットシーンの制作をおこないます。

 今回は、特定の位置にプレイヤーが侵入したときに、Timeline が動いて、カットシーンが再生される仕組みになっています。

 実装目標は、「‘団蠅琉銘屬縫廛譽ぅ筺爾侵入したときに」「Timeline が動いて、カットシーンが再生される」仕組みを作ることです。

 △砲弔い討麓汰が完成しましたので、今回は,粒惱を行います。

 ・侵入判定用のゲームオブジェクトの作成
 ・スクリプトの作成
 ・Timeline の修正


Timeline_Cutscene ゲームオブジェクトの Playable Director コンポーネントの設定を行う


 Timeline_Cutscene ゲームオブジェクトにアタッチされている Playable Director コンポーネントの設定を確認します。

 Play On Awake 項目にチェックが入っていますので、このチェックを外してください。
これでゲームを実行しても、自動的に Timeline の再生を行わなくなります。


インスペクター画像



TriggerCutscene ゲームオブジェクトを作成する


 侵入判定用のゲームオブジェクトの作成を作成します。名前は TriggerCutscene にしてください。
コライダー機能を利用しますので、Create Empty ではなく、Cube などのゲームオブジェクトを作成して、名前変更して利用すると便利です。

 このコライダー部分にプレイヤーが侵入したことをスクリプトを利用して判定し、Timeline を再生させるような仕組みを作ります

 いま自分がどのような機能を作っているのかを理解しながら進めるようにしましょう。
教材に書いてあるからやっていく、では学習効果は薄くなります



 見えない侵入判定用のゲームオブジェクトですので、MeshRenderer コンポーネントのスイッチはオフにするか、コンポーネント自体を Remove してください。

 下記は参考画像です。サイズや位置などは適宜、自分のプロジェクトに合わせて調整してください。


インスペクター画像



Scene ビュー画像



サンプルコード


 プレイヤーが特定の位置に侵入した際に Timeline を再生し、カットシーンを実行するスクリプトです。
先ほど作成した TriggerCutscene ゲームオブジェクトにアタッチして利用します。



 Timeline に対しての命令は PlayableDirector クラスを利用します。
UnityEngine.Playables 名前空間に含まれているクラスですので、using UnityEngine.Playables; を追加してください。

 侵入判定用の OnTriggerEnter メソッドでは、タグによる判定とクラスによる判定の2つの処理を用意してあります。
いずれか一方を採用してください

 ただし、タグよりもクラスによる判定の方がメリットが大きいので、出来ればそちらを利用しましょう。
例えば、PlayerController で判定したい場合には、 if (other.TryGetComponent(out PlayerController player)) { のように書き換えて利用してください。



 Timeline が再生を終了したことも確認出来るようにしてあります。
多くの場合、カットシーン再生中ではプレイヤーの操作は出来ない状態になると思いますので、TODO を用意してあります。

 それらの制御処理については、自分のプロジェクトに合わせて TODO 部分に実装していくようにしてください。


using System.Collections;
using UnityEngine;
using UnityEngine.Playables;  // 追加してください。

public class TriggerCutscene : MonoBehaviour
{
    [SerializeField] private PlayableDirector playableDirector;

    private string target = "Player";  // MainCamera など、自分のプロジェクトに合わせて適宜変更してください。


    void OnTriggerEnter(Collider other) {

        if (other.CompareTag(target))
        {            
            Debug.Log("カットシーン 開始");

            // TODO カットシーンが始まったときの処理。プレイヤーの移動制御、行動制御など

            // カットシーン再生
            StartCoroutine(PlayCutscene());
        }

        if (other.TryGetComponent(out [判定したいクラスと変数])) {

            Debug.Log("カットシーン 開始");

            // TODO カットシーンが始まったときの処理。プレイヤーの移動制御、行動制御など

            // カットシーン再生
            StartCoroutine(PlayCutscene());
        }
    }

    /// <summary>
    /// カットシーン再生
    /// </summary>
    /// <returns></returns>
    private IEnumerator PlayCutscene() {
        
        playableDirector.Play();

        // カットシーンが終了するまで待機
        // while (playableDirector.state == PlayState.Playing) {
        //     yield return null;
        // }

        // カットシーンが終了するまで待機
        yield return new WaitUntil(() => playableDirector.state != PlayState.Playing);
        
        Debug.Log("カットシーン 終了");

        // TODO カットシーン後の処理。プレイヤーの操作を受け付ける状態に戻す、など
        
    }
}

 ,鉢△涼翆能萢はどちらを採用しても問題ありません。(いずれかを採用してください。)


TriggerCutscene ゲームオブジェクトに TriggerCutscene スクリプトをアタッチする


 先ほど作成した TriggerCutscene ゲームオブジェクトに TriggerCutscene スクリプトをドラッグアンドドロップしてアタッチします。

 
インスペクター画像



ゲームを実行して動作を確認する


 ゲームを実行して、今回実装した挙動をチェックしてください。

侵入判定用のゲームオブジェクトにプレイヤーが侵入した際に、Timeline が再生されるかを確認してください。


 正常に動作している場合も、Timeline 再生後には、3Dモデルが最初に位置に戻ってしまいます
これは Timeline の仕様です。

 設定を変更することにより、Timeline で移動後の位置にとどめておくことができます。


Cinemachine_Cutscene ゲームオブジェクトの Playable Director コンポーネントの設定を行う


 Cinemachine_Cutscene ゲームオブジェクトの Playable Director コンポーネントの設定を行います。

 Wrap Mode の設定を None から Hold に変更してください。


インスペクター画像



 これにより、Timeline によるゲームオブジェクトが元の位置に戻らずに、Timeline 再生後の位置に留まります。



ゲームを実行して動作を確認する


 ソースコードの処理を見直して、どういう処理が書かれているのか、また、ゲームを実行した際には
どういった挙動が想定されるのかを理解してから、ゲームを実行するようにしましょう。

 デバッグを行う際には事前の理解が重要です。ただゲームが動けばいい、というものではありません。


<実装動画>
動画ファイルへのリンク



<実装動画>
動画ファイルへのリンク


<実装動画>
動画ファイルへのリンク




 以上になります。
このサンプルコードをベースに改良して、自分だけのデザインを行ってみましょう。

コメントをかく


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

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

Menu



技術/知識(実装例)

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

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

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

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

レースゲーム(抜粋)

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

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

3D脱出ゲーム(抜粋)

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

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

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

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

VideoPlayer イベント連動の実装例

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

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

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

private



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

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