<aside> 🚨 For trackingTarget Enum selector to work, it is required to have an editor fix described in the "Making Enums Work" section as of this time

</aside>

Untitled Database

If you have the fix applied, you should have a proper dropdown menu to select the tracking target

https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cd7f7b47-e4d0-4c16-880a-e6fd9c6a48ca/Untitled.png

<aside> 💡 It might also be useful to have an editor check present to not have a bunch of errors while running in editor. Here's a guide

</aside>

from udon_classes import * # IGNORE_LINE
SystemVoid = SystemVoid # IGNORE_LINE # pylint: disable=undefined-variable
this_trans = this_trans # IGNORE_LINE # pylint: disable=undefined-variable
this_gameObj = this_gameObj # IGNORE_LINE # pylint: disable=undefined-variable

global targetTransform
global trackingTarget
global rotate
global rotateBy

targetTransform = UnityEngineTransform
trackingTarget = VRCSDKBaseVRCPlayerApiTrackingDataType
rotate = False
rotateBy = 45.0

def initGraphVars() -> SystemVoid:
  version = 1
  graphName = "UniversalTracker"
  loggerObject = UnityEngineGameObject.Find("Logger")
  hasLogger = SystemObject(loggerObject) != None
  if hasLogger:
    logger = VRCUdonCommonInterfacesIUdonEventReceiver(loggerObject.GetComponent("UdonBehaviour"))

# LOGGER SCAFFOLD
def logExternal(logInput: SystemObject) -> SystemVoid:
  logger.SetProgramVariable("fromGraph", SystemObject(graphName))
  logger.SetProgramVariable("toLog", logInput)
  logger.SendCustomEvent("_log")

def logContexted(input: SystemObject) -> SystemVoid:
  UnityEngineDebug.Log(SystemObject("[" + graphName + "]: " + SystemConvert.ToString(input)))
  if hasLogger:
    logExternal(input)

# PROGRAM
def _start():
  initGraphVars()
  logContexted(SystemObject("v " + SystemConvert.ToString(version)))
  player = VRCSDKBaseNetworking.get_LocalPlayer()
  isEditor = SystemObject(player) == None
  if not isEditor:
    logContexted(SystemObject("Running in game"))
  else:
    logContexted(SystemObject("Running in editor"))

def _update():
  if not isEditor:
    trackingData = player.GetTrackingData(trackingTarget)
    targetPos = trackingData.get_position()
    targetRot = trackingData.get_rotation()
    targetTransform.set_position(targetPos)
    targetTransform.set_rotation(targetRot)
    if rotate:
      rotationVector = UnityEngineVector3.ctor(0.0,rotateBy,0.0)
      targetTransform.Rotate(rotationVector)