美文网首页
vector3 人物移动相关

vector3 人物移动相关

作者: 李偌闲 | 来源:发表于2019-10-21 17:41 被阅读0次

    最近在适应新项目,研究人物移动的相关内容,遇到的一些原来不是很熟悉的点。这里记录一下。
    先 记录一下 pitch, yaw 和roll的图示
    pitch 是围绕X轴旋转,也叫俯仰角
    yaw 是围绕Y轴旋转,也叫偏航角
    roll 是围绕z轴旋转,也叫翻滚角


    image 坐标系

    几个用到的vector函数

    Vector3.Angle 求两个向量之间的夹角 返回一个float类型的数
    Vector3.Dot(Vector3 lhs, Vector3 rhs); 返回-1~1 当两个向量夹角超过90度,就变成了负数,小于90度返回正数。
    Vector3.ProjectOnPlane(dir,Vector3.up) 将向量投影到一个平面上, dir 是表示要投影的向量, Vector3.up是表示要投影的平面的法线
    Vector2.SignedAngle(from,to) 在二维空间里 返回两个向量的角度,顺时针是正数,逆时针是负数。但是在Unity2018.4里有BUG,算出来正好是反的。

    Quaternion.Euler(Vec3) 这个是比较经典的 旋转函数, 欧拉角(vector3(x,y,z)) 转四元数, 通过转出来的值进行旋转,防止万向锁。 vec3 是一个欧拉角

    至于怎么让物体旋转起来

    var qr = Quaternion.Euler(Vec3);
    _entity.transform.rotation = Quaternion.Lerp(_entity.transform.rotation,qr,Time.deltaTime* RotationSpeed);
    // 物体缓动
    

    Time.deltaTime

    Unity官方给出的描述是:按照秒来计数,完成上一帧的时间(只读)。两帧之间的间隔。通常,使用这个函数来产生与游戏帧速率无关的效果。

    如果你加上或者减去一个值,那你很可能应该乘以Time.deltaTime。当你乘以它以后,你实质上的表达是:我想让这个物体以每秒钟10米的速度移动而不是每帧10米。

    个人理解 就是 在Update中移动靠帧率,但这个不稳定会抖。 在移动的时候 速度 和Time.deltaTime 相乘 就表示成 移动靠时间来驱动 下面的代码就表示成 每秒10个位置 不是每帧10个位置。至于到底怎么实现的那是Unity做的事情。

    void Update() {
            float translation = Time.deltaTime * 10;
            transform.Translate(0, 0, translation);
        }
    

    相关文章

      网友评论

          本文标题:vector3 人物移动相关

          本文链接:https://www.haomeiwen.com/subject/hdzbmctx.html