50 lines
1.4 KiB
C#

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Billboard : MonoBehaviour
{
[Header("Position")]
public float distanceFromCamera = 2.0f;
public Vector3 offset = Vector3.zero;
[Header("Smoothing")]
[Range(0.01f, 20f)]
public float moveSmoothSpeed = 5f;
[Range(0.01f, 20f)]
public float rotateSmoothSpeed = 5f;
private Transform mainCamera;
void Start()
{
if (Camera.main != null)
{
mainCamera = Camera.main.transform;
}
else
{
Debug.LogWarning("Main Camera not found.");
}
}
void LateUpdate()
{
if (mainCamera == null) return;
// Calculate target position in field of view
Vector3 targetPosition = mainCamera.position + mainCamera.forward * distanceFromCamera + mainCamera.TransformVector(offset);
transform.position = Vector3.Lerp(transform.position, targetPosition, moveSmoothSpeed * Time.deltaTime);
Vector3 directionToCamera = transform.position - mainCamera.position;
directionToCamera.y = 0f; // only horizontal orientation
if (directionToCamera.sqrMagnitude > 0.001f)
{
Quaternion targetRotation = Quaternion.LookRotation(directionToCamera);
transform.rotation = Quaternion.Slerp(transform.rotation, targetRotation, rotateSmoothSpeed * Time.deltaTime);
}
}
}