From 89caac10f0cf7bbf860377cf477d00accedd5b27 Mon Sep 17 00:00:00 2001 From: Jamie Greunbaum Date: Sun, 24 May 2026 12:48:12 -0400 Subject: [PATCH] View tablet now follows head rotation also, which avoids some annoying quirks. --- Assets/UdonSharp/ViewTabletSpawner.asset | 56 +----------------------- Assets/UdonSharp/ViewTabletSpawner.cs | 28 ++++++------ 2 files changed, 15 insertions(+), 69 deletions(-) diff --git a/Assets/UdonSharp/ViewTabletSpawner.asset b/Assets/UdonSharp/ViewTabletSpawner.asset index beada78..eb87431 100644 --- a/Assets/UdonSharp/ViewTabletSpawner.asset +++ b/Assets/UdonSharp/ViewTabletSpawner.asset @@ -44,7 +44,7 @@ MonoBehaviour: Data: - Name: Entry: 12 - Data: 5 + Data: 4 - Name: Entry: 7 Data: @@ -267,60 +267,6 @@ MonoBehaviour: - Name: Entry: 8 Data: - - Name: - Entry: 7 - Data: - - Name: $k - Entry: 1 - Data: _PreviousHeadYRotation - - Name: $v - Entry: 7 - Data: 15|UdonSharp.Compiler.FieldDefinition, UdonSharp.Editor - - Name: k__BackingField - Entry: 1 - Data: _PreviousHeadYRotation - - Name: k__BackingField - Entry: 7 - Data: 16|System.RuntimeType, mscorlib - - Name: - Entry: 1 - Data: System.Single, mscorlib - - Name: - Entry: 8 - Data: - - Name: k__BackingField - Entry: 9 - Data: 16 - - Name: k__BackingField - Entry: 7 - Data: System.Nullable`1[[UdonSharp.UdonSyncMode, UdonSharp.Runtime]], mscorlib - - Name: - Entry: 6 - Data: - - Name: - Entry: 8 - Data: - - Name: k__BackingField - Entry: 5 - Data: false - - Name: _fieldAttributes - Entry: 7 - Data: 17|System.Collections.Generic.List`1[[System.Attribute, mscorlib]], mscorlib - - Name: - Entry: 12 - Data: 0 - - Name: - Entry: 13 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - - Name: - Entry: 8 - Data: - Name: Entry: 13 Data: diff --git a/Assets/UdonSharp/ViewTabletSpawner.cs b/Assets/UdonSharp/ViewTabletSpawner.cs index 8f147c3..aaa6a27 100644 --- a/Assets/UdonSharp/ViewTabletSpawner.cs +++ b/Assets/UdonSharp/ViewTabletSpawner.cs @@ -12,37 +12,37 @@ public class ViewTabletSpawner : UdonSharpBehaviour [SerializeField] private Transform _ViewTablet; private bool _FollowPlayerHead = false; - private float _PreviousHeadYRotation = 0.0f; void Update() { VRCPlayerApi LocalPlayer = Networking.LocalPlayer; - _PreviousHeadYRotation = LocalPlayer.GetBoneRotation(HumanBodyBones.Head).eulerAngles.y; if (_FollowPlayerHead) { _ViewTabletHeadRoot.position = LocalPlayer.GetBonePosition(HumanBodyBones.Head); + _ViewTabletHeadRoot.rotation = LocalPlayer.GetBoneRotation(HumanBodyBones.Head); } else { _ViewTabletHeadRoot.localPosition = Vector3.zero; + _ViewTabletHeadRoot.localRotation = Quaternion.identity; } } - public override void OnPlayerRespawn(VRCPlayerApi Player) - { - if (Player.isLocal) - { - Vector3 HeadRotation = Networking.LocalPlayer.GetBoneRotation(HumanBodyBones.Head).eulerAngles; - HeadRotation.x = HeadRotation.z = 0.0f; - float DeltaY = HeadRotation.y - _PreviousHeadYRotation; - HeadRotation.y = _ViewTabletHeadRoot.eulerAngles.y + DeltaY; - _ViewTabletHeadRoot.rotation = Quaternion.Euler(HeadRotation); - } + //public override void OnPlayerRespawn(VRCPlayerApi Player) + //{ + // if (Player.isLocal) + // { + // Vector3 HeadRotation = Networking.LocalPlayer.GetBoneRotation(HumanBodyBones.Head).eulerAngles; + // HeadRotation.x = HeadRotation.z = 0.0f; + // float DeltaY = HeadRotation.y - _PreviousHeadYRotation; + // HeadRotation.y = _ViewTabletHeadRoot.eulerAngles.y + DeltaY; + // _ViewTabletHeadRoot.rotation = Quaternion.Euler(HeadRotation); + // } - base.OnPlayerRespawn(Player); - } + // base.OnPlayerRespawn(Player); + //} public void SpawnAtLocalPlayerHead()