Как мне убедиться, что все мои блоки не будут уничтожены, когда я нажму, чтобы уничтожить один из них?

#c# #unity3d

Вопрос:

Я создаю игру, в которой вам нужно нажимать на блоки, чтобы уничтожить их, чтобы безопасно переместить игрока с вершины башни на дно (башня сделана из блоков). У меня есть скрипт, который уничтожает нажатый блок, который работает с несколькими блоками, но когда я нажимаю несколько блоков или все блоки уничтожаются, и я не знаю, почему.

Вот мой сценарий:

 using System.Collections.Generic;
using UnityEngine;

public class DestroyObjectOnClick : MonoBehaviour
{
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            Vector3 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
            Vector2 mousePos2D = new Vector2(mousePos.x, mousePos.y);
            RaycastHit2D hit = Physics2D.Raycast(mousePos2D, Vector2.zero);
            if (hit.collider != null)
            {
               gameObject.SetActive(false);
            }
    }
}
}
 

Вот моя иерархия (на всякий случай, если это необходимо)

Спасибо

Ответ №1:

Потому что в вашем коде нет указаний на то, что вам нужно уничтожить именно тот объект, на который был нажат мышью. Если этот код используется на нескольких объектах, то, согласно логике кода, если вы нажмете куда-нибудь при щелчке мыши, каждый объект, на котором используется этот код, будет уничтожен.

используйте hit.collider.gameObject.SetActive(false); вместо gameObject.SetActive(false);

Это решит вашу проблему. И достаточно назначить его любому одному неразрушимому объекту на сцене, а не каждому разрушаемому блоку. Чтобы не уничтожить лишнее — введите дополнительную галочку в поле «если».

Комментарии:

1. Да, это сработало! Большое вам спасибо за помощь.