注意:
本ページに記載されている情報は、Unity, UdonSharp初心者が試行錯誤中に「こうやったら動いた(と思う)」という内容です。
正確な情報はUdonSharpのGitHubページやUnityの公式ページを参照してください。
##調べ物をしたい
「UdonSharp やりたいこと」で出てこない場合、「unity c# やりたいこと」で結構出てきます。そのまま使えるものも多いです。
Consoleに「TypeLoadExeption」エラーが消えない
TypeLoadException: Could not resolve type with token XXXXXXXX (from typeref, class/assembly TMPro.HorizontalAlignmentOptions, Unity.TextMeshPro, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null)
か、似たようなエラー消えないときは、SDK3を再Importすると直った。
##ワールドのアップロードが遅いのを何とかしたい
VRChat SDK コントロールパネルのSettingsの「Future Proof Publish」のチェックを外すと、アップロードが早くなります。
#正式版のPublish時には付けたほうがいいかもしれません。
##同期をローカルでテストしたい
VRChat SDK コントロールパネルのBuilderの「Number of Clients」を2以上にすると、VRChatが複数立ち上がってテストできます。
##オブジェクトの位置をリセットしたい(リスポーンさせたい)
ワールドの初期設定では、Yの値が-100を超えるとリスポーンするので、オブジェクトの座標をY軸を-200とかに設定します。
例:
// リスポーンさせたいオブジェクトをUnity側で選択
public GameObject target;
// Interactしたときにリスポーンさせてみる
public override void Interact(){
Vector3 pos = target.transform.position;
pos.y = -200.0f;
target.transform.position = pos;
}
##オブジェクトの位置を同期させたい
以下の手順で同期できます。
・Add ComponentからUdon Behaviourを追加。
・Syncronize Positionをクリック。
#スクリプトを作成しなくていいかは要確認
##あるオブジェクトのスクリプトから別のオブジェクトを取得したい
Hierarchy上で自分の親はthis.GameObject.transparent.parent.GameObject
あるゲームオブジェクトの子供を名前で指定する場合はsomeGameObject.transparent.Find('nameOfChild')
##別のオブジェクトのスクリプトのメンバ関数にアクセスしたい
例えばhogeというクラス名のstring test()というメンバ関数にアクセスしたい場合
string test = hogeGameObject.GetComponent<hoge>().test()
##プレイヤーをあるオブジェクトにワープさせたい
TBD
##プレイヤーから見える距離を制限したい
TBD
##同期変数を使いたい
TBD
##オブジェクトの所有権を取得したい
##長いstringを同期させたい
[Udonsynced]なstringには長さ制限がある模様です。
さらに変数単位ではなく、オブジェクト(1クラスファイル)単位で合計のバイト数での制限のようです。(未検証)
回避策として、文字列を分割し、複数のオブジェクトに持たせれば何とかなる。ただしその分重くなります。
##同期変数の値をCanvas上のTextに反映させたい
TBD