Unity - 对孩子的光线投射不起作用

我想通过光线投射启用一些游戏对象。


我有一个主要对象,它包含一个带有对撞机的孩子。这个孩子包含一个文本,当孩子的碰撞器被光线投射击中时,我想启用它。我试过下面的代码,但没有用。如何使用光线投射访问孩子?


public class SeleccionarTesoro_LIST : MonoBehaviour {

    void Start()

    {

        GameObject[] hitObject = GameObject.FindGameObjectsWithTag("TESOROS");

    }


    public void SetHitObjectToActive(GameObject hitObject)

    {

        hitObject.transform.GetChild(0).GetChild(0).gameObject.SetActive (true);

        hitObject.transform.GetChild(0).GetChild(2).gameObject.SetActive (true);

    }


    void Update() {


        if (Input.GetMouseButtonDown (0)) 

        {

            RaycastHit hit;

            Ray ray = Camera.main.ScreenPointToRay (Input.mousePosition);


            if (Physics.Raycast (ray, out hit)) {

                SetHitObjectToActive (hit.collider.gameObject);

            } 

        }

    }


}


饮歌长啸
浏览 176回答 2
2回答

慕容708150

您正在试图让孩子hitObject喜欢这个hitObject.transform.GetChild(0),但如果在hitObject犯规有一个孩子,那么你的程序将抛出一个null exception,所以首先要检查,如果你想访问有哪些,然后访问它。例如:public void SetHitObjectToActive(GameObject hitObject){     if(hitObject.transform.childCount>0){           GameObjectchild = child hitObject.transform.GetChild(0);           if(GameObjectchild.childCount>0 ){             GameObjectchild.GetChild(0).gameObject.SetActive (true);}      }}但总的来说,我认为最好先检查一下你碰撞的物体是否是正确的物体,然后确保做你想做的为此,您可以使用tagsornames或layers,首先,如果您想使用标签,然后将标签分配给您要指定的对象,例如敌人 if (Physics.Raycast (ray, out hit)) {    if( hit.collider.gameObject.tag  == "enemy" )         {            SetHitObjectToActive (hit.collider.gameObject);        }  }
打开App,查看更多内容
随时随地看视频慕课网APP