我是C#的新手(大约一周后),所以我一直在关注很多教程。我现在正在尝试编辑一段代码(unity教程),只让敌人在玩家的特定范围(10英尺)内跟随玩家,但不幸的是,如果没有完全更改代码,我找不到解决方案。目前,只有在玩家还活着的时候,敌人才会跟随他(我也希望如此)。
我试着用谷歌搜索我想要的东西,但我不想把代码从what is it改得太多。我在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;
}
}
}如果可能的话,我想添加2个If函数。一个是检查玩家是否还活着,另一个是检查玩家是否在距离内。目前我对raycast还不是很了解,所以这是我下一步要学习让它以我想要的方式工作吗?
感谢您的宝贵时间。迪恩。
发布于 2019-07-06 10:08:17
您可以通过执行以下操作来计算距离:
float distance = Vector3.Distance(player.transform.position,transform.position);您可以使用以下命令检查它是否不超过某个数量:
bool playerIsCloseEnough = distance <= amount; 你可以用以下命令检查玩家是否还活着:
bool playerIsAlive = playerHealth.currentHealth > 0;然后,如果它们都是真的,你就可以用:
if (playerIsAlive && playerIsCloseEnough)
{
// ...
}正如你在评论中提到的,你需要在void Awake或void Start中设置nav.enabled=true;,以确保导航网格处于打开状态:)
https://stackoverflow.com/questions/56909323
复制相似问题