On manual recenter, scale camera to fit player height

This commit is contained in:
Raicuparta 2022-04-12 16:09:01 +02:00
parent 9ff60dc420
commit 575f97720b
2 changed files with 32 additions and 8 deletions

View File

@ -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;

View File

@ -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();