Prefab からのセットアップ自動化みたいな想定で、 UdonBehaviour (U#) の中身をいじりたい。
そんなときのいじりかた。
といっても、基本は Unity で Component 変更するのと変わらない。
private static void AttachUSharpComponent(GameObject gameObject) { var behaviour = gameObject.AddComponent<UdonBehaviour>(); var so = new SerializedObject(behaviour); var us = ...; // アタッチしたい UdonSharp スクリプトの UdonSharpProgramAsset を何らかの方法で引っ張ってくる if (us.SerializedProgramAsset == null) us.CompileCsProgram(); so.FindProperty("programSource").objectReferenceValue = us; so.FindProperty("serializedProgramAsset").objectReferenceValue = us.SerializedProgramAsset; so.ApplyModifiedPropertiesWithoutUndo(); var component = behaviour.GetUdonSharpComponent<USharpComponent>(); component.SetValue(...); component.ApplyProxyModifications(); }
UdonSharp Component は GetUdonSharpComponent
で取れるので、そこから取得し、値を設定する。
設定した後は、 ApplyProxyModifications
を呼べば適用される。
ということでメモでした。