您如何从Unity中的Parent对象访问子脚本的方法

时间:2019-11-26 17:36:51

标签: c# unity3d

我是团结的新手,我一直在研究菜单系统。但是要做到这一点,我想从父对象访问孩子的方法。

我的父对象。

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)

1 个答案:

答案 0 :(得分:1)

您可以改用GetComponentInChildren

  

返回GameObject或其任何类型中Type类型的组件   儿童使用深度优先搜索。   只有在活动的GameObject上找到组件后,才会返回该组件。

例如:

void Start(){
    //... your code
    script = gameObject.GetComponentInChildren<mousePresent>();
}

注意:另外,请确保您的子对象为活动