代码之家  ›  专栏  ›  技术社区  ›  BadmintonCat

为什么是转型。Awake()和Start()中的父项为空?

  •  2
  • BadmintonCat  · 技术社区  · 11 年前

    我正在尝试获取脚本附加到的GameObject的引用 transform.parent.gameObject 用于此,但 transform.parent null 在两者中 Awake() 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 回复  |  直到 11 年前
        1
  •  1
  •   BadmintonCat    11 年前

    没有关系!我是个白痴!它不应该是父项,但是:

    var obj = transform or var obj = transform.gameObject
    

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

        2
  •  0
  •   Venkat at Axiom Studios    11 年前

    Transform.parent 告诉您当前转换的父级是什么。例如,如果 游戏对象A 是的孩子 游戏对象B ,访问转换的脚本。中的gameObject 游戏对象B 将返回 游戏对象A

    事实上,你想要的只是 game对象 。这将隐式返回脚本附加到的gameObject。

    在场景中创建两个GameObjects。
    呼叫一个 游戏对象A ,另一个 游戏对象B .
    将此脚本附加到 游戏对象B 然后拖动 游戏对象B 在…之下 游戏对象A 在层次结构中

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