Attaches the player to the target game object, keeping the avatar fixed in its current position/rotation relative to the target object (e.g. for use in Vehicles)
Parameter
Type
Description
Space.Scene.PlayerAvatar.AttachTo(targetObject)
--the below scipt makes the player Attach/Detach to/from this object by clicking it
--(Example: Seat/Vehicle/Experience etc.. )
thisGameObject = Space.Host.ExecutingObject
isAttached = 0
OnClick = function()
if isAttached == 0 then
Space.Scene.PlayerAvatar.AttachTo(thisGameObject)
isAttached = 1
elseif isAttached == 1 then
Space.Scene.PlayerAvatar.Detach()
isAttached = 0
end
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click to Attach/Detach yourself to/from me"
thisGameObject.Clickable.OnClick(OnClick)
Detach
void Detach ()
Detaches the avatar from whatever it may be attached to (only works for the player avatar), including chairs, vehicles and so forth.
Space.Scene.PlayerAvatar.Detach()
--the below scipt makes the player Attach/Detach to/from this object by clicking it
--(Example: Seat/Vehicle/Experience etc.. )
thisGameObject = Space.Host.ExecutingObject
isAttached = 0
OnClick = function()
if isAttached == 0 then
Space.Scene.PlayerAvatar.AttachTo(thisGameObject)
isAttached = 1
elseif isAttached == 1 then
Space.Scene.PlayerAvatar.Detach()
isAttached = 0
end
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click to Attach/Detach yourself to/from me"
thisGameObject.Clickable.OnClick(OnClick)
OnAvatarAttached
void OnAvatarAttached ()
An event which fires whenever this avatar is attached to a game object in the current scene.
function OAA()
--
end
Space.Scene.PlayerAvatar.OnAvatarAttached(OAA)
OnAvatarDetached
void OnAvatarDetached ()
An event which fires whenever this avatar is detached from a game object in the current scene.
function OAD()
--
end
Space.Scene.PlayerAvatar.OnAvatarDetached(OAD)
LoadOutfit
void LoadOutfit (int outfitID)
Only works on a white-label deployment due to abuse concerns. Restrictions: The outfit ID needs to be one of the grid template outfits, with all the restrictions that apply to those (i.e. must use either SW content, or content uploaded by a grid admin account).
Parameter
Type
Description
local avatar=Space.Scene.PlayerAvatar
avatar.LoadOutfit(10001)
--the below script changes the player's outfit into
--a pre-defined outfit if they click the object containing the script
--(Example: Player clicks on a wardrobe and their outfit changes)
--[Only works on white-label deployment]
thisGameObject = Space.Host.ExecutingObject
OnClick = function()
Space.Scene.PlayerAvatar.LoadOutfit(2662469)
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Put on your favourite suit"
thisGameObject.Clickable.OnClick(OnClick)
ResetOutfit
void ResetOutfit ()
Reset current outfit. (white-label only)
local Space.Scene.PlayerAvatar.ResetOutfit()
--Clicking this object will reset player avatar's outfit
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
OnClick = function()
thisPlayer.ResetOutfit()
end
thisObject.AddClickable()
thisObject.Clickable.OnClick(OnClick)
local avatar=Space.Scene.PlayerAvatar
avatar.Register("MyName","MyPassword","MyEmail",false,function ()
Space.Log("Success!")
end,function ()
Space.Log("OnError!!")
end)
ResetOutfitToTemplate
void ResetOutfitToTemplate (int outfitID)
Reset current outfit to a specific template. (white-label only)
Parameter
Type
Description
local avatar=Space.Scene.PlayerAvatar
avatar.ResetOutfitToTemplate(10001)
--Clicking this object will reset player avatar's outfit to a specific template.
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
OnClick = function()
thisPlayer.ResetOutfitToTemplate(10001)
end
thisObject.AddClickable()
thisObject.Clickable.OnClick(OnClick)
-- Best used with non humanoid models
local bone = Space.Scene.PlayerAvatar.FindBone("Hips/Spine/Chest/LeftShoulder"); -- Gets the bone by path
Space.Log(bone.Name); -- Prints the retrieved bones name, which will match the last name in the path specified.
or
-- Best used with humanoid models
local bone = Space.Scene.PlayerAvatar.FindBone("LeftShoulder"); -- Gets bone by UnityEngine.HumanTrait.BoneName[]
Space.Log(bone.Name); -- Prints the bone name of the corresponding search parameter, which when using a default avatar, it will print "LeftShoulder"
--[[
UnityEngine.HumanTrait.BoneName[]
Body: Hips, Spine, Chest, UpperChest
Head: Neck, Jaw, Head, LeftEye, RightEye
Left Arm: LeftShoulder, LeftUpperArm, LeftLowerArm, LeftHand
Left Leg: LeftUpperLeg, LeftLowerLeg, LeftFoot, LeftToes
Right Arm: RightShoulder, RightUpperArm, RightLowerArm, RightHand
Right Leg: RightUpperLeg, RightLowerLeg, RightFoot, RightToes
Left Hand (Thumb): LeftThumbProximal, LeftThumbIntermediate, LeftThumbDistal
Left Hand (Index): LeftIndexProximal, LeftIndexIntermediate, LeftIndexDistal
Left Hand (Middle): LeftMiddleProximal, LeftMiddleIntermediate, LeftMiddleDistal
Left Hand (Ring): LeftRingProximal, LeftRingIntermediate, LeftRingDistal
Left Hand (Little): LeftLittleProximal, LeftLittleIntermediate, LeftLittleDistal
Right Hand (Thumb): RightThumbProximal, RightThumbIntermediate, RightThumbDistal
Right Hand (Index): RightIndexProximal, RightIndexIntermediate, RightIndexDistal
Right Hand (Middle): RightMiddleProximal, RightMiddleIntermediate, RightMiddleDistal
Right Hand (Ring): RightRingProximal, RightRingIntermediate, RightRingDistal
Right Hand (Little): RightLittleProximal, RightLittleIntermediate, RightLittleDistal
]]
--this script will set your avatar's "right hand" as parent of this object
--this way this object will be a child of your right hand and therefore move with it
--(Example: clicking on a gun to equip it)
thisGameObject = Space.Host.ExecutingObject
OnClick = function()
RightHand = Space.Scene.PlayerAvatar.FindBone("RightHand")
thisGameObject.SetParent(RightHand)
thisGameObject.LocalPosition = Vector.New(0,0,0) -- resetting position to match hand
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip="Click to Equip "
thisGameObject.Clickable.OnClick(OnClick)
--the below script teleports player to a specific landmark
--if they click the object containing it
--(Example: A region promotional/advertisement sign)
--[You need a landmark in the scene with name "Fashion Section Landmark"
thisGameObject = Space.Host.ExecutingObject
OnClick = function()
Space.Scene.PlayerAvatar.Teleport("Fashion Section Landmark")
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click me to go to the fashion section!"
thisGameObject.Clickable.OnClick(OnClick)
--the below scipt makes the player Play/Stop a custom animation when clicking this object
--(Example: Dance Machine )
--[Required: Place an animation in the first "Resource" in the scripting runtime]
thisGameObject = Space.Host.ExecutingObject
isDancing = 0
OnClick = function()
if isDancing == 0 then
Space.Scene.PlayerAvatar.StartCustomAnimation(Space.Resources[1])
isDancing = 1
elseif isDancing == 1 then
Space.Scene.PlayerAvatar.StopCustomAnimation()
isDancing = 0
end
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click to Start/Stop dancing"
thisGameObject.Clickable.OnClick(OnClick)
--the below scipt makes the player Play/Stop a custom animation when clicking this object
--(Example: Dance Machine )
--[Required: Place an animation in the first "Resource" in the scripting runtime]
thisGameObject = Space.Host.ExecutingObject
isDancing = 0
OnClick = function()
if isDancing == 0 then
Space.Scene.PlayerAvatar.StartCustomAnimation(Space.Resources[1])
isDancing = 1
elseif isDancing == 1 then
Space.Scene.PlayerAvatar.StopCustomAnimation()
isDancing = 0
end
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click to Start/Stop dancing"
thisGameObject.Clickable.OnClick(OnClick)
OnAvatarReload
void OnAvatarReload (Closure o)
This event will be called when the avatar gets loaded.
Parameter
Type
Description
o
Closure (callback)
A function that will be called once the OnAvatarReload event is triggered.
local avatar=Space.Scene.PlayerAvatar
avatar.OnAvatarReload(function ()
Space.Log(avatar.OutfitID)
end)
--this script ensures the avatar is still animating after their avatar gets reloaded
thisPlayer = Space.Scene.PlayerAvatar
theAnimation = Space.GetResource("The Animation") --add animation to resources in Scripting Runtime
wasAnimated = true --you'll need to set this according to the situation, its true now for example's sake
ResetDance = function()
if wasAnimated then
thisPlayer.PlayCustomAnimation(theAnimation)
end
end
thisPlayer.OnAvatarReload(ResetDance)
SynchroniseState
void SynchroniseState ()
Synchronise avatar's state to network.
Space.Scene.PlayerAvatar.SynchroniseState()
StartFly
void StartFly ()
Puts the avatar into Fly Mode.
Space.Scene.PlayerAvatar.StartFly()
--the below script teleports the player to a sky location after he clicks
--but then immediately puts the character in fly mode so they don't fall back down
--(Example: Sky exhibit)
thisGameObject = Space.Host.ExecutingObject
OnClick = function()
Space.Scene.PlayerAvatar.Teleport(Vector.New(0,10,0))
Space.Scene.PlayerAvatar.StartFly()
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click me to view our sky exhibit!"
thisGameObject.Clickable.OnClick(OnClick)
EndFly
void EndFly ()
Takes the avatar out of Fly Mode.
Space.Scene.PlayerAvatar.EndFly()
--the below script a player flying in the sky back to the ground
--but then immediately end's the character fly mode so they are standing
--(Example: Going back down to ground from Sky exhibit)
thisGameObject = Space.Host.ExecutingObject
OnClick = function()
Space.Scene.PlayerAvatar.Teleport(Vector.New(0,0,0))
Space.Scene.PlayerAvatar.EndFly()
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click me to go back to the ground!"
thisGameObject.Clickable.OnClick(OnClick)
OnAvatarSkeletonReload
void OnAvatarSkeletonReload (Closure o)
This event will be called when the avatar skeleton gets loaded.
Parameter
Type
Description
o
Closure (callback)
A function that will be called once the OnAvatarSkeletonReload event is trigged.
--this script ensures the avatar is still animating after their avatar's skeleton gets reloaded
thisPlayer = Space.Scene.PlayerAvatar
theAnimation = Space.GetResource("The Animation") --add animation to resources in Scripting Runtime
wasAnimated = true --you'll need to set this according to the situation, its true now for example's sake
ResetDance = function()
if wasAnimated then
thisPlayer.PlayCustomAnimation(theAnimation)
end
end
thisPlayer.OnAvatarSkeletonReload(ResetDance)
--this script, once clicked, will get all avatars in the scene
--and print their Username(including self)
--(Example: scoreboards/radars/scanners/game machines)
thisGameObject = Space.Host.ExecutingObject
OnClick = function()
allAvatars = Space.Scene.AllAvatars
for var=1, #allAvatars do
local Username = allAvatars[var].Username
Space.Log("Username: " .. Username)
end
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click to print all avatars' Username"
thisGameObject.Clickable.OnClick(OnClick)
--this script, once clicked, will get all avatars in the scene
--and print their Title and Username(including self)
thisGameObject = Space.Host.ExecutingObject
OnClick = function()
allAvatars = Space.Scene.AllAvatars
for var=1, #allAvatars do
local Username = allAvatars[var].Username
local Title = allAvatars[var].Title
Space.Log(Title .. " " .. Username)
end
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click to print all avatars' Titles and Username"
thisGameObject.Clickable.OnClick(OnClick)
Returns the avatar's user ID, please note if you store these, this is a 'long' value not a 'int'.
playerID = Space.Scene.PlayerAvatar.ID
--this script, once clicked, will get all avatars in the scene
--and print their ID(including self)
--(Example: scoreboards/radars/scanners/game machines)
thisGameObject = Space.Host.ExecutingObject
OnClick = function()
allAvatars = Space.Scene.AllAvatars
for var=1, #allAvatars do
local ID = allAvatars[var].ID
Space.Log("ID: " .. ID)
end
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Click to print all avatars' ID"
thisGameObject.Clickable.OnClick(OnClick)
IsAttached
bool IsAttachedget
Returns True if avatar is Attached
isAttached = Space.Scene.PlayerAvatar.isAttached
MovementSpeed
float MovementSpeedgetset
How fast the avatar's movement is
Space.Scene.PlayerAvatar = 20
--the below scipt makes the object give the player triple movement speed
--once it's clicked, and then returns them to original speed after 10 seconds
--(Example: Triple Speed Powerup (vatar running race))
thisGameObject = Space.Host.ExecutingObject
TripleSpeedCoroutine = function()
local originalSpeed = Space.Scene.PlayerAvatar.MovementSpeed
Space.Scene.PlayerAvatar.MovementSpeed = originalSpeed * 3
coroutine.yield(10)
Space.Scene.PlayerAvatar.MovementSpeed = originalSpeed
end
OnClick = function()
Space.Host.StartCoroutine(TripleSpeedCoroutine)
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Triple Speed Powerup!"
thisGameObject.Clickable.OnClick(OnClick)
JumpHeight
float JumpHeightgetset
How high the avatar's jump is
Space.Scene.PlayerAvatar.JumpHeight = 20
--the below scipt makes the object give the player triple jump height
--once it's clicked, and then returns them to original jump height after 10 seconds
--(Example: Triple Jump Height Powerup )
thisGameObject = Space.Host.ExecutingObject
originalJumpHeight = Space.Scene.PlayerAvatar.JumpHeight
TripleJumpHeightCoroutine = function()
Space.Scene.PlayerAvatar.JumpHeight = originalJumpHeight * 3
coroutine.yield(10)
Space.Scene.PlayerAvatar.JumpHeight = originalJumpHeight
end
OnClick = function()
Space.Host.StartCoroutine(TripleJumpHeightCoroutine)
end
thisGameObject.AddClickable()
thisGameObject.Clickable.Tooltip = "Triple JumpHeight Powerup!"
thisGameObject.Clickable.OnClick(OnClick)
Guest
bool Guestget
Is this Avatar a Guest?
isGuest = Space.Scene.PlayerAvatar.Guest
--this script will make this object non-clickable for guest players
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
OnClick = function()
Space.Log("Do Something")
end
if not thisPlayer.Guest then --if player is not guest
thisObject.AddClickable()
thisObject.Clickable.OnClick(OnClick)
end
OutfitID
long OutfitIDget
Returns the current outfit ID of the avatar
avOutfit = Space.Scene.PlayerAvatar.OutfitID
Loaded
bool Loadedget
Returns true if avatar is Loaded
isLoaded = Space.Scene.PlayerAvatar.Loaded
--this script will wait for a joining avatar to load first before making it play an animation
--(otherwise that animation may be reset if played before load is complete)
NewJoinAnimation = Space.GetResource("The Animation")
OnPlayerJoin = function(NewAvatar)
Space.Host.StartCoroutine(function()
while not NewAvatar.Loaded do coroutine.yield(0) end --makes it wait
Space.Log("yes")
NewAvatar.PlayCustomAnimation(NewJoinAnimation) --at this point Loaded is True
end)
end
Space.Scene.OnPlayerJoin(OnPlayerJoin)
Returns a reference to avatar's skeleton GameObject
avSkeleton = Space.Scene.PlayerAvatar.Skeleton
--clicking this object will replace your avatar's animator controller (found on the skeleton)
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
customController = Space.GetResource("animcont")
OnClick = function()
thisPlayer.Skeleton.Animator.Controller = customController
end
thisObject.AddClickable()
thisObject.Clickable.OnClick(OnClick)
BlockMovement
bool BlockMovementgetset
If set to True, avatar's movement will be blocked
Space.Scene.PlayerAvatar.BlockMovement = true
--the below scipt makes this object a boundary area where any user entering it
--will be blocked from movement for 10 seconds, then the object will release controls and
--destry itself after that
--(Example: freezing trap)
--[This object's collider needs to be set as IsTrigger (Please read about OnTriggerStart for troubleshooting)]
thisGameObject = Space.Host.ExecutingObject
FrozenTime = 0.0
OnTriggerStart = function(TriggerStarter)
if TriggerStarter.Root.Avatar ~= nil then
if TriggerStarter.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then
Space.Scene.PlayerAvatar.BlockMovement = true
end
end
end
OnTriggerStay = function(TriggerStayer)
if TriggerStayer.Root.Avatar ~= nil then
if TriggerStayer.Root.Avatar.Username == Space.Scene.PlayerAvatar.Username then
FrozenTime = FrozenTime + Space.DeltaTime
if FrozenTime > 20 then
Space.Scene.PlayerAvatar.BlockMovement = false
thisGameObject.Destroy()
end
end
end
end
thisGameObject.SubscribeToEvents()
thisGameObject.OnTriggerStart(OnTriggerStart)
thisGameObject.OnTriggerStay(OnTriggerStay)
BlockRun
bool BlockRungetset
Is the Avatar blocked from running?
avatar=Space.Scene.PlayerAvatar.BlockRun = true
--this script will block a player's run ability when entering trigger collider and release it when leaving
--[Requires this object to have a "Trigger" collider]
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
OTS = function(gameObject)
if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then
thisPlayer.BlockRun = true
end
end
OTE = function(gameObject)
if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then
thisPlayer.BlockRun = false
end
end
thisObject.OnTriggerStart(OTS)
thisObject.OnTriggerExit(OTE)
BlockFly
bool BlockFlygetset
Is the Avatar blocked from flying?
Space.Scene.PlayerAvatar.BlockFly = true
--this script will block a player's fly ability when entering trigger collider and release it when leaving
--[Requires this object to have a "Trigger" collider]
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
OTS = function(gameObject)
if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then
thisPlayer.BlockFly = true
end
end
OTE = function(gameObject)
if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then
thisPlayer.BlockFly = false
end
end
thisObject.OnTriggerStart(OTS)
thisObject.OnTriggerExit(OTE)
BlockCrouch
bool BlockCrouchgetset
Is the Avatar blocked from crouching?
Space.Scene.PlayerAvatar.BlockCrouch = true
--this script will block a player's crouch ability when entering trigger collider and release it when leaving
--[Requires this object to have a "Trigger" collider]
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
OTS = function(gameObject)
if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then
thisPlayer.BlockCrouch = true
end
end
OTE = function(gameObject)
if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then
thisPlayer.BlockCrouch = false
end
end
thisObject.OnTriggerStart(OTS)
thisObject.OnTriggerExit(OTE)
BlockJump
bool BlockJumpgetset
Is the Avatar blocked from jumping?
Space.Scene.PlayerAvatar.BlockJump = true
--this script will block a player's jump ability when entering trigger collider and release it when leaving
--[Requires this object to have a "Trigger" collider]
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
OTS = function(gameObject)
if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then
thisPlayer.BlockJump= true
end
end
OTE = function(gameObject)
if gameObject.Avatar ~= nil and thisPlayer == gameObject.Avatar then
thisPlayer.BlockJump= false
end
end
thisObject.OnTriggerStart(OTS)
thisObject.OnTriggerExit(OTE)
--Clicking this object will teleport you 2 units forward and make you face the opposite way
thisObject = Space.Host.ExecutingObject
thisPlayer = Space.Scene.PlayerAvatar
OnClick = function()
local targetPos = thisPlayer.GameObject.WorldPosition + (thisPlayer.GameObject.Forward * 2)
local targetRot = thisPlayer.GameObject.WorldRotation * Quaternion.AngleAxis(Vector.Up, 180)
thisPlayer.Teleport(targetPos, targetRot)
end
thisObject.AddClickable()
thisObject.Clickable.OnClick(OnClick)