Блоки, появляющиеся при щелчке мыши, не регистрируют максимальное количество блоков - PullRequest
1 голос
/ 15 мая 2019

Я делаю 2D-игру, вам нужно разместить блоки в игре. У меня работает размещение блоков, однако, предполагается разместить только определенное количество блоков. Я установил значение blockMax, но оно не отвечает на него.

 public class SpawnBlock : MonoBehaviour
{
    public GameObject block;
    public int blockMax;
    private int blockNum;

    void Update()
    {


        if (Input.GetMouseButtonDown(0))
        {
            if (blockNum < blockMax)
            {

                Vector3 spawnPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
                spawnPos.z = 0f;

                GameObject objectSpawn = Instantiate(block, spawnPos, Quaternion.Euler(new Vector3(0, 0, 0)));

                blockNum++;

                Debug.Log("Number of Blocks = " + blockNum);
            }

            else if (blockNum >= blockMax)
            {
                Debug.Log("Reached Block Max");
            }
        }

    }
}

Я попытался изменить порядок операторов if, но это всегда дает один и тот же результат. В окне GameObject кажется, что он умножает количество блоков, появляющихся при каждом нажатии. Кроме того, в журнале консоли он сбрасывает количество зарегистрированных блоков и выводит количество блоков, которые он порождал за это время.

Это журнал консоли, когда макс был установлен на 3, и я нажал 4 раза.

Number of Blocks = 1
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Number of Blocks = 2
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Number of Blocks = 1
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Reached Block Max
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:34)
Number of Blocks = 2
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Number of Blocks = 2
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Number of Blocks = 1
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Reached Block Max
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:34)
Reached Block Max
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:34)
Reached Block Max
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:34)
Number of Blocks = 2
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Number of Blocks = 2
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Number of Blocks = 2
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)
Number of Blocks = 1
UnityEngine.Debug:Log(Object)
SpawnBlock:Update() (at Assets/Scripts/SpawnBlock.cs:29)

1 Ответ

0 голосов
/ 15 мая 2019

Кажется, что у вас есть SpawnBlock компонент, прикрепленный к block объекту, который вы порождаете.Каждый раз, когда вы порождаете другой блок, вы получаете еще один SpawnBlock, который ищет щелчки мыши и отслеживает собственную переменную blockNum, чтобы вызывать блоки.

Решением будет удаление компонента SpawnBlock изобъект block и прикрепление его к объекту никогда не бывает больше одного.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...