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