У меня возникла проблема в единстве3d, что я делаю, есть игровой объект, который является простым кубом, и он прикрепляется с помощью компонента, который называется Material
, который имеет красный цвет. Также есть скрипт, прикрепленный к этому кубику , который выполняет событие при щелчке левой кнопкой мыши. I.e изменит цвет материала на зеленый. Сценарий работает отлично, но то, что я хочу в сцене, есть canvas
gameobject
, который по умолчанию неактивен. Я хочу, чтобы активно этот объект игры, когда цвет материала зеленый или деактивируется, когда цвет красный. Я использую функцию, называемую GameObject.Find("Canvas")
, но ошибка наступает. Также я пытаюсь решить эту проблему, используя теги с этим холстом, вызывая эту функцию GameObject.FindWithTag("Canvas")
, но ничего не работает. Произойдет такая же ошибка.Gameobject неактивен нажатием мыши
NullReferenceException: Object reference not set to an instance of an object
Код:
public class Cube : MonoBehaviour {
[SerializeField] private bool check;
void OnMouseDown() {
if (!check) {
gameObject.GetComponent<Renderer>().material.color = Color.green;
GameObject.Find("Canvas").SetActive(true);
check = true;
} else if (check) {
gameObject.GetComponent<Renderer>().material.color = Color.red;
check = false;
}
}
}
ОК я понимаю! Могу ли я бездействовать только для детей-детей. – hamel123
Вы можете бездействовать в любом игровом объекте, но GameObject.FindWithTag не будет работать с объектом, который скрыт, или Object, что родитель скрыт. Вам нужно получить ссылку на объект, когда он активен, или сделать это, как я сделал в своем ответе, перетащив ссылку в него. – Programmer