我是团结的新手,我一直在研究菜单系统。但是要做到这一点,我想从父对象访问孩子的方法。
我的父对象。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems; // 1
public class buttonAnimation : MonoBehaviour
, IPointerEnterHandler
, IPointerExitHandler
{
private bool mouseOver = false;
private Vector3 startPos;
private Vector3 offsetPos;
private int offset = -20;//Change this to set the offset Amount.
// private script mousePresent;
void Start(){
startPos = transform.position;
offsetPos = startPos;
offsetPos.x = offsetPos.x + offset;
//script = gameObject.tranform.GetChild(0).GetComponent<mousePresent>();
}
void Update(){
bool s = transform.GetChild(0).GetComponent<mousePresent>().mouseHere; //This line is the error causing one
Debug.Log(s);
if(s == false){
mouseOver = false;
}
//if(script.getMousePresent() == false){
// mouseOver = false;
// }
}
}
子对象脚本
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems; // 1
public class mousePresent : MonoBehaviour
{
public bool mouseHere = false;
void Start()
{
}
public bool getMousePresent(){
return mouseHere;
}
}
我一直在尝试访问子对象中的mouseHere变量。我已经尝试使用get方法将其作为一个公共变量和一个私有变量。但是在两个事件中都发生相同的错误。
当我尝试统一运行时。
NullReferenceException:对象引用未设置为对象的实例 buttonAnimation.Update()(在Assets / Main Menu / Script / buttonAnimation.cs:25)
答案 0 :(得分:1)
返回GameObject或其任何类型中Type类型的组件 儿童使用深度优先搜索。 只有在活动的GameObject上找到组件后,才会返回该组件。
例如:
void Start(){
//... your code
script = gameObject.GetComponentInChildren<mousePresent>();
}
注意:另外,请确保您的子对象为活动!