我是C#的新手(大约1个星期),因此我一直在关注很多教程。我目前正在尝试编辑一段代码(统一教程),以仅在玩家的一定范围(10英尺)内让敌人跟随玩家,但不幸的是,如果没有完全更改代码,我找不到解决方案。此刻,敌人只有在玩家还活着的时候才会跟随玩家(我也想要)。
我尝试使用谷歌搜索我想要的内容,但是我不想从太多内容中更改代码。我是C#的新手,目前正在一点点学习,我发现的其他方法要求我大量更改代码。据我了解,以下代码的主要重点是使敌人完全受Nav Mesh Agent的控制,对我来说,是否可以保持相同的技术?
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;
}
}
}
如果可能,我想添加2个if函数。 1个是检查播放器是否还活着,另一个是检查播放器是否在距离内。我目前对raycast的了解不多,所以这将是我下一步学习如何按照我的意愿进行工作的方法吗?
谢谢您的宝贵时间。 院长。
答案 0 :(得分:0)
您可以通过以下方式计算距离:
float distance = Vector3.Distance(player.transform.position,transform.position);
您可以使用以下方法检查它是否不超过一定数量:
bool playerIsCloseEnough = distance <= amount;
您可以使用以下方法检查播放器是否还活着:
bool playerIsAlive = playerHealth.currentHealth > 0;
然后,如果它们都是正确的,则可以执行以下操作:
if (playerIsAlive && playerIsCloseEnough)
{
// ...
}
正如您在评论中提到的那样,您需要在nav.enabled=true;
或void Awake
中设置void Start
,以确保打开导航网格:)