Udon Rules (Quest Vket Academy)

  • Virtual Market 2022 Summer uses SDK3 and Udon. Since Udon has a wide range of capabilities, it is possible to easily cause a fatal defect in the instance, so we will impose the following restrictions in addition to the submission rules.
  • In order to reduce the processing load of Udon, the operation of Udon in the world is controlled by Udon prepared by the organizers. See D. Udon control rules in the world for more information.
  • Please note that if the submitted space is not compliant with the regulations, we will take measures such as requesting resubmission or not placing it.
  • This policy may be revised regardless of whether it is outside the submission period or during the period.

A. Submission rules

  • Use one of the following Udon assemblers.
    • Udon Node Graph
    • Udon Sharp
    • Cyan Trigger
    • Vket Trigger
  • Please use the version of UdonSharp imported with VketTools.
  • Include the source script file (extension .cs) in the submission folder when using UdonSharp.
    • The script file needs to be put it in the Assets / [Exhibitor ID number name] / UdonScripts folder created by VketTools.
  • Please use the version of CyanTrigger specified by the organizers.
  • Include the SerializedUdonProgramAsset automatically generated on Udon creation in the above folder.

B. Udon Behavior Regulations

  • Up to 10 UdonBehaviour components per space.
  • Please set Synchronization Method to be Manual.
  • Please disable Allow Collision Ownership Transfer if the object includes a collider.

C. Script rules

  • Up to 10 Sync variables (variables with [UdonSynced]) can be used per a space.
  • You may only use following types as Sync variables. You may not use array or string types.
    • bool, byte, sbyte, char, double, float, int, uint, long, ulong, short, ushort
    • Please make sure to update the Sync variables such as running RequestSerialization function only in response to a player’s actions like Interact or Collision. Please avoid such an implementation that updates the Sync variable every frame.
    • You may not use continuous synchronization of the Sync vaiable by the Continous setting.
  • The following variables, functions and callbacks cannot be used
    • Disabled variables
      • All variables of RenderSettings class
    • Prohibited function
      • UdonSharpBehaviour.VRCInstantiate
      • GameObject.Find
      • Object.Destroy
      • Object.DestroyImmediate
    • Prohibited callback
      • Start
      • Update
      • LateUpdate
      • FixedUpdate
      • PostLateUpdate
      • OnTriggerStay
      • OnCollisionStay
      • OnAnimatorMove
      • OnRenderObject
      • OnWillRenderObject
      • OnPlayerJoined
      • OnPlayerLeft
      • InputJump
      • InputUse
      • InputGrab
      • InputDrop
      • InputMoveHorizontal
      • InputMoveVertical
      • InputLookHorizontal
      • InputLookVertical
      • OnPlayerRespawn
  • All classes should belong to the namespace below when using UdonSharp.
    • Vket2022Summer.Circle [Exhibitor ID]
    • Please replace [Exhibitor ID] with a number. Example: Vket2022Summer.Circle9999
    • It is allowed to add namespace after Exhibitor ID. Example: Vket2022Summer.Circle9999.Example
  • Below #define directive may not be used when using UdonSharp.
    • #if UNITY_EDITOR

D. Udon control rules in the world

  • The operation of the submitted Udon is partially controlled by the Udon (hereinafter referred to as VketUdonManager) prepared by the organizers.
  • The Udon Update Range for the space is ± 1.5m in the X direction, ±2m in the Z direction and 3m in the Y direction (width 3m x depth 4m x height 3m) from the origin of the space. Based on that, VketUdonManager will send a callback to the exhibitor Udon. (See table) The callback is sent by UdonBehaviour.SendCustomEvent. Udon Update Range is subject to change depending on the world.
  • You can receive the callback from VketUdonManager by implementing CustomEvent(function) with the below names to your Udon.
  • In the case of UdonSharp, set the access modifier of the function to public and set no return value (void) and no argument.
CustomEvent(Function) Call timing
_VketStart 1 second after the local player joins the world, with some frames of discrepancy depending on the space placement
_VketUpdate When updating Update (as long as the local player is within the Udon Update Range)
_VketFixedUpdate When updating FixedUpdate (as long as the local player is within the Udon Update Range)
_VketLateUpdate When updating LateUpdate (as long as the local player is within the Udon Update Range)
_VketPostLateUpdate When updating PostLateUpdate (as long as the local player is within the Udon Update Range)
_VketOnBoothEnter When a local player enters the Udon Update Range
_VketOnBoothExit When a local player leaves the Udon Update Range

E. Gimmick restrictions

  • We will restrict the gimmicks that take the following actions in consideration of the visitor experience or the influence on other exhibitors.
  • The act of moving an object out of space is prohibited.
    • When you use mechanisms that follow the player, script it in such a way that it does not follow the player outside the space.
    • This is not the case if the VRC Pickup component causes the player to pick up and bring an object out of space (it is prohibited to have the Pickup follow the object).
  • Changes to player settings (Walk Speed, etc.) are only allowed if the player is in space.
  • Player teleportation is only allowed if the player is in the space and is moved inside the space.
  • If you change the player's Velocity, make sure it returns to normal when the player goes out of space.
  • It is prohibited to configure Udon so that processing always occurs outside the Udon update range in the D. Udon control rules in the world.
  • Any act that interferes with objects other than in your own space (other exhibitor spaces, world) is prohibited.