敵の挙動
用意する敵はうごけばなんでも大丈夫です。今回用意する敵は次のような挙動をします。
・ある範囲内に近づくとplayerの方へ走ってくる
・向きを変えて向ってくる
・指定した範囲だけで行動する
行動範囲の設定
1.まずは[window]→[PackageManager]→[ResistryUnity]から[AI Navugation]をインストールします。
2.ステージ上のオブジェクト(床も)にNavMeshSurfaceをコンポーネントし[Bake]というボタンを押します。そうすると敵オブジェクトが行動できる範囲が青くなります。
敵オブジェクトにエリア情報を加える
このエリアを敵オブジェクトに加えていきます。
1.Enemyオブジェクトを選択し、[NavMeshAgent]をコンポーネント。敵オブジェクトに[Rigidbody]がある場合これと干渉するので[rigidbody]を外します。(機能上問題ありません)
2.敵オブジェクトの動きもまとめてコードに書きました。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
public class EnemyController : MonoBehaviour
{
public float movespeed;
public Rigidbody theRB;
public bool chasing;
public float distanceToChase = 10f, distanceToLose = 15f, distanceToStop=2f;
private Vector3 targetPoint,startPoint;
public NavMeshAgent agent;
public float keepChasingTime = 5f;
private float chaseCounter;
private void Start()
{
startPoint = transform.position;
}
private void Update()
{
targetPoint = playerController1.instance.transform.position;
targetPoint.y = transform.position.y;
if (!chasing)
{
if (Vector3.Distance(transform.position, targetPoint) < distanceToChase)
{
chasing = true;
}
if(chaseCounter > 0)
{
chaseCounter -= Time.deltaTime;
if (chaseCounter <= 0)
{
agent.destination = startPoint;
}
}
}
else
{
//transform.LookAt(targetPoint);
//theRB.velocity = transform.forward * movespeed;
if(Vector3.Distance(transform.position,targetPoint) > distanceToStop)
{
agent.destination = targetPoint;
}
else
{
agent.destination = transform.position;
}
if (Vector3.Distance(transform.position, targetPoint) > distanceToLose)
{
chasing = false;
chaseCounter = keepChasingTime;
}
}
}
コメント