Udon規定

  • VirtualMarket6ではSDK3及びUdonを使用します。Udonは出来る事の幅が広い分、容易にインスタンスに致命的な不具合を発生させることが可能なため、入稿ルールに加えて下記の制限を課させていただきます。
  • Udonによる処理負荷を軽減するため、ワールド内のUdonは運営が用意するUdonによって動作が制御されます。詳しい内容に関しては D. ワールド内Udon制御規定 を参照してください。
  • 規定に沿わないブースが入稿された場合、再提出を依頼、もしくは配置しない等の処置を行わせて頂きます。予めご了承下さい。
  • この規定は入稿期間外、期間中に関わらず改訂される可能性があります。

A. 入稿規定

  • Udonを作成する際はUdonSharpを使用してください。
  • UdonNodeGraph及びその他のUdonアセンブリによって作成されたUdonは使用できません(運営が配布するprefabsを除く)。
  • 使用するUdonSharpは入稿時の最新版を使用してください。最新版のUdonSharpはVketToolsからインポートすることも出来ます。
  • 出力元のスクリプトファイル(拡張子.cs)を入稿フォルダに含めてください。
    • スクリプトファイルはVketToolsによって作成されるAssets/[出展者IDの番号名]/UdonScriptsフォルダに入れてください。
    • Udonプログラムアセット(拡張子.asset)は、入稿フォルダ内の上記フォルダ以外の場所に入れてください。
  • 運営より、コードを書かずにオブジェクトのActiveの切替やAnimatorの操作等を行えるprefabを準備予定であり、そちらを使用することもできます。

B. UdonBehaviour規定

  • UdonBehaviourコンポーネントは1ブースあたり 10個までとします。
  • 同期変数を使用する場合はSynchronization MethodをManualに設定してください。
  • Allow Collision Ownership Transferは無効にしてください(コライダが含まれる場合)。
  • 運営が配布するprefabs以外でUdonBehaviourコンポーネントを使用する際は、同オブジェクトに運営が配布するコンポーネント(以下、VketUdonControlコンポーネント)をアタッチしてください。

C. スクリプト規定

  • 同期変数([UdonSynced]を付与した変数)は1ブースあたり 10個まで使用できます。
    • 同期変数には下記の型のみ使用できます(配列型やstring型は使用できません)。
      • bool, byte, sbyte, char, double, float, int, uint, long, ulong, short, ushort
    • 同期変数の更新(RequestSerialization関数の実行)はInteractやCollisionなどプレイヤーのアクションによってのみ行われるようにしてください。Update等で、毎フレーム同期変数の更新が行われるような実装はしないでください。
    • Continuous設定による常時同期は使用できません。
  • 全てのクラスは下記namespaceに所属させてください。
    • Vket6.Circle[出展者ID]
    • [出展者ID]は数字で置き換えてください 例: Vket6.Circle9999
    • [出展者ID]の後ろにnamespaceを追加することは許可されています。 例: Vket6.Circle9999.Example
  • 下記の変数、関数、コールバックは使用できません
    • 使用禁止変数
      • Transform transform.root
      • RenderSettingsクラスの変数全て
    • 使用禁止関数
      • UdonSharpBehaviour.VRCInstantiate
      • GameObject.Find
      • Object.Destroy
      • Object.DestroyImmediate
    • 使用禁止コールバック
      • Update
      • LateUpdate
      • FixedUpdate
      • OnPlayerJoined
      • OnPlayerLeft
      • InputJump
      • InputUse
      • InputGrab
      • InputDrop
      • InputMoveHorizontal
      • InputMoveVertical
      • InputLookHorizontal
      • InputLookVertical
      • OnPlayerRespawn
  • 下記の#defineディレクティブは使用できません。
    • #if UNITY_EDITOR
  • Physics.RayCastを始めとする、PhysicsクラスのCast関数を使用する際は下記の制限に従ってください。
    • layerMaskを設定し、レイヤー23以外のコライダを無視するようにする。
    • maxDistanceは最長で4メートルまで。
    • 以下をメンバーとしてクラスに定義し、それをCast関数に用いてください。
      • private const float CAST_MAX_DISTANCE = 4.0f;
      • private const int CAST_LAYER_MASK = 8388608;

D. ワールド内Udon制御規定

  • 入稿されたUdonは運営が用意するUdon(以下、VketUdonManager)によって一部動作が制御されます。
  • ブースの原点からXZ方向に±4m、Y方向に6m(幅8m×奥行8m×高さ6m)をそのブースのUdon更新範囲とし、それを基準にVketUdonManagerから出展者のUdonにコールバックを送信します。(表を参照)コールバックはUdonBehaviour.SendCustomEventによって送信されます。Udon更新範囲はワールドによって変更になる可能性があります。
  • VketUdonManagerからのコールバックは下記の手順で受け取ることができます。
    1. スクリプトに下記表の関数を実装する。(アクセス修飾子public、引数・返り値無し)
    2. VketUdonControlコンポーネントにて受け取りたいコールバック名にチェックを入れる。
関数 呼び出しタイミング
void VketUpdate() Update更新時(ローカルプレイヤーがUdon更新範囲内にいる際)
void VketFixedUpdate() FixedUpdate更新時(ローカルプレイヤーがUdon更新範囲内にいる際)
void VketLateUpdate() LateUpdate更新時(ローカルプレイヤーがUdon更新範囲内にいる際)
void VketOnBoothEnter() ローカルプレイヤーがUdon更新範囲に入ったとき
void VketOnBoothExit() ローカルプレイヤーがUdon更新範囲から出たとき
  • 運営が配布するprefabs以外でVRC Pickupコンポーネントを使用した場合、プレイヤーがUdon更新範囲から出た時点で位置が初期地点にリセットされます。
  • 下記コンポーネントは、ローカルプレイヤーがUdon更新範囲から出た時点でDisabledにされます。
    • Camera
    • AudioSource
  • 下記コンポーネントを含むオブジェクトは、ローカルプレイヤーがUdon更新範囲から出た時点で非Activeにされます。
    • Projector

E. ギミック制限規定

  • 来場者体験、または他出展者への影響を鑑みて下記挙動を取るギミックを制限します。
  • オブジェクトをスペース外に移動させる行為は禁止です。
    • プレイヤーに追従する機構はスペース外のプレイヤーには追従しないようスクリプトを組んでください。
    • VRC Pickupコンポーネントによって、プレイヤーがオブジェクトをPickupすることでスペース外に出る場合はこれに当たりません(Pickupにオブジェクトを追従させるのは不可)。
  • プレイヤーの設定(WalkSpeed等)の変更はプレイヤーがスペース内にいる場合のみ許可されます。
  • プレイヤーのテレポートは、プレイヤーがスペース内にいる状態で、かつスペース内に移動させる場合のみ許可されます。
  • プレイヤーのVelocityを変更する場合、スペース外に出た時点で正常な値に戻るようにしてください。
  • D. ワールド内Udon制御規定におけるUdon更新範囲外で、常に処理が発生し続けるようなUdonを構成することは禁止です。
  • 自ブース内以外(他出展者ブース、ワールド)のオブジェクトに干渉するあらゆる行為は禁止です。