首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >敌方移动仅在使用导航网格的范围内跟随玩家

敌方移动仅在使用导航网格的范围内跟随玩家
EN

Stack Overflow用户
提问于 2019-07-06 05:17:22
回答 1查看 2.7K关注 0票数 2

我是C#的新手(大约一周后),所以我一直在关注很多教程。我现在正在尝试编辑一段代码(unity教程),只让敌人在玩家的特定范围(10英尺)内跟随玩家,但不幸的是,如果没有完全更改代码,我找不到解决方案。目前,只有在玩家还活着的时候,敌人才会跟随他(我也希望如此)。

我试着用谷歌搜索我想要的东西,但我不想把代码从what is it改得太多。我在c#是个新手,目前正在一点一点地学习,我发现的其他方法需要我大量修改代码。据我所知,下面代码的主要关注点是让敌人完全由导航网格代理控制,我可以保留同样的技术吗?

代码语言:javascript
复制
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还不是很了解,所以这是我下一步要学习让它以我想要的方式工作吗?

感谢您的宝贵时间。迪恩。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-06 10:08:17

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

代码语言:javascript
复制
float distance = Vector3.Distance(player.transform.position,transform.position);

您可以使用以下命令检查它是否不超过某个数量:

代码语言:javascript
复制
bool playerIsCloseEnough = distance <= amount; 

你可以用以下命令检查玩家是否还活着:

代码语言:javascript
复制
 bool playerIsAlive = playerHealth.currentHealth > 0;

然后,如果它们都是真的,你就可以用:

代码语言:javascript
复制
if (playerIsAlive && playerIsCloseEnough) 
{
    // ...
}

正如你在评论中提到的,你需要在void Awakevoid Start中设置nav.enabled=true;,以确保导航网格处于打开状态:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56909323

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档