みなさんこんにちは。
今回は敵をロックオンする機能を現在開発中のゲームに実装していこうと思います。
カメラの設定
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