文系忘備録

どこにでもいる文系大学生の忘備録です

MENU

【Unity】敵をロックオンしてカメラを追従させる機能を実装する【C#】【入門】

みなさんこんにちは。
今回は敵をロックオンする機能を現在開発中のゲームに実装していこうと思います。

カメラの設定

CInemachineの導入

今回はカメラにCinemachineというUnity公式のアセットを使うので、もしインストールしていない方はインストールしてください。

シネマシンを導入するとカメラと一体化します
ここでのFollowはカメラを追従させるか、
LookAtはターゲットを見続けるかになります、
そしてAimという項目を必ずGroupComposerに設定してください。

そして次に空のオブジェクトに画像のようにCinemachineTargetGroupをアタッチしてください。
そしてこの空のオブジェクトをさっきのLookAtとFollowに設定します。

このCinemachineTargetGroupのTargetの部分に入ってるTransformがカメラの対象になります。

このTargetにスクリプトからTransformを追加する場合は下のように行えます。
Using Cinemachine; を先頭に記述してから

[SerializeField] private CinemachineTargetGroup group;
void Start()
{
    // targetに追加 (transform,Weight,Radius)
    group.AddMember(transform,1,1);
    //targetから削除
    group.RemoveMember(transform);
}

そして現在のTargetを取得する場合は、

var targets = new CinemachineTargetGroup.Target[8];
targets = group.m_Targets;

敵を検知する

Physics.OverlapSphereNonAlloc

Physics.OverlapSphereNonAllocは球状の設定した範囲内のコリダーを見つけることができます。
使い方としては、

Collider[] colliders = new Collider[16];
int num = Physics.OverlapSphereNonAlloc(pos, 10, colliders, targetLayer);

のようになります。
引数は(円の中心位置のVector3,円の半径,検知したコライダーの配列,検知するコリダーのレイヤー(任意))
戻り値は要素の数を返します。

実際に使ってみた

これらを使って実際に開発中のゲームにロックオン機能を実装してみました。
https://studio.youtube.com/video/3CTx4dN81o8/editwww.youtube.com