Unity勉強中!あこがれだったプログラマーに今からなろう!

昔あこがれだったプログラマー。今からでもUnityを勉強してみようと思い立ち、チャレンジ開始! Unity勉強メモや、悪戦苦闘な日々の記録です。

3Dアクションゲームを作ろう(5)

流星咲斗さんの【3Dアクションゲーム】作り方。
動画シリーズでの勉強は今日の#15 『敵をロックオン』で最後。
まだ、
#11 『ゲームオーバー表示を実装』
#13 『制限時間の実装』
#14 『スコアを作る』
#16 『ゲームを 書き出す』
といくつかの動画はやっていないけれど、サイドビューアクションゲームで学んだことと
重なる部分と思えたのでパスした。

さて、#15 『敵をロックオン』
www.youtube.com

3DARPGを遊ぶには是非とも欲しい機能だ🤩

作り方もそれほど難しくなく、サクッと実装する。
これで、一応ロックオン機能の完成ではあるのだけど、
敵をロックオンしていると、カメラがロックオンした敵の方向を向き続けるとはいえ、
Playerの操作性でしかロックオン状態が判断できないのは、ちょっと寂しい気がした。

そこで、よくある感じに、ロックオンしている敵を強調表示にするなどして、画面上でも
分かりやすいようにできないかと、色々調べていると、ぴったりなアセットを紹介して
いる記事を見つけた。

compota-soft.work
無料アセットのQuick Outline
アウトラインを表示させたいオブジェクトにAdd Componentで搭載しておくことで、
とても簡単にオブジェクトにアウトラインを表示させる事ができた😆

そうとなれば、あとは流星さんのEnemyListをTransformではなくGame Objectを格納
するように変更して、
TargetLockメソッドにこのアウトラインの表示を追加してやれば良い。

    void TargetLock()
    {
            ・・・ //抜粋省略

                Target=enemyListManager.EnemyList[TargetCount];
                Target.GetComponent<Outline>().enabled=true;
                TargetCount++;

            ・・・ //抜粋省略
    }

あとは、Enemy List ManagerのOnTriggerExitで、離脱する敵がTargetに登録されていれば
アウトラインを消して、Targetをnull化する処理を加えてやる。

    private void OnTriggerExit(Collider other) 
    {
        if(other.tag=="Enemy")
        {
            for (int i = 0; i < EnemyList.Count; i++)
            {   
                if(EnemyList[i]==other.gameObject)
                {
                    if(playerController.Target==other.gameObject)
                    {
                        playerController.Target=null;
                        other.GetComponent<Outline>().enabled=false;
                    }
                    EnemyList.RemoveAt(i);
                }
            }
        }
    }

こうすれば、ロックオンした敵がロックオンエリアから歩いて離脱した時に、
アウトラインが表示されっぱなしや、離脱した敵がロックオンされたままになるのを防止
できる。

完成形はこんな感じ。
youtu.be

2匹のスライム間でターゲットロックオンを変えている。
最後はロックオンした敵がロックオンエリア外に離脱する事でロックオン状態が解除され
ている。