weixin_63967673 2022-09-01 14:06 采纳率: 94.1%
浏览 36
已结题

关于#unity#怪兽到监测距离时怪兽只有走路动作没有走路的移动的问题,如何解决?

unity 怪兽到监测距离时怪兽只有走路动作没有走路的移动


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

public class GuaiWu : MonoBehaviour
{
    public enum EnemyState
    {
        idle,
        run,
        attack,
        death,
    }
    public EnemyState CurrentState = EnemyState.idle;
    Animator imator;
    UnityEngine.AI.NavMeshAgent agent;
    Transform Player;
    // Start is called before the first frame update
    void Start()
    {
        imator = GetComponent<Animator>();
        agent = GetComponent<UnityEngine.AI.NavMeshAgent>();
        Player = GameObject.FindWithTag("Wolf").transform;
    }

    // Update is called once per frame
    void Update()
    {
        float distance = Vector3.Distance(Player.position, transform.position);
        switch (CurrentState)
        {
            case EnemyState.idle:
                if (distance > 2 && distance <= 10)
                {
                    CurrentState = EnemyState.run;
                }
                if (distance < 2)
                {
                    CurrentState = EnemyState.attack;
                }
                imator.Play("Idle");
                agent.isStopped = true;
                break;
            case EnemyState.run:
                if (distance > 10)
                {
                    CurrentState = EnemyState.idle;
                }
                if (distance < 6)
                {
                    CurrentState = EnemyState.attack;
                }
                imator.Play("Run");
                agent.isStopped = false;
                agent.SetDestination(Player.position);
                break;
            case EnemyState.attack:
                if (distance > 2)
                {
                    CurrentState = EnemyState.idle;
                }
                if (distance < 1)
                {
                    CurrentState = EnemyState.attack;
                }
                imator.Play("Attack");
                agent.isStopped = false;
                agent.SetDestination(Player.position);
                break;

        }
    }
}
  • 写回答

3条回答 默认 最新

  • m0_46371304 2022-09-01 17:46
    关注

    agent.SetDestination(Player.position); 这个设置目标地点后会隔几帧才开始寻路,然后你一直在update设置这个点 会导致每帧都重新开始计算路径,然后等待

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月14日
  • 已采纳回答 9月6日
  • 创建了问题 9月1日

悬赏问题

  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan