【Unity】 围绕一个物体旋转一定角度

文章介绍了如何在Unity游戏中使用C#编程实现一个功能,使对象在旋转时保持与特定目标的角度不变,通过`RotationWithTarget`函数计算新位置并更新对象的位置和旋转。
摘要由CSDN通过智能技术生成
	//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;
    }
}

在这里插入图片描述

在这里插入图片描述

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值