VRC Udon 子オブジェクトの取得 をする話

Merlin is GOD (挨拶)

 

結論

VRChat の USharp (U#, UdonSharp)で、「GetComponentsInChildren<Transform>()」を使いたい時は、「GetChild」を使うしかない らしい。

例:parentObjectの子オブジェクトを全て削除

var cnt = parentObjects.transform.childCount;
for (int i = 0; i < cnt; i++)
{
Destroy(parentObjects.transform.GetChild(i).gameObject);
}

 

以上。

 

なぜこの記事を書こうと思ったか背景説明。

同じミスを3度程繰り返し、そのたびに自分のプロジェクトを検索してどう解決したかを探していたのだが、アホらしかったから。

 

以下は経緯。

Usharpで複数のオブジェクトを一度に取得しようとして、Unityに用意された「GetComponentsInChildren」を使用し「Transform」を取得対象にした。

docs.unity3d.com

ら、例外が出てUdonBehaviourが死んだ。どうやら「GetComponentsInChildren」が動かないらしい。(記載時点で2023/09/18)絶対ほかにも同じ話は出ていて、しかし簡単に解決策が出てこない。*1

一応旧Twitterの投稿があるはずだが、検索上位に出てこないなど使い勝手が悪い。という訳でメモ代わりの記事を書いた。ググって出てこい。

では。

*1:何か俺のやり方が悪いんだろうか。誰か教えてくれ。