Animating Your Avatar In VR

This is awesome. It solves the big use case that Nexus VR Character Model has tried to solve: immersion. Ever since the Meta Quest’s launch, I’ve been critical about how immersion-breaking not having your character’s movements match your real movements was. This existing and being native with a single property change is huge.

But… it isn’t perfect. As of my testing yesterday, teleporting players is completely broken. If you happen to move the character by using movement inputs (joystick, probably keyboard), you are fine. Once you use HumanoidRootPart.CFrame = ..., instead of your camera and character moving, your character moves, and then tries to move back to where your camera was. That is until you start moving, then the camera snaps to where the character is.

I can reproduce this on a baseplate with a simple “Button X to teleport” script.

game.UserInputService.InputBegan:Connect(function(Input)
	if Input.KeyCode == Enum.KeyCode.ButtonX then
		local HumanoidRootPart = game.Players.LocalPlayer.Character.HumanoidRootPart
		HumanoidRootPart.CFrame = CFrame.new(0, 0, -10) * HumanoidRootPart.CFrame
	end
end)

It is harder to see, but doing game.Players.LocalPlayer.CameraMode = Enum.CameraMode.LockFirstPerson will also yield the same result.

For those who use Nexus VR Character Model, all versions (V1 to V2.10) are probably incompatible with this. V3 will exist at some point to provide some feature parity (teleport controls, custom backpack, and a bit more) while supporting this. (Edit: For the adventurous, a preview version is out)

53 Likes