Unity

【Unity】特定の条件でTimelineが再生されるようにする方法【例:オブジェクトへの当たり判定、キー入力】

本記事内には、アフィリエイトリンクを含む場合があります

Timelineの使い方について、これまで紹介してきましたが、

実際にゲーム開発の中で、どのように使えるのか、考えたいと思います。

Timelineはムービーやアニメーションを作成するのに便利な機能です。
なので、イベントシーンを作成するに有用です。

「ゲームを進める」

「イベント発生」(アニメーションまたはタイムラインの実行)

「ゲーム継続」

特定の条件が満たされた場合に、

Timelineが再生されるように設定すれば、ゲーム中にイベントを発生させることができます。

作り方は、タイムラインを用意できていれば、あとはコーディングで制御するだけ!

今回見本として解説するのは、こんなもの↓

緑の下部はTimelineが再生されている様子です。
ここではBoxが動くアニメーションのみTimelineに設定してます。

Timeline再生の条件は、下の2つが満たされたときとしています。
①Boxにぶつかる
②Qキーを入力する

※単なるアニメーションの実行に思われるかもしれませんが、
Boxが動くように設定したタイムラインが再生されています。

ちなみに、
宙に浮く球がフェードイン・アウトしているのは、タイムラインでなくスクリプトで制御しています(当たり判定によって徐々に透明度が変わるようにしている)。その方法はこちら↓

【Unity】メッシュモデルや3Dオブジェクトをフェードイン・フェードアウトさせる方法【スクリプトで徐々に消す】Unityを使ってゲームや映像を作っていると、 3Dオブジェクトに、徐々に消えるエフェクトをつけたいと思ったことはないですか? ...

1.Timlineアニメーションの準備

Cubeが動くTimelineの作り方は、以前紹介した方法に則れば、サクッと作成できます。

【Filmora】画像にアニメーション(位置・回転・スケールを変化)させる方法【これだけでアニメが作れる】誰もが簡単に動画編集を可能とするソフトFilmora! 今回は、Filmoraで画像が自由に動くアニメ―ションの作り方を説明したい...

ざっくり言うと、

シーンにCubeを配置して、Timelineファイルを紐づけ。

Timlineファイルの中身は、アニメーションを設定するのと同じ感覚で、設定します。

デフォルトでは、Timelineの紐づけたときにアタッチされるコンポーネントの「Play On Awake」のチェックを外します

※これはゲームの実行とともに、そのTimelineが再生されるというもの。

今回は、特定の条件が満たされたときだけ、Timelineを実行したいので、解除しておきましょう。

ピンク文字の部分が準備できたと思います。

次に、黄色文字のスクリプトを作り、Timelineが再生される条件を設定します。

2.スクリプトによるTimelineの制御

Timelineをどのように再生させるかによりますが、今回はBoxへの当たり判定を条件に加えます。

なので、Boxにその制御するスクリプトをアタッチするのが簡単です。

次のTimelineControl.csというスクリプトを作成し、アタッチします。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Playables; //Timelineの制御に必要

public class TimelineControl : MonoBehaviour
{
    public PlayableDirector playableDirector;
    public bool isBoxmover = false;
    public GameObject QText;

    // Start is called before the first frame update
    void Start()
    {
        playableDirector = GetComponent<PlayableDirector>();
    }

    // Update is called once per frame
    void Update()
    {
        if(isBoxmover && Input.GetKeyDown(KeyCode.Q))
        {
            PlayTimeline();
            isBoxmover = false;
            QText.SetActive(false);
        }
        
    }

    void OnTriggerEnter(Collider other)
    {
        if(other.gameObject.tag == "Player"){
         Debug.Log("当たりました"); //確認用
         QText.SetActive(true);
         isBoxmover = true;
        }
    }

    //再生する
    void PlayTimeline()
    {
        playableDirector.Play();
    }

    //一時停止する
    void PauseTimeline()
    {
        playableDirector.Pause();
    }

    //一時停止を再開する
    void ResumeTimeline()
    {
        playableDirector.Resume();
    }
        
    //停止する
    void StopTimeline()
    {
        playableDirector.Stop();       
    }
}

 

変数の宣言は、

playableDirector(実行するTimeline)、isBoxmover(Timelineを作動させるboolスイッチ)、QText(Timelineを再生できることを示すテキスト)

の3つをしています。

いずれもInspectorで項目を確認&設定できるようにpublicとしていますが、isBoxmoverはゲーム内の当たり判定でboolがtrueになるように設計します。

(isBoxmoverを使わなくともTimeline再生は可能ですが、連続再生されないように無効化しやすい)

このスクリプトでは、ゲーム実行時(void Start)に、再生するTimelineを定義させます。

そして、フレーム処理時(void Update)に、

isBoxmoverが「ture」になり、かつQキーが押されたときに、

PlayTimeline()というメソッドが読まれて、Timelineが再生されるようにしています。

 

isBoxmoverが「true」になる条件は、当たり判定を検出するメソッドである「onTriggerEnter」を使います。

playerというタグ付けされたオブジェクトに、このスクリプトがアタッチされているBoxが当たると、isBoxmoverが「true」になります。

また、QTextが有効化されます(SetActiveがtrueになる)。

QTextは単なるテキストです。あることで、プレイヤーにイベント(Timeline)が再生可能ですよという、合図的な意味合いで使いました。

(Qキーを押すことを条件に入れなければ、不要です)

最後の方には、自分の備忘録もかねて、
PlayTimeline()の他、
PauseTimeline():一時停止
Resumetimeline():再開
StopTimeline():停止
ということも書いておきました^^

冒頭のusing UnityEngine.Playablesを呼び出すことで、これらが使えるようになるので、知っておきましょう。

 

さて、スクリプトをアタッチしたら、
図のような操作をして、準備完了です!!

スクリプトの項目である
Playable Directorには、それが取り付けられているオブジェクトを、
QTextにはCanvas配下に作ったTextオブジェクトを、
それぞれドラッグ&ドロップします。

Textオブジェクトは、当たり判定後にSetActiveでtrueにするので、デフォルトでは非アクティブにしておきます。

Boxの当たり判定を使う方法ですが、
Box ColliderIs Triggerにチェックを!
そして、Rigidbodyコンポーネントのアタッチが必須です。
ただ、TimelineのアニメーションでBoxを動かす場合、重力の影響を受けるとおかしなことになるので、Use Gravityのチェックは外しましょう^^;

最後に操作するプレイヤーキャラクターについて、

当たり判定はPlayerを対象とするので、タグでPlayerを選びます。

操作キャラクターは、本ブログでお馴染みのシステマンにしてますが、Unity-Chanと同じ設定で動かせます。

自作モデルを動かしたい場合はご参照ください↓

【Unity】プレイヤーキャラクターを動かす方法(矢印の方向に移動させるタイプ)【カメラ固定ゲーム向き】Unity初心者は、まず初めに ”プレイヤーキャラクターを動かしたい(操作したい)” と思うのが、世の常ではないでしょうか?...

というわけで、解説は以上です。

これで、Timelineとゲームをシームレスに実行できるはずです!

cinemachineを使うとイベント中のアングルも変えられてよいですよ!

それは、またの機会に^^

unityビギナーは、まずunityに触れまくろ~
世界基準のエンジンを日本語で親しみやすくするならこちら↓

Unityのチュートリアルやエディターを日本語化する方法【英語に抵抗があっても大丈夫】Unityは、世界屈指のゲーム開発エンジンです。 ゲーム業界にとどまらず、XR技術によって、さまざまな事業を牽引する存在となるでし...
ABOUT ME
いなも@システマライフハッカー
”仙豆”を開発することを夢見て、健康食品会社で働いていたものの、2016年に出会ったロシアの武術”システマ”こそ、その糸口があると感銘し、勝手にシステマ普及活動を始める。 一方で、クリエイティブなモノ作りが好きで、DX社会で楽しみを見出せる"Unity”を活かして、”スマートかつ快適な暮らし”のヒントを発信している。

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA