vector3 人物移动相关

最近在适应新项目,研究人物移动的相关内容,遇到的一些原来不是很熟悉的点。这里记录一下。
先 记录一下 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);
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • OpenGL本身没有摄像机的概念,但我们可以通过把场景中的所有物体往相反方向移动的方式来模拟出摄像机,这样感觉就像...
    IceMJ阅读 2,566评论 0 7
  • 表示3D的向量和点。 这个结构用于在Unity传递3D位置和方向。它也包含做些普通向量运算的函数。 除了下面列出的...
    向前ing_阅读 5,708评论 0 4
  • 物体移动:http://www.manew.com/thread-114623-1-1.html 一、Transf...
    苏黎九歌阅读 5,765评论 0 6
  • 任何游戏对象在创建的时候都会附带Transform组件,用于储存并操控物体的位置、旋转和缩放。 并且该组件是无法删...
    沉麟阅读 9,308评论 0 2
  • 最近在学习OpenGL,把学习的一些过程写在这里,希望与大家共同分享讨论。欢迎光临我的个人网站Orient一起讨论...
    Orient_ZY阅读 2,049评论 0 5