首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我不能让敌人跟在玩家后面团结起来

我不能让敌人跟在玩家后面团结起来
EN

Stack Overflow用户
提问于 2018-11-21 03:46:20
回答 3查看 1.4K关注 0票数 0

敌人一开始向玩家走去,然后停下来不动。chasePlayer函数在每一帧都在运行,所以敌人应该在每一帧更新它的目的地,但这并没有发生,它在第一个实例中这样做,然后当它到达第一个目的地时停止,不再去播放器。我该如何解决这个问题呢?

代码语言:javascript
复制
public class Slime : MonoBehaviour, IEnemy {
    public Transform enemyTarget;
    public float maxHealth, power, toughness;
    public float currentHealth;

    private NavMeshAgent navAgent;
    private Player player;

    void Start() {
        navAgent = GetComponent<NavMeshAgent> ();
        currentHealth = maxHealth;
    }

    void Update() {
        ChasePlayer();
    }

//Makes enemy chases player
    void ChasePlayer() {
        this.player = player;
        navAgent.SetDestination(enemyTarget.position);
        Debug.Log ("Chasing player");
    }
}
EN

回答 3

Stack Overflow用户

发布于 2018-11-21 14:57:54

根据您的评论:

它在第一个实例中这样做,然后当它到达第一个目的地时停止,不再去玩家那里

在我看来,没有更新的是球员的位置。所以敌人只会在唤醒的时候检查玩家的位置,然后移动到那个位置,然后停止再检查。

尝试下面的方法,让我们知道它的进展。唯一的区别是不是在编辑器中链接播放器,而是通过唤醒中的代码进行链接。我自己也在使用它,它工作得很好。

代码语言:javascript
复制
using UnityEngine;
using System.Collections;

public class Slime: MonoBehaviour
{
    Transform player;        // Ref to the player's position.
    NavMeshAgent nav;        // Ref to the nav mesh agent.

    void Awake ()
    {
        // Set up the references.
        player = GameObject.FindGameObjectWithTag ("Player").transform;
        nav = GetComponent <NavMeshAgent> ();
    }


    void Update ()
    {
        //Here it would be nice to add a stop condition, like when the player is dead or when it is out of range
        ChasePlayer();

    } 

    void ChasePlayer() {
        nav.SetDestination (player.position);
        Debug.Log ("Chasing player");
    }
}

我使用了以下教程作为参考:

https://unity3d.com/learn/tutorials/projects/survival-shooter/enemy-one?playlist=17144

从问题中的评论中,我看到你最初是想设定一个可以触发敌人的行动范围。下面我给你一种可能的方法来计算两个GameObjects之间的距离,你可以在Update()中添加:

代码语言:javascript
复制
float dist = Vector3.Distance(player.position, transform.position)
if(dist < 10.0)
{
        ChasePlayer();
}

作为参考:https://docs.unity3d.com/ScriptReference/Vector3.Distance.html

票数 1
EN

Stack Overflow用户

发布于 2018-11-21 07:43:09

研究enemyTarget的后续变换。请参阅此处的文档:https://docs.unity3d.com/ScriptReference/Vector3.MoveTowards.html

请注意,您也可以使用Vector2对二维跟随使用相同的方法。

代码语言:javascript
复制
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
    // The target marker.
    public Transform target;

    // Speed in units per sec.
    public float speed;

    void Update()
    {
        // The step size is equal to speed times frame time.
        float step = speed * Time.deltaTime;

        // Move our position a step closer to the target.
        transform.position = Vector3.MoveTowards(transform.position, target.position, step);
    }
}
票数 0
EN

Stack Overflow用户

发布于 2018-11-22 02:44:35

我修复了这个问题。我有这个问题的原因是因为玩家的模型是玩家游戏对象的孩子,它不会移动,只有模型才会移动,我后来更改了它,所以整个玩家都会移动。

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

https://stackoverflow.com/questions/53400476

复制
相关文章

相似问题

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