Verwenden Sie die NavMeshAgent-Komponente, um den Effekt zu erzielen, dass der Spieler nahe am Feind ist und der Feind den Spieler verfolgt

Zielerreichung: Wenn der Spieler sehr nah am Feind ist, beginnt der Feind, den Spieler zu verfolgen. Nachdem der Feind den Spieler verfolgt hat, ändert der Spieler seine Farbe, der Feind kehrt in seine ursprüngliche Position zurück, der Spieler wechselt wieder zu seiner ursprünglichen Farbe und Wenn der Feind zu seiner Ausgangsposition zurückkehrt, erkennt er weiterhin, ob der Spieler zu nahe bei ihm ist, ob er ihn erneut verfolgen soll usw.

1. Erstellen Sie die Szene und passen Sie den Blickwinkel der Kamera an (der grüne Ball repräsentiert den Spieler und der rote Ball repräsentiert den Feind).

2. Führen Sie den Navigationsbackvorgang auf der ausgewählten Ebene durch und fügen Sie gleichzeitig NavMeshAgent-Komponenten für den Spieler und den Feind hinzu (zugehörige Vorgänge: Weitere Informationen finden Sie im vorherigen Artikel: https://blog.csdn.net/falsedewuxin/article/details /129225267?spm=1001.2014 .3001.5501 )

3. Mounten Sie die entsprechenden Skripte für Player und Enemy

Spieler

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class Player : MonoBehaviour
{
    NavMeshAgent playerNav;
    // Start is called before the first frame update
    void Start()
    {
        playerNav = GetComponent<NavMeshAgent>();
        //设置导航代理的移动速度
        playerNav.speed = 5.0f;
    }

    // Update is called once per frame
    void Update()
    {
        Ray CameraRay=Camera.main.ScreenPointToRay(Input.mousePosition);
        RaycastHit hit;
        if(Physics.Raycast(CameraRay,out hit)&&Input.GetMouseButtonDown(0))
        {
            //检测是否为Plane
            if(hit.collider.name == "Plane")
            {
                playerNav.SetDestination(hit.point);
            }
        }
        
    }
}

Feind

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;

public class Enemy : MonoBehaviour
{
    NavMeshAgent enemyNav;
    GameObject player;
    Vector3 startPos;
    bool isBack=false;
    // Start is called before the first frame update
    void Start()
    {
        enemyNav = GetComponent<NavMeshAgent>();
        //设置导航代理的速度
        enemyNav.speed = 2.0f;
       //这里的Player要和Hierarchy中的Player名称一致
        player = GameObject.Find("Player");
        startPos=transform.position;
    }

    // Update is called once per frame
    void Update()
    {
        //player离enemy太近,则enemy开始追击player,追到playr之后,player变为黑色,enemy会先回到自己的起始位置,然后再次检测player离的是否过近,是否再次追击
        if(Vector3.Distance(transform.position,player.transform.position)<2&&!isBack)
        {
            enemyNav.SetDestination(player.transform.position);
            if(Vector3.Distance(transform.position,player.transform.position)<1)
            {
                player.GetComponent<MeshRenderer>().material.color = Color.black;
                isBack = true;
            }
        }
        else
        {
            //player离enemy太远,则enemy回到自己最初的位置
            enemyNav.SetDestination(startPos);
            if(Vector3.Distance(transform.position,startPos)<0.1)
            {
                //回到起始位置后,isBack变为false,表示enemy可以再次检测player是否离的太近,是否再次追击
                isBack = false;
                //enemy回到起始位置后,把player变会绿色
                player.GetComponent<MeshRenderer>().material.color = Color.green;
            }
        }   
    }
}

4. Führen Sie Unity aus, klicken Sie auf Ebene und testen Sie den Effekt

Fazit: Der Baum, der umarmt, entsteht am Ende der Haare; die neunstöckige Plattform beginnt auf dem Erdhaufen; die Reise von tausend Meilen beginnt mit einem einzigen Schritt.

Je suppose que tu aimes

Origine blog.csdn.net/falsedewuxin/article/details/129489013
conseillé
Classement