C# Unity-Raycast on child不';行不通
我想启用一些带有光线投射的游戏对象 我有一个主要的物体,它把一个孩子和一个对撞机结合在一起。该子对象包含一个文本,我希望在子对象的碰撞器被光线投射击中时启用该文本。我试过下面的代码,但不起作用。如何使用光线投射访问孩子C# Unity-Raycast on child不';行不通,c#,unity3d,C#,Unity3d,我想启用一些带有光线投射的游戏对象 我有一个主要的物体,它把一个孩子和一个对撞机结合在一起。该子对象包含一个文本,我希望在子对象的碰撞器被光线投射击中时启用该文本。我试过下面的代码,但不起作用。如何使用光线投射访问孩子 public class SeleccionarTesoro_LIST : MonoBehaviour { void Start() { GameObject[] hitObject = GameObject.FindGameObjectsWith
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);
}
}
}
}
根据你的评论,我认为你试图以错误的方式接近孩子 首先调用每个游戏对象的名称。例如:
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);}
}
}
- 主要游戏对象
- 儿童胶囊
- 儿童文本
public void SetHitObjectToActive(GameObject hitObject)
{
hitObject.transform.Find("ChildCapsule").gameObject.transform.Find("ChildText").gameObject.SetActive (true);
}
您正试图像这样获取
hitObject
的子对象hitObject.transform.GetChild(0)
,但是如果hitObject
没有子对象,那么您的程序将抛出一个null异常
,因此首先必须检查您要访问的对象是否存在,然后再访问它。
例如:
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);}
}
}
但总的来说,我认为最好先检查你碰撞的物体是否是正确的物体,然后确定你想做什么
为此,您可以使用标记
或名称
或层
,
首先,如果要使用标记,请将标记指定给要指定的对象,例如:
if (Physics.Raycast (ray, out hit)) {
if( hit.collider.gameObject.tag == "enemy" )
{
SetHitObjectToActive (hit.collider.gameObject);
}
}
如果我理解正确,请告诉我。您有一个带有子gameObject的gameObject。父游戏对象被禁用,并且您希望当光线投射击中子游戏时,父游戏对象被启用?如果我是对的,则问题可能是,如果父游戏对象未处于活动状态,您可能也无法检测到子游戏对象。@IgnacioLorre否,我有一个包含子游戏对象的父游戏对象。父对象启用了一个球体碰撞器,我可以使用lo增益点,而子对象启用了一个更大的胶囊碰撞器,可以用手指通过光线投射来触摸它以显示文本消息。上面的脚本放置在camera.Ok中。那么您想要的是,当孩子接触到光线投射时,您想要启用文本消息吗?或者你想启用什么?是的,当我接触到光线投射时,我想启用SetHitObjects以激活它。我是在父游戏对象而不是子游戏对象中访问文本消息的。我已经把它们按正确的顺序放好了,现在它可以正常工作了。谢谢你,伊格纳西奥!!!!嗨,伊格纳西奥!我发布了一个新问题。这是您可以帮助我的链接:。非常感谢@Angelsm我稍后再查