[ARPG阶段二] 16.角色位移和旋转
实现玩家坐标系和相机坐标系的一致,来达到玩家随镜头方向移动、旋转的效果。
角色移动
相对相机的前方进行位移,玩家的移动实际上要沿着摄像机朝向移动。
//处理移动
Vector3 input = new Vector3(h, 0, v);
//获取相机的y旋转值
float y = Camera.main.transform.eulerAngles.y;
//让input也旋转y角度
//四元数和向量相乘:这个向量按照这个四元数进行旋转之后得到新的向量
Vector3 moveDir = Quaternion.Euler(0, y, 0) * input;
Vector3 motion = Time.deltaTime * player.WalkSpeed * moveDir;
motion.y = -9.8f;
characterController.Move(motion);
通过获取相机y轴,并将移动值按照相机的y偏移量进行旋转,就使得以玩家自身坐标为参考的移动量转换为和相机参考系一致的移动量,举个例子沿当前玩家朝向1m转化为沿相机方向1m,当然玩家的朝向也会旋转更新。
角色旋转
相对移动的方向进行旋转,玩家的朝向要和摄像机的朝向一致。
//处理旋转
player.ModelTransform.rotation = Quaternion.Slerp(player.ModelTransform.rotation, Quaternion.LookRotation(moveDir), Time.deltaTime * player.RotateSpeed);
让玩家的rotation和相机的rotation一致即可。
效果:
Unity独立游戏开发-ARPG 文章被收录于专栏
Unity独立游戏开发