unity3d 使用NavMeshAgent时,如何防止滑动?

fzsnzjdm  于 2022-12-23  发布在  其他
关注(0)|答案(1)|浏览(348)

我用NavMesh代理的agent.destination写了一段简单的代码,它允许敌人追踪玩家。但是,在追踪目标的过程中,敌人不断地滑倒,无法正确地追踪。

using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AI;
using static UnityEngine.EventSystems.EventTrigger;

public class Enemy : MonoBehaviour
{
    public Transform target;
    public Transform runAwayPos;
    public NavMeshAgent agent;
    public Transform spwanPosition;

    void Start()
    {
        agent = GetComponent<NavMeshAgent>();
    }

    void Update()
    {
        StartCoroutine(Run());
        if (Time.timeScale == 0)
        {
            transform.position = spwanPosition.position;
        }
    }

    IEnumerator Run()
    {
        agent.speed = 9f;
        agent.destination = target.transform.position;
        yield return null;
    }

    private void OnTriggerEnter(Collider collision)
    {
        if (collision.gameObject.CompareTag("Player"))
        {
            transform.position = spwanPosition.position;
            Debug.Log("hit");
        }
    }
}

我想知道敌人怎么能追踪一个玩家而不滑倒。

xurqigkl

xurqigkl1#

首先,你调用每帧的IEnumarator。这会导致不想要的结果。使用update或IEnumarator。
在我看来,

void Update()
    {
      agent.SetDestination(target.position);

        if (Time.timeScale == 0)
        {
            transform.position = spwanPosition.position;
        }
    }

顺便说一下,您应该使用布尔值来检查未跟踪的案例。

相关问题