59 lines
1.8 KiB
C#
59 lines
1.8 KiB
C#
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);
|
|
}
|
|
} |