[unity]敵のplyaer検知システム

敵の挙動

用意する敵はうごけばなんでも大丈夫です。今回用意する敵は次のような挙動をします。

・ある範囲内に近づくと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;
            }
        }
        
    }

コメント

タイトルとURLをコピーしました