Boolean не возвращает значение true - PullRequest
0 голосов
/ 22 апреля 2020

В моей игре есть логическая переменная, которую я использую, чтобы контролировать, сколько раз NP C может перемещаться за каждый ход. Это тактическая RPG. NP C может двигаться только один раз за ход. Логическое значение называется canMoveNP C и инициализируется как true. Затем, когда NP C достигает своего места назначения, я устанавливаю его на false.

Однако, когда я передаю ход игроку-человеку, я хочу, чтобы эта переменная снова была true, потому что таким образом, NP C может снова двигаться, когда наступает его очередь. Но оно не возвращается к истине, оно остается ложным. Я не знаю, что я делаю неправильно.

Этот код я использую, чтобы переместить NP C и установить переменную в 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. Я использую код ниже, когда NP C проходит свой ход:

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;

             }
         }

Как я могу решить это?

1 Ответ

0 голосов
/ 23 апреля 2020

Я узнал, что происходит. Целевая позиция не обновлялась, поэтому эта переменная всегда была бы ложной.

Проблема решена.

...