2016-10-31 5 views
0

У меня возникла проблема в единстве3d, что я делаю, есть игровой объект, который является простым кубом, и он прикрепляется с помощью компонента, который называется Material, который имеет красный цвет. Также есть скрипт, прикрепленный к этому кубику , который выполняет событие при щелчке левой кнопкой мыши. I.e изменит цвет материала на зеленый. Сценарий работает отлично, но то, что я хочу в сцене, есть canvasgameobject, который по умолчанию неактивен. Picture Я хочу, чтобы активно этот объект игры, когда цвет материала зеленый или деактивируется, когда цвет красный. Я использую функцию, называемую 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; 

     } 

    } 


} 

ответ

0

GameObject.Find не работает, когда GameObject отключен. Из скриншота в вашем вопросе Canvas GameObject отключен.

Вот почему вы получаете: NullReferenceException: Object reference not set to an instance of an object

Создать публичную переменную для него и перетащить холст там.

[SerializeField] 
private bool check; 

public GameObject myCanvas; 

void OnMouseDown() 
{ 
    if (!check) 
    { 
     gameObject.GetComponent<Renderer>().material.color = Color.green; 
     myCanvas.SetActive(true); 
     check = true; 
    } 
    else if (check) 
    { 
     gameObject.GetComponent<Renderer>().material.color = Color.red; 
     check = false; 
    } 
} 
+0

ОК я понимаю! Могу ли я бездействовать только для детей-детей. – hamel123

+0

Вы можете бездействовать в любом игровом объекте, но GameObject.FindWithTag не будет работать с объектом, который скрыт, или Object, что родитель скрыт. Вам нужно получить ссылку на объект, когда он активен, или сделать это, как я сделал в своем ответе, перетащив ссылку в него. – Programmer

Смежные вопросы