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); } }