【Unityはじめよう】17.親子ノードへのスクリプトアクセス

【Unity入門】親子ノードへのスクリプトアクセス

    皆さんこんにちはランパードです~~

    Unity Getting Started シリーズのブログへようこそ.私が学んだ知識は Station B の Afa 先生からのものです~Thanks 

(1) 親ノード

(1) 親ノードにアクセスする

    親子関係はよく知っていますが、cocosでは親ノードの取得に node:getParent() 、子ノードの取得に node:getChild() を使うことが多いのですが、unityではどのように呼んでいるのでしょうか?

    Unityでは不思議なことに、transformコンポーネントにその親子関係が記録されているので(これもtransformが削除できない理由なのかも?)、以下のコードで親ノードを取得できます。

Transform parentTransform = this.transform.parent;

Transform で取得した親も Transform タイプのコンポーネントである    ことに注意してください.親ノードのオブジェクトにアクセスしたい場合は、もう 1 つの手順を追加する必要があります。

Transform parentTransform = this.transform.parent;
GameObject parent = parentTransform.gameObject;

(2) 親ノードの修正

    親ノードにアクセスし、tranform.SetParent を介してオブジェクトの親子関係を変更できます. たとえば、現在の親子関係は次のとおりです:

    BBB オブジェクトにマウントする新しい ParentLogic スクリプトを作成します。

    最初に開始時に親クラスの名前を出力し、次に更新時にマウス クリック アクションを監視し、クリック時に BBB ノードの親クラスを CCC に切り替えます。コードは次のとおりです。

    void Start()
    {
        Transform parentTransform = this.transform.parent;
        GameObject parent = parentTransform.gameObject;
        Debug.Log("父类的名称是:" + parent.name);
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetMouseButtonDown(0))
        {
            GameObject newParent = GameObject.Find("CCC");
            this.transform.SetParent(newParent.transform);
        }
    }

    親クラスの名前が最初は AAA で、クリックすると親クラスが CCC になっていることがわかります。

(2) 子ノード

(1) foreach のすべての子ノードをトラバースする

    If we want to traverse all child nodes, we can do it through the foreach method . その構文は次のとおりです。

foreach(Transform child in transform)
{
    // DO SOMETHING
}

    その中で、子は変換コンポーネントの下のすべての子変換コンポーネントであるため、そのようなコードを介してすべての子ノードの名前にアクセスできます

foreach(Transform child in transform)
{
    GameObject childObj = child.gameObject;
    Debug.Log("子物体名称为:" + childObj.name)
}

    たとえば、AAA ノードの下に BBB、CCC、DDD、およびサブノードがあり、DDD サブノードには EEE の孫ノードがあり、印刷効果がどのようになるかを見てみましょう。

     コードは以下のように表示されます:

    void Start()
    {
        GameObject AAA = GameObject.Find("AAA");
        foreach (Transform child in AAA.transform)
        {
            GameObject childObj = child.gameObject;
            Debug.Log("子物体名称为:" + childObj.name);
        }
    }

出力された     結果は 3 つの子ノードすべてを出力することがわかりますが、孫ノード EEE は出力されません。そのため、子ノードの 1 つを取得したい場合は、foreach 判定時に If name == XXX を追加できます。

(2) 特定の子ノードを直接かつ正確に見つける

    以前は、GameObject.Find を使用してオブジェクトを検索することはお勧めしませんでした. 一方で、名前を複製するのは簡単であり、他方では、より高価です. 特定の子ノードを正確に検索したい場合ノード、それを見つけるために foreach だけを使用できますか?

   Unity's transform component provides us with a Find method , which, like the GameObject's FInd, need to pass in the name or path of the object. 利点は、子ノード間を正確に検索するため、損失と精度の両方が重要になることです。より強く

    void Start()
    {
        GameObject AAA = GameObject.Find("AAA");
        Transform BBB =  AAA.transform.Find("BBB");
        Debug.Log(BBB.gameObject.name);
    }

では、今日はここまでです、読んでくれてありがとう!! !
いいねとフォロー!! !

おすすめ

転載: blog.csdn.net/cooclc/article/details/130307994