Files
gold_dolphin/unity/Assets/enemy/BillboardSprite.cs
2026-06-27 22:21:16 +08:00

61 lines
2.0 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
using UnityEngine;
namespace IndianOceanAssets.Engine2_5D
{
/// <summary>
/// 场景物件面向摄像机脚本(饥荒风格)。
/// 让物体始终朝摄像机方向旋转,默认只绕 Y 轴(保持竖直不倒)。
///
/// 用法:挂到需要面向摄像机的精灵/物件上即可。
/// 适合:树木、岩石、角色、道具等 2D 精灵在 3D 场景中的朝向修正。
/// </summary>
public class BillboardSprite : MonoBehaviour
{
[Tooltip("只绕Y轴旋转饥荒风格保持竖直不倒。关闭则完全面向摄像机。")]
[SerializeField] private bool lockYAxis = true;
[Tooltip("平滑旋转lerp过渡关闭则瞬间转向")]
[SerializeField] private bool smoothRotation = false;
[Tooltip("平滑旋转速度")]
[SerializeField] private float rotationSpeed = 8f;
private Camera _mainCamera;
private Transform _camTransform;
private void Start()
{
_mainCamera = Camera.main;
if (_mainCamera != null)
_camTransform = _mainCamera.transform;
}
private void LateUpdate()
{
if (_camTransform == null)
{
// 摄像机丢失时重新获取(场景切换等情况)
_mainCamera = Camera.main;
if (_mainCamera != null)
_camTransform = _mainCamera.transform;
if (_camTransform == null) return;
}
Vector3 dir = _camTransform.position - transform.position;
if (lockYAxis)
dir.y = 0f; // 保持竖直
if (dir.sqrMagnitude < 0.0001f) return;
Quaternion targetRot = Quaternion.LookRotation(dir);
if (smoothRotation)
transform.rotation = Quaternion.Slerp(transform.rotation, targetRot,
rotationSpeed * Time.deltaTime);
else
transform.rotation = targetRot;
}
}
}