//target 为中心点 ,objPos为你要旋转的物体,angle为旋转角度
private Vector2 RotationWithTarget(Vector3 targetPos, Vector3 objPos, float angle)
{
float x1 = targetPos.x;
float z1 = targetPos.z;
float x2 = objPos.x;
float z2 = objPos.z;
Vector2 newPos = new Vector2();
newPos.x = x1 + (x2 - x1) * Mathf.Cos(angle * Mathf.PI / 180) - (z2 - z1) * Mathf.Sin(angle * Mathf.PI / 180);
newPos.y = z1 + (x2 - x1) * Mathf.Sin(angle * Mathf.PI / 180) + (z2 - z1) * Mathf.Cos(angle * Mathf.PI / 180);
return newPos;
}
要想角度保持不变的话就加上
objPos.rotation = Quaternion.Euler(new Vector3(0, objPos.rotation.eulerAngles.y - Angle, 0));
整体代码
using UnityEngine;
public class RotationTest : MonoBehaviour
{
[SerializeField]
private Transform targetPos;
[SerializeField]
private Transform objPos;
[SerializeField]
private float Angle;
void Start()
{
Vector2 pos = new Vector2();
pos = RotationWithTarget(targetPos.position, objPos.position, Angle);
objPos.position = new Vector3(pos.x, 0, pos.y);
objPos.rotation = Quaternion.Euler(new Vector3(0, objPos.rotation.eulerAngles.y - Angle, 0));
//objPos.LookAt(targetPos);
}
private Vector2 RotationWithTarget(Vector3 targetPos, Vector3 objPos, float angle)
{
float x1 = targetPos.x;
float z1 = targetPos.z;
float x2 = objPos.x;
float z2 = objPos.z;
Vector2 newPos = new Vector2();
newPos.x = x1 + (x2 - x1) * Mathf.Cos(angle * Mathf.PI / 180) - (z2 - z1) * Mathf.Sin(angle * Mathf.PI / 180);
newPos.y = z1 + (x2 - x1) * Mathf.Sin(angle * Mathf.PI / 180) + (z2 - z1) * Mathf.Cos(angle * Mathf.PI / 180);
return newPos;
}
}