【问题标题】:Boolean does not set back to true布尔值不设置回真
【发布时间】:2020-04-22 14:51:19
【问题描述】:

我的游戏中有一个布尔变量,用于控制 NPC 每回合可以移动多少次。这是一款战术角色扮演游戏。 NPC每回合只能移动一次。布尔值被称为 canMoveNPC 并且它被初始化为真。然后,当 NPC 到达目的地时,我将其设置为 false。

但是,当我将回合传递给人类玩家时,我希望这个变量再次为真,因为这样,当轮到 NPC 时,他能够再次移动。但它并没有恢复为真,它保持为假。我不知道我做错了什么。

我用这段代码来移动 NPC 并将变量设置为 false:

ublic void Move()
     {
         for (int i = 0; i < mov.NPCS.Length; i++)
         {
             if (!Physics.Raycast(Sherrif.transform.position, Sherrif.Left_Right, out Sherrif.hitRight) || Sherrif.hitLeft.transform.tag != "Human")
             {
                 if (mov.gameManager.NPCTurn && canMoveNPC )
                 {
                     mov.NPCPlayer = mov.NPCS[2];
                     mov.NPCS[2].GetComponent<NPC>().isNPC = true;
                     IsMoving = true;

                     this.transform.position = Vector3.MoveTowards(this.transform.position, targetPosition, velocity * Time.deltaTime);
                 }

                 if(this.transform.position == targetPosition)
                 {
                     mov.NPCS[2].GetComponent<NPC>().isNPC = false;
                     IsMoving = false;
                     canMoveNPC = false;
                 }
             }
         }
     }

在这里,我有一个游戏管理器,用于控制回合并将变量再次设置为 true。当 NPC 轮到他时,我使用下面的代码:

else if (mov.gameManager.playerTurn == 2)
         {
             mov.gameManager.playerTurn = 1;
             mov.gameManager.NPCTurn = false;
             mov.gameManager.HumanTurn = true;
             mov.TurnEnd();
             mov.interfaceManager.ChangeTurn();

             for (int i = 0; i < mov.NPCS.Length; i++)
             {
                 mov.NPCS[i].GetComponent<NPC>().canMoveNPC = true;

             }
         }

我该如何解决?

【问题讨论】:

  • 这可能会有所帮助。 MoveTowards 不会超出其目标,因此您需要检查“近似等效”。请参阅 Unity 文档中的 Update 方法,了解他们是如何做到的。文档描述也可能有所帮助。 docs.unity3d.com/ScriptReference/Vector3.MoveTowards.html
  • 但是当我打印 NPC 位置和目标位置时,它们是相同的。目标位置是一个向量3,我用它来将 NPC 移动到他面前的瓷砖上。
  • 基本上看起来还可以。我会使用调试器并首先在设置所有标志的循环之后设置一个断点,然后将断点放在标志设置为假的点上。也许由于某种原因,您的 NPC 代码会立即假定轮到它,并再次将其设置为 false。您还可以更进一步并使用观察点来查看该变量何时返回为假。 docs.microsoft.com/en-us/visualstudio/debugger/…
  • 我已经尝试过使用断点,但我不知道它是如何工作的。我认为当我再次设置为 NPC 转弯时会发生错误。
  • 我怀疑它会在人类玩家轮到 NPC 回合时发生变化

标签: unity3d boolean


【解决方案1】:

我发现发生了什么。目标位置未更新,因此该变量始终为假。

问题解决了。

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2016-10-13
    • 2022-10-13
    • 2019-04-29
    • 2014-12-05
    • 2022-10-05
    • 1970-01-01
    • 2017-05-09
    • 2019-04-10
    相关资源
    最近更新 更多