为什么在Awake()和Start()中transform.parent为null?

时间:2015-08-23 06:10:58

标签: c# unity3d gameobject

我试图获取脚本附加到的GameObject的引用。每篇文档都使用transform.parent.gameObject,但transform.parentnullAwake()Start()。为了让这个工作,我需要做什么?这可能是一个完全没有问题的问题,但到目前为止谷歌还没有提出一个有效的答案。

using UnityEngine;
using System.Collections;

public class Test : MonoBehaviour
{
    private void Awake()
    {
        var obj = transform.parent;
        Debug.Log(obj);
    }

    private void Start()
    {
        var obj = transform.parent;
        Debug.Log(obj);
    }
}

2 个答案:

答案 0 :(得分:1)

没关系!我是个白痴!它不应该是父母,而是:

var obj = transform or var obj = transform.gameObject

因为这个脚本是它应该引用的游戏对象的一部分,而不是任何父类。我有一个奇怪的假设,即脚本是游戏对象的孩子。

答案 1 :(得分:0)

Transform.parent告诉您当前转换的父级是什么。 I.E.如果 GameObjectA GameObjectB 的子项,则访问 GameObjectB 中的transform.gameObject的脚本将返回 GameObjectA

实际上,您所寻找的只是 gameObject 。这会隐式返回脚本附加到的游戏对象。

在场景中创建两个GameObjects 调用一个 GameObjectA ,另一个 GameObjectB 将此脚本附加到 GameObjectB ,然后将 GameObjectB 拖到层次结构 GameObjectA

public class ExampleBehaviour : MonoBehaviour {

    void Awake () {
        Debug.Log(gameObject.name);        //Prints "GameObjectB" to the console
        Debug.Log(transform.parent.name);  //Prints "GameObjectA" to the console
    }

}