unity中向量旋转后获得新向量

        记录一下unity中的一些学习:两点距离,向量夹角角度,向量旋转后的新向量

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class distanceTest : MonoBehaviour {
    public float distance;  //记录两点之间距离
    public Transform p11;   //点1
    public Transform p12;
    public Transform p21;
    public Transform p22;

    Vector3 vector1 = Vector3.zero; //向量1:P11到P12
    Vector3 vector2 = Vector3.zero;

    public float angle = 0.0f;  //记录向量之间的角度
    
    //v逆时针旋转α
    //x0 = K(x* cosα - y* sinα)
    //y0 = K(x* sinα + y* cosα)
    public float α;    //旋转角度
    Vector3 vectorNew = Vector3.zero;   //旋转后的新向量
    public Transform transObj = null;   //设置对象到新的位置
    float arcAngle = 0.0f;

    //说明:转换成二维的。y轴不变
    // Use this for initialization
    void Start () {
    }
	
	// Update is called once per frame
	void Update ()
    {
        //两点之间的距离
        distance = Vector3.Distance(p11.position, p12.position);

        //两个向量之间的角度
        vector1 = p12.position - p11.position;
        vector2 = p22.position - p21.position;
        angle = Vector3.Angle(vector1, vector2);    //0-180度

        //向量旋转一定角度(逆时针旋转)所得新向量
        //向量vector1旋转α度(0-360度)后新的向量, z代替y
        arcAngle = α * 3.14f / 180.0f; //角度换算成弧度
        vectorNew = new Vector3(vector1.x * Mathf.Cos(arcAngle) - vector1.z * Mathf.Sin(arcAngle),
                        0,
                        vector1.x * Mathf.Sin(arcAngle) + vector1.z * Mathf.Cos(arcAngle));

        transObj.position = vectorNew.normalized * 10.0f;   //将该对象的坐标设置成新向量乘10的位置
    }
}

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 在 Unity 向量旋转 30 度的方法有很多, 你可以使用 Quaternion.Euler 函数或者 Matrix4x4.Rotate 函数来实现. 下面是示例代码: 1. 使用 Quaternion.Euler 函数: ``` Vector3 originalVector = new Vector3(1, 0, 0); Quaternion rotation = Quaternion.Euler(0, 30, 0); Vector3 rotatedVector = rotation * originalVector; ``` 2. 使用 Matrix4x4.Rotate 函数: ``` Vector3 originalVector = new Vector3(1, 0, 0); Matrix4x4 rotationMatrix = Matrix4x4.Rotate(Quaternion.Euler(0, 30, 0)); Vector3 rotatedVector = rotationMatrix.MultiplyVector(originalVector); ``` 在这两种方法, 第一种使用较为简单, 但第二种方法更加灵活, 可以对向量进行任意旋转. 你可以根据你的需要来选择使用哪种方法. ### 回答2: 在Unity,要将向量旋转30度,可以使用Quaterion.Euler()函数来实现。首先,我们需要将旋转角度转换为四元数(Quaternion),然后使用四元数将向量进行旋转。 具体操作如下: 1. 创建一个需要旋转向量,例如Vector3 v = new Vector3(1, 0, 0),这个向量表示x轴正方向的单位向量。 2. 将旋转角度转换为四元数,例如Quaternion rotation = Quaternion.Euler(0, 30, 0),这里我们以绕y轴旋转30度为例。 3. 使用四元数将向量进行旋转,例如Vector3 rotatedVector = rotation * v。 4. 最后,rotatedVector就是旋转后的结果,表示了向量v绕y轴旋转30度后的方向。 需要注意的是,Unity的角度单位为度数(degree),而不是弧度(radian)。函数Quaternion.Euler()的参数为欧拉角(Euler angles),其分别表示了绕x、y、z轴旋转的角度。在这个例子,我们只需要绕y轴旋转30度,所以将y轴旋转角设为30,而x、z轴旋转角均设为0。 通过以上步骤,我们就可以在Unity向量旋转30度了。 ### 回答3: 在Unity,要将一个向量旋转30度,可以使用Quaternion.Euler函数来实现。Quaternion是Unity表示旋转的一种数据类型。 首先,需要将待旋转向量转化为Quaternion。可以使用Quaternion.LookRotation函数将向量转化为Quaternion,将向量定义为目标旋转方向: Vector3 targetDirection = new Vector3(1, 0, 0); Quaternion targetRotation = Quaternion.LookRotation(targetDirection); 接下来,创建一个角度为30度的旋转Quaternion: float angle = 30f; Quaternion rotation = Quaternion.Euler(0f, angle, 0f); 然后,将待旋转向量旋转Quaternion相乘,得到旋转后的向量: Vector3 rotatedVector = rotation * targetRotation * Vector3.forward; 最后,将旋转后的向量应用到目标对象上: transform.rotation = Quaternion.LookRotation(rotatedVector); 这样,目标对象就会按照给定的向量旋转30度了。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值