mirror of
https://github.com/Raicuparta/nomai-vr.git
synced 2025-12-11 20:15:08 +01:00
On manual recenter, scale camera to fit player height
This commit is contained in:
parent
9ff60dc420
commit
575f97720b
@ -22,7 +22,7 @@ namespace NomaiVR.Hands
|
||||
public static Hand RightHandBehaviour;
|
||||
public static Transform LeftHand;
|
||||
public static Hand LeftHandBehaviour;
|
||||
private Transform wrapper;
|
||||
public static Transform wrapper; // TODO no static
|
||||
|
||||
internal void Start()
|
||||
{
|
||||
@ -82,7 +82,7 @@ namespace NomaiVR.Hands
|
||||
{
|
||||
var right = new GameObject("VrRightHand").AddComponent<Hand>();
|
||||
right.pose = SteamVR_Actions.default_RightHand;
|
||||
right.transform.parent = wrapper;
|
||||
right.transform.SetParent(wrapper, true);
|
||||
right.transform.localPosition = Vector3.zero;
|
||||
right.transform.localRotation = Quaternion.identity;
|
||||
right.handPrefab = AssetLoader.HandPrefab;
|
||||
@ -94,7 +94,7 @@ namespace NomaiVR.Hands
|
||||
|
||||
var left = new GameObject("VrLeftHand").AddComponent<Hand>();
|
||||
left.pose = SteamVR_Actions.default_LeftHand;
|
||||
left.transform.parent = wrapper;
|
||||
left.transform.SetParent(wrapper, true);
|
||||
left.transform.localPosition = Vector3.zero;
|
||||
left.transform.localRotation = Quaternion.identity;
|
||||
left.isLeft = true;
|
||||
|
||||
@ -63,25 +63,49 @@ namespace NomaiVR.Player
|
||||
playerCamera.transform.parent = cameraParent;
|
||||
playerCamera.gameObject.AddComponent<VRCameraManipulator>();
|
||||
|
||||
MoveCameraToPlayerHead();
|
||||
RecenterCameraPosition();
|
||||
}
|
||||
|
||||
private void RecenterCamera()
|
||||
{
|
||||
RecenterCameraPosition();
|
||||
ScaleCameraToFitPlayerHeight();
|
||||
|
||||
}
|
||||
|
||||
private void MoveCameraToPlayerHead()
|
||||
private void RecenterCameraPosition()
|
||||
{
|
||||
var movement = PlayerHelper.PlayerHead.position - playerCamera.transform.position;
|
||||
cameraParent.position += movement;
|
||||
}
|
||||
|
||||
private void ScaleCameraToFitPlayerHeight()
|
||||
{
|
||||
var handsWrapper = HandsController.Behaviour.wrapper;
|
||||
|
||||
if (!handsWrapper) return;
|
||||
|
||||
var playerTransform = Locator.GetPlayerTransform();
|
||||
var baseHeight = Mathf.Abs(playerTransform.Find("Traveller_HEA_Player_v2").localPosition.y * 2);
|
||||
var realPlayerHeight = handsWrapper.InverseTransformPoint(playerCamera.transform.position).y;
|
||||
|
||||
Logs.WriteInfo($"baseHeight {baseHeight}");
|
||||
Logs.WriteInfo($"realPlayerHeight {realPlayerHeight}");
|
||||
|
||||
cameraParent.localScale = Vector3.one * baseHeight / realPlayerHeight;
|
||||
Logs.WriteInfo($"localScale {cameraParent.localScale}");
|
||||
}
|
||||
|
||||
private void CreateRecenterMenuEntry()
|
||||
{
|
||||
FindObjectOfType<PauseMenuManager>().AddPauseMenuAction("RECENTER VR", 2, MoveCameraToPlayerHead);
|
||||
FindObjectOfType<PauseMenuManager>().AddPauseMenuAction("RECENTER VR", 2, RecenterCamera);
|
||||
}
|
||||
|
||||
private void UpdateRecenter()
|
||||
{
|
||||
if (recenterAction.stateDown)
|
||||
{
|
||||
MoveCameraToPlayerHead();
|
||||
RecenterCamera();
|
||||
}
|
||||
}
|
||||
|
||||
@ -91,7 +115,7 @@ namespace NomaiVR.Player
|
||||
|
||||
if (cameraToHead.sqrMagnitude > 0.5f)
|
||||
{
|
||||
MoveCameraToPlayerHead();
|
||||
RecenterCameraPosition();
|
||||
}
|
||||
|
||||
UpdateRecenter();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user