C# 只有在使用navmesh的范围内,敌人才会跟随玩家移动

C# 只有在使用navmesh的范围内,敌人才会跟随玩家移动,c#,unity3d,C#,Unity3d,我刚到C#(大约一周),所以我一直在学习很多教程。我目前正试图编辑一段代码(unity教程),以便只有在玩家的特定范围内(10英尺)敌人才能跟随玩家,但不幸的是,如果不完全更改代码,我无法找到解决方案。目前,敌人只会在玩家活着时(我也想要)跟随玩家 我试着用谷歌搜索我想要的,但我不想改变太多的代码。我是c#的新手,目前正在一点一点地学习,我发现的其他方法需要我对代码进行大量修改。据我所知,下面代码的主要重点是让敌人完全被导航网格代理控制,我能保持同样的技术吗 using UnityEngine;

我刚到C#(大约一周),所以我一直在学习很多教程。我目前正试图编辑一段代码(unity教程),以便只有在玩家的特定范围内(10英尺)敌人才能跟随玩家,但不幸的是,如果不完全更改代码,我无法找到解决方案。目前,敌人只会在玩家活着时(我也想要)跟随玩家

我试着用谷歌搜索我想要的,但我不想改变太多的代码。我是c#的新手,目前正在一点一点地学习,我发现的其他方法需要我对代码进行大量修改。据我所知,下面代码的主要重点是让敌人完全被导航网格代理控制,我能保持同样的技术吗

using UnityEngine;
using System.Collections;

public class EnemyMovement : MonoBehaviour
{
    Transform player;
    PlayerHealth playerHealth;
    EnemyHealth enemyHealth;
    UnityEngine.AI.NavMeshAgent nav;

    void Awake()
    {
        // references
        player = GameObject.FindGameObjectWithTag("Player").transform;
        playerHealth = player.GetComponent<PlayerHealth>();
        enemyHealth = GetComponent<EnemyHealth>();
        nav = GetComponent<UnityEngine.AI.NavMeshAgent>();
    }


    void Update()
    {
        if (enemyHealth.currentHealth > 0 && playerHealth.currentHealth > 0)
        {
            nav.SetDestination(player.position);
            transform.LookAt(player);
        }
        else
        {
            nav.enabled = false;
        }
    }
}
使用UnityEngine;
使用系统集合;
公共阶层的复仇运动:单一行为
{
转换玩家;
玩家健康玩家健康;
灌肠健康灌肠健康;
UnityEngine.AI.navMesh代理导航;
无效唤醒()
{
//参考资料
player=GameObject.FindGameObjectWithTag(“player”).transform;
playerHealth=player.GetComponent();
enemyHealth=GetComponent();
nav=GetComponent();
}
无效更新()
{
如果(enemyHealth.currentHealth>0&&playerHealth.currentHealth>0)
{
导航设置目的地(玩家位置);
变换。看(玩家);
}
其他的
{
nav.enabled=false;
}
}
}
如果可能,我想添加2个If函数。一个是检查玩家是否还活着,另一个是检查玩家是否在距离之内。目前我对raycast了解不多,所以这是否是我下一步要学习如何让它正常工作的方法

谢谢你抽出时间。
Dean.

您可以通过以下操作计算距离:

float distance = Vector3.Distance(player.transform.position,transform.position);
如果不超过某个金额,您可以通过以下方式进行检查:

bool playerIsCloseEnough = distance <= amount; 
然后,你可以做一些事情,如果它们都是真的:

if (playerIsAlive && playerIsCloseEnough) 
{
    // ...
}

正如您在评论中提到的,您需要设置
nav.enabled=true
void Awake
void Start
中,确保导航网格已打开:)

您可以通过执行
float distance=Vector3.距离(player.transform.position,transform.position)计算距离
,使用
bool PLAYERISCLOSETOW=距离0,检查其是否不大于某个
金额
。然后,如果使用
if(playerIsAlive&&playeriscloseough){…}
,它们都是真的,那么您就可以做一些事情了。太棒了!谢谢你,工作正是我想要的。我还必须设置
nav.enabled=true在void唤醒中,它可以与导航网格一起工作,出于某种原因,它在启动时被禁用。我还将
enemyHealth.currentHealth>0&&
添加到
if(playerIsAlive&&playeriscloseough){…}
中,以阻止敌人死后移动。你帮了我大忙,鲁齐姆,我现在让敌人的移动正是我想要的:)
if (playerIsAlive && playerIsCloseEnough) 
{
    // ...
}