万向锁的解决方案

说实话,目前还看得不太懂,是大神做的,先放在网上,等有空的时候进行翻阅,欧拉角万向锁的解决方案

using UnityEngine;


public static class Matrix4x4Utils
{
    public enum E_AXIS
    {
        E_AXIS_X,
        E_AXIS_Y,
        E_AXIS_Z,
    }
    //transform.position+increasePos

//在原有pos上增加一段pos
    static public void Matrix4x4Translate(this Transform transform, Vector3 increasePos)
    {
        Vector4 v = new Vector4(transform.position.x,
            transform.position.y,
            transform.position.z,
            1);


        Matrix4x4 matrix = Matrix4x4.identity;
        matrix.m03 = increasePos.x;
        matrix.m13 = increasePos.y;
        matrix.m23 = increasePos.z;


        v = matrix * v;


        transform.position = new Vector3(v.x, v.y, v.z);
    }
    //通过矩阵移动物体的Rotate
    public static void Matrix4x4Rotate(this Transform transform, Vector3 euler)
    {
        Matrix4x4 matrix = Matrix4x4Rotation(E_AXIS.E_AXIS_Y, euler.y) * Matrix4x4Rotation(E_AXIS.E_AXIS_X, euler.x) * Matrix4x4Rotation(E_AXIS.E_AXIS_Z, euler.z);
        Debug.LogError(matrix.ToString());
        transform.rotation = GetRotation(matrix);
    }
    //只是被旋转调用的方法
    static private Matrix4x4 Matrix4x4Rotation(E_AXIS axis, float angle)
    {
        Matrix4x4 matrix = Matrix4x4.identity;


        if (axis == E_AXIS.E_AXIS_X)
        {
            float rad = angle * Mathf.Deg2Rad;
            float sin = Mathf.Sin(rad);
            float cos = Mathf.Cos(rad);
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值