Unity,MoveTowards工作很奇怪

时间:2018-12-03 18:03:27

标签: c# unity3d vector position move

好的,我有带有“敌人”标签的gameObjects,我这样收集它们:

 enemies = GameObject.FindGameObjectsWithTag("Enemy"); 

在那之后,我尝试移动第一个“敌人”:

     int newPositionX;
     int newPositionY;
     bool targetReached = false;
     int moveSpeed = 1;
     void Update()
     {
     if (!targetReached)
         {
             newPositionX = Mathf.FloorToInt(enemies[0].transform.position.x)-1;
             newPositionY = Mathf.FloorToInt(enemies[0].transform.position.y);
             enemies[0].transform.position = Vector3.MoveTowards(enemies[0].transform.position,
                 new Vector3(newPositionX, newPositionY), moveSpeed * Time.deltaTime);
             targetReached = true;
             }
             if (Vector3.Distance(enemies[0].transform.position, new Vector3(
                 newPositionX, newPositionY)) < 0.1f)
             {
                 targetReached = false;
             }
         }

但是“敌人”没有采取任何行动。如果删除以下内容,则可以对其进行编辑:

 targetReached = true;

“敌人”正在移动,但我无法阻止它。那使我认为,要在Move中永久调用MoveTowards函数是什么?

2 个答案:

答案 0 :(得分:0)

MoveTowards返回一个向量,该向量将游戏对象朝目标方向移动一步。

此外,我不确定,但是在您的代码中,将targetReached设置为false的if语句仅在targetReached已经为false时运行,因此您可能希望将其排除在if(!targetReached )声明

答案 1 :(得分:0)

您可能会想到Unity是一个完整的游戏引擎。

不是。

补间和移动之类的最基本的东西并没有像地球上其他游戏引擎所提供的那样提供。

因此,您需要下载并设置插件和附加组件以获得基本功能。

搜索Unity的补间引擎,并阅读有关它们的内容,因为当您下次遇到缺少的Unity基础知识时,需要了解它们以及它们如何将其自身合并到Unity中。