どうも、大石です。
あなたはunityでプレイヤーが敵を索敵する
機能をつけたいですか?
この記事を読めば、敵を索敵する
機能を簡単に作れますよ。
ということで読んでみてください。
スポンサードサーチ
unityで敵を索敵する方法+コード
でまず結論です。
索敵する方法は、
Vector3.Distance(a,b)という関数と
if文を組み合わせて、インスペクターで
索敵したいオブジェクトを登録すればできます。
コード的には以下のコードを書いて、
プレイヤーオブジェクトにスクリプトコンポーネントを
つければできます。(スクリプトのクラス名はご自由にどうぞ)
索敵に関わりあるとこだけ背景色黄色にします。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class findEnemy : MonoBehaviour
{
public GameObject enemy;
float distance;
// Start is called before the first frame update
void Start()
{
}
// Update is called once per frame
void Update()
{
distance = Vector3.Distance(transform.position,enemy.transform.position);
if(distance < 20.0){
transform.LookAt(enemy.transform.position);
}
}
}
ちなみにVector3.Distance()引数のa,bには、
transform.positionなど座標に関する
変数が入ります。
索敵のコードの仕組み説明
でなんでこれで索敵できんの?と、
思ったかと思うのでご説明していきます。
まずVector3.Distance(a,b);というのは、
unityで用意されてる関数でして、
これはオブジェクト同士の距離を出してくれます。
例えばオブジェクトAとオブジェクトBが
シーン上にあったとして、
それの距離をfloat(小数点)で出してくれます。
例で図にしてみると以下の感じです。
A————B
AとBの距離4.5。
みたいな感じです。
で、これで何ができるかというと、
if文と組み合わせることで、
索敵範囲を設定することができるのです。
例えば、もしもAとBの距離が3以下なら、
攻撃とか何か反応させるみたいなことができます。
コードにすると以下の感じです。
if(distance < 3.0){
攻撃の記述;
}
*distanceはVector3.Distance(a,b)で
算出される値を格納する変数
↑
float distance = Vector3.Distance(a,b);
的な。
こうすると常に索敵しながら敵を
見つけたら攻撃できるスクリプトになります。
なので、unityで索敵をするなら、
Vector3.Distance(a,b);を使って距離を出し、
あとはif文と組み合わせるだけで基本可能です。
索敵のためのDistance()のコードの書き方
「なるほど仕組みはわかった、
で具体的にはVector3.Distance(a,b);
はどう書くのん?」
ということでここからはそこの説明です。
Vector3.Distance(a,b);
のaとbですが、
繰り返しになりますが、
ここには距離を測りたいオブジェクトの
座標を入れます。
例えば、プレイヤーと敵の距離を測りたいなら
プレイヤーと敵の座標をこのaとbに書きます。
でプレイヤーの座標ですが、
スクリプトを直接プレイヤーオブジェクトに
はっつけるのであれば、
これは普通にtransform.positionでokです。
*transform.positionはスクリプトをつけてる
オブジェクトの座標を示す変数です。
なので、まずaのとこは、
Vector3.Distance(transform.position ,b);
になります。
で次にbの敵の座標ですが、
これを記述するには、
敵オブジェクトの座標を取得する必要があります。
ということで、座標を取得するためにまず
Public GameObject enemy;
とかで敵オブジェクト用の変数宣言をして、
インスペクター上で、索敵対象になる
敵オブジェクトを変数にドラッグ&ドロップして
登録しておきましょう。
でこうすると敵オブジェクトの座標を取得できるので、
あとは敵オブジェクトの座標を示す変数である、
enemy.transform.positionをbに書けばokです。
つまり、こうなります。
Vector3.Distance(transform.position ,enemy.transform.position);
で上記のように書いておけば、
プレイヤーと敵オブジェクトの距離を
算出してくれるので索敵に使えるようになります。
でこの距離の関数をこのままだと使いにくいんで、
float distance=Vector3.Distance(transform.position ,enemy.transform.position);
と書いて、変数に格納しときましょう。
であとは、if文です。
if (distance < 10,0){
何かしらの記述;
}
を書いてupdate内に記述しておけば、
常にプレイヤーが敵を索敵しながら
動いてくれるようになります。
スポンサードサーチ
まとめ
ということでまとめに入ります。
unityで敵を索敵したいなら、
Vector3.Distance(a,b)という関数と
if文を組み合わせればできます。
あとはif文の{}内に好きな記述を書けば
敵を見つけた時の反応を自由に制御できるので
ゲームっぽく攻撃とか色々やってみましょう。
ということでunityで敵を索敵する方法でした。
読んでもらってありがとうございました。
大石