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