50 lines
1.4 KiB
C#
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);
|
|
}
|
|
}
|
|
}
|