61 lines
1.8 KiB
C#
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);
|
|
}
|
|
} |