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

Why is transform.parent null in Awake() and Start()?

我正在尝试获取对脚本所附加的 GameObject 的引用。根据文档 transform.parent.gameObject 用于此,但 transform.parentAwake()Start() 中都是 null。我需要做什么才能使它正常工作?这可能是一个完全菜鸟的问题,但 Google 到目前为止还没有给出有效的答案。

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);
    }
}

没关系!我是个白痴!它不应该是父对象但是:

var obj = transform or var obj = transform.gameObject

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

Transform.parent 告诉您当前变换的父项是什么。 IE。如果 GameObjectAGameObjectB 的子对象,则访问 GameObjectB 中的 transform.gameObject 的脚本将return GameObjectA

你要找的,其实就是gameObject。这隐含地 return 是您的脚本附加到的游戏对象。

在场景中创建两个游戏对象。
调用一个 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
    }

}