【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);
}
では、今日はここまでです、読んでくれてありがとう!! !
いいねとフォロー!! !