Files
VRProject/Assets/_Scripts/VRUIDoorFaceFollow.cs
ohgushiyuga 52341100ed otamesi
2026-08-27 12:51:15 +09:00

61 lines
1.8 KiB
C#

using UnityEngine;
public class VRUIDoorFaceFollow : MonoBehaviour
{
[SerializeField] private Transform vrCameraTransform;
[Header("配置・追従パラメータ")]
[SerializeField] private float forwardDistance = 0.5f;
[SerializeField] private float heightOffset = -0.1f;
[SerializeField] private float followSpeed = 5.0f;
private bool wasActiveLastFrame;
private void Start()
{
if (vrCameraTransform == null && Camera.main != null)
{
vrCameraTransform = Camera.main.transform;
}
}
private void LateUpdate()
{
if (vrCameraTransform == null) return;
if (!wasActiveLastFrame)
{
SetInitialPosition();
wasActiveLastFrame = true;
return;
}
SmoothFollowPlayer();
}
private void OnDisable()
{
wasActiveLastFrame = false;
}
private void SetInitialPosition()
{
Vector3 targetPosition = vrCameraTransform.position + (vrCameraTransform.forward * forwardDistance);
targetPosition.y += heightOffset;
transform.position = targetPosition;
transform.LookAt(vrCameraTransform.position);
transform.Rotate(0, 180, 0);
}
private void SmoothFollowPlayer()
{
Vector3 targetPosition = vrCameraTransform.position + (vrCameraTransform.forward * forwardDistance);
targetPosition.y += heightOffset;
transform.position = Vector3.Lerp(transform.position, targetPosition, Time.unscaledDeltaTime * followSpeed);
Quaternion targetRotation = Quaternion.LookRotation(transform.position - vrCameraTransform.position);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, Time.unscaledDeltaTime * followSpeed);
}
}