Udon規定(全般)
- バーチャルマーケット2022 WinterではSDK3及びUdonを使用します。Udonは出来る事の幅が広い分、容易にインスタンスに致命的な不具合を発生させることが可能なため、入稿ルールに加えて下記の制限を課させていただきます。
- Udonによる処理負荷を軽減するため、ワールド内のUdonは運営が用意するUdonによって動作が制御されます。詳しい内容に関しては
D. ワールド内Udon制御規定
を参照してください。 - 規定に沿わないブースが入稿された場合、再提出を依頼、もしくは配置しない等の処置を行わせて頂きます。予めご了承下さい。
- この規定は入稿期間外、期間中に関わらず改訂される可能性があります。
A. 入稿規定
- Udonを作成する際は下記のUdonアセンブラのいずれかを使用してください。
- Udon Node Graph
- Udon Sharp
- Cyan Trigger
- Vket Trigger
- UdonSharpはVketToolsに同梱されたバージョンを使用してください。
- UdonSharpを使用する場合は出力元のスクリプトファイル(拡張子.cs)を入稿フォルダに含めてください。
- スクリプトファイルはVketToolsによって作成される
Assets/[出展者IDの番号名]/UdonScripts
フォルダに入れてください。
- スクリプトファイルはVketToolsによって作成される
- CyanTriggerは運営が指定するバージョンを使用してください。
- 指定バージョン CyanTrigger V0.3.3
- Udon新規作成時に自動生成されるSerializedUdonProgramAssetは必ず入稿フォルダに含めてください。
B. UdonBehaviour規定
- UdonBehaviourコンポーネントは1ブースあたり 10個までとします。
- 同期変数を使用する場合はSynchronization MethodをManualに設定してください。
- Allow Collision Ownership Transferは無効にしてください(コライダが含まれる場合)。
C. スクリプト規定
- 同期変数([UdonSynced]を付与した変数)は1ブースあたり 10個まで使用できます。
- 同期変数には下記の型のみ使用できます(配列型やstring型は使用できません)。
- bool, byte, sbyte, char, double, float, int, uint, long, ulong, short, ushort
- 同期変数の更新(RequestSerialization関数の実行)はInteractやCollisionなどプレイヤーのアクションによってのみ行われるようにしてください。Update等で、毎フレーム同期変数の更新が行われるような実装はしないでください。
- Continuous設定による同期変数の常時同期は使用できません。
- 同期変数には下記の型のみ使用できます(配列型やstring型は使用できません)。
- 下記の変数、関数、コールバックは使用できません
- 使用禁止変数
- RenderSettingsクラスの変数全て
- 使用禁止関数
- UdonSharpBehaviour.VRCInstantiate
- GameObject.Find
- Object.Destroy
- Object.DestroyImmediate
- VRCGraphics.DrawMeshInstanced
- VRCShader.SetGlobalFloat
- VRCShader.SetGlobalFloatArray
- VRCShader.SetGlobalVector
- VRCShader.SetGlobalVectorArray
- VRCShader.SetGlobalMatrix
- VRCShader.SetGlobalMatrixArray
- VRCShader.SetGlobalInteger
- VRCShader.SetGlobalTexture
- VRCShader.SetGlobalColor
- 使用禁止コールバック
- Start
- Update
- LateUpdate
- FixedUpdate
- PostLateUpdate
- OnTriggerStay
- OnCollisionStay
- OnAnimatorMove
- OnRenderObject
- OnWillRenderObject
- OnPlayerJoined
- OnPlayerLeft
- InputJump
- InputUse
- InputGrab
- InputDrop
- InputMoveHorizontal
- InputMoveVertical
- InputLookHorizontal
- InputLookVertical
- OnPlayerRespawn
- 使用禁止変数
- 会場への配置時にUdonSharpスクリプトの再コンパイルは実行されません。
そのため、#if UNITY_EDITOR
等の条件付きコンパイルコードは使用できません。
D. ワールド内Udon制御規定
- 入稿されたUdonは運営が用意するUdon(以下、VketUdonManager)によって一部動作が制御されます。
- ブースの原点からX方向に±3m、Z方向に±4m、Y方向に6m(幅6m×奥行8m×高さ6m)をそのブースのUdon更新範囲とし、それを基準にVketUdonManagerから出展者のUdonにコールバックを送信します。(表を参照)コールバックはUdonBehaviour.SendCustomEventによって送信されます。Udon更新範囲はワールドによって変更になる可能性があります。
- VketUdonManagerからのコールバックはUdonに下記表の名前のCustomEvent(関数)を実装することで受け取ることが出来ます。
- UdonSharpの場合は、関数のアクセス修飾子をpublicに、引数・返り値を無しに設定してください。
CustomEvent(関数) | 呼び出しタイミング |
---|---|
_VketStart | ローカルプレイヤーがワールドにJoinしたときから1秒後(ブース配置によって数フレーム前後あり) |
_VketUpdate | Update更新時(ローカルプレイヤーがUdon更新範囲内にいる際) |
_VketFixedUpdate | FixedUpdate更新時(ローカルプレイヤーがUdon更新範囲内にいる際) |
_VketLateUpdate | LateUpdate更新時(ローカルプレイヤーがUdon更新範囲内にいる際) |
_VketPostLateUpdate | PostLateUpdate更新時(ローカルプレイヤーがUdon更新範囲内にいる際) |
_VketOnBoothEnter | ローカルプレイヤーがUdon更新範囲に入ったとき |
_VketOnBoothExit | ローカルプレイヤーがUdon更新範囲から出たとき |
- Quest会場ではUdonに
Vket_IsQuest
という名前のbool型の変数を定義することで、プレイヤーがQuestスタンドアロンかどうかを取得できます。- 変数はPublicにしてください。(CyanTrigger以外)
- プレイヤーがQuestスタンドアロンの場合、Start時に変数にTrueが代入されます。
E. ギミック制限規定
- 来場者体験、または他出展者への影響を鑑みて下記挙動を取るギミックを制限します。
- オブジェクトをスペース外に移動させる行為は禁止です。
- プレイヤーに追従する機構はスペース外のプレイヤーには追従しないようスクリプトを組んでください。
- VRC Pickupコンポーネントによって、プレイヤーがオブジェクトをPickupすることでスペース外に出る場合はこれに当たりません(Pickupにオブジェクトを追従させるのは不可)。
- プレイヤーの設定(WalkSpeed等)の変更はプレイヤーがスペース内にいる場合のみ許可されます。
- プレイヤーのテレポートは、プレイヤーがスペース内にいる状態で、かつスペース内に移動させる場合のみ許可されます。
- プレイヤーのVelocityを変更する場合、スペース外に出た時点で正常な値に戻るようにしてください。
D. ワールド内Udon制御規定
におけるUdon更新範囲外で、常に処理が発生し続けるようなUdonを構成することは禁止です。- 自ブース内以外(他出展者ブース、ワールド)のオブジェクトに干渉するあらゆる行為は禁止です。