unity3d 从父对象中随机选择子对象并将其设置为活动

swvgeqrz  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(150)

我在Unity中创建一个游戏,遇到了一些问题。我在父对象中有3个不同的子对象,我想随机设置这3个子对象中的一个作为活动对象,同时禁用其他两个。我想在与另一个对象碰撞时发生这种情况。
先谢了。

s8vozzvw

s8vozzvw1#

public GameObject parentOfChild;

void OnTriggerEnter(Collider thing)
{

 if("the collision condition")
 {
    int randomChild = Random.Range(0,2);
    if(randomChild == 0)
    {
      parentOfChild.transform.GetChild(0).gameObject.SetActive(true);

      parentOfChild.transform.GetChild(1).gameObject.SetActive(false);

      parentOfChild.transform.GetChild(2).gameObject.SetActive(false);
    }
    else
    if(randomChild == 1)
    {
      parentOfChild.transform.GetChild(0).gameObject.SetActive(false);

      parentOfChild.transform.GetChild(1).gameObject.SetActive(true);

      parentOfChild.transform.GetChild(2).gameObject.SetActive(false);
    }
    else
    if(randomChild == 2)
    {
      parentOfChild.transform.GetChild(0).gameObject.SetActive(false);

      parentOfChild.transform.GetChild(1).gameObject.SetActive(false);

      parentOfChild.transform.GetChild(2).gameObject.SetActive(true);
    }

 }

}

这是考虑到所有三个子元素在碰撞之前都不可见。如果所有三个子元素都可见,它也会起作用。
在parentOfChild对象中传递具有3个子对象的gameobject

uttx8gqw

uttx8gqw2#

我建议你改做这个

public GameObject parentOfChild;

void OnTriggerEnter(Collider thing)
{
    int randomChild = Random.Range(0,2);

    parentOfChild.transform.GetChild(0).gameObject.SetActive(false);
    parentOfChild.transform.GetChild(1).gameObject.SetActive(false);
    parentOfChild.transform.GetChild(2).gameObject.SetActive(false);

    parentOfChild.transform.GetChild(randomChild).gameObject.SetActive(true);
}

相关问题