为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

C#
饮歌长啸 2021-07-02 10:01:24
我想通过光线投射启用一些游戏对象。我有一个主要对象,它包含一个带有对撞机的孩子。这个孩子包含一个文本,当孩子的碰撞器被光线投射击中时,我想启用它。我试过下面的代码,但没有用。如何使用光线投射访问孩子?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);            }         }    }}
查看完整描述

2 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

您正在试图让孩子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);

        } 

 }


查看完整回答
反对 回复 2021-07-10
  • 2 回答
  • 0 关注
  • 175 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信