U3D学习09-物体简单控制及视角观察

时间:2021-04-15 06:50:01
一、Character Control非刚体
1、场景初始化,注意调整CC的轴心,不需要碰撞,且删除CC子物体的碰撞。
2、移动:
       获取X,Z轴变化,定义变量h,v;
       定义移动的速度speed;
       定义跳跃的高度highjump;
       因为非刚体,所以需要自定义重力,gravity,通常大于highjump;
       定义CC的实体对象用于获取物体的CC组件;
       定义移动的三维向量moveDirection;
       定义用于落地判定的三维向量colextents;
3、视角观察与摄像机旋转:
       定义摄像机实体对象,用于获取摄像机物体;
       定义旋转速率:rspeed;
4、事件响应:
     移动和跳跃都是物理行为,在FixedUpdate事件中实现动作
     h,v获取键盘水平和垂直输入——判断是否着地(射线方法或者cc自带)——获取移动向量——判断是否在移动,是否在跳跃(水平或者垂直变量不为0,空格键输入)——三维移动向量乘以速度,三维向量的Y轴赋值highjump;
     调用CC的move方法,参数是三维移动向量乘帧速率(获得每秒移动速度)。
5、Unity的CC落地bug,
    使用自定义重力赋值三维向量的Y轴:moveDirect.y -= gravity * Time.deltaTime;
6、射线判断落地:
        Ray ray = new Ray(this.transform.position + Vector3.up * 2 * colExtents.x, Vector3.down);
        return Physics.SphereCast(ray, colExtents.x, colExtents.x + 0.2f);   
7、鼠标控制旋转是二维的
如何确定鼠标控制物体旋转的坐标系,可以参考unity Scene场景中鼠标右键移动,观察坐标系移动。
为什么transform.collider没有bounds?collision.collider有bounds属性?
8、旋转后,物体的前方与移动方向同步
Vector3 forward = transform.TransformDirection(Vector3.forward)
世界坐标系与自身坐标系的转换。