using System; using NBF; using UnityEngine; public class ArmTest : MonoBehaviour { public Vector3 target = new Vector3(0, 0, 0); public Transform targetTransform; // public float Value; private Quaternion initialCameraRotation; private Quaternion initialLocalRotation; private Quaternion initialRelativeRotation; [SerializeField] private float smoothSpeed = 5f; private void Start() { // target = transform.localEulerAngles; // 记录初始状态 initialCameraRotation = BaseCamera.Main.transform.rotation; initialLocalRotation = transform.localRotation; // 计算物体相对于相机的旋转 initialRelativeRotation = Quaternion.Inverse(initialCameraRotation) * transform.rotation; } private void Update() { } private Quaternion lastCameraRotation; [SerializeField] private float angleThreshold = 0.1f; // 角度阈值(度) private bool needsUpdate; // private void LateUpdate() private void LateUpdate() { if (!targetTransform) return; return; // Debug.LogError(targetTransform.rotation); // 计算物体应有的世界旋转 Quaternion targetWorldRotation = BaseCamera.Main.transform.rotation * initialRelativeRotation; // 转换为本地旋转(如果是子物体) transform.localRotation = Quaternion.Inverse(transform.parent.rotation) * targetWorldRotation; // // 使用Lerp平滑过渡 // transform.localRotation = Quaternion.Lerp(transform.localRotation, Quaternion.Euler(target.x, target.y, target.z), smoothSpeed * Time.deltaTime); // // targetTransform.localRotation = Quaternion.Euler(target.x, target.y, target.z); } }