开发过程中经常用到射线转动的功能, 比如做一个射击类游戏,你需要上下转动和左右转动你的视角.
void ControllerMove()
{
float ry = Input.GetAxis("Mouse X");
float rx = -Input.GetAxis("Mouse Y");
camRot.x += rx;
camRot.y += ry;
// camRot.x = rx;
// camRot.y = ry;
camRot.z = 0;
cameraTransf.eulerAngles = camRot;
//cameraTransf.Rotate(Vector3.up * ry);
//cameraTransf.Rotate(Vector3.right * rx);
//cameraTransf.Rotate(camRot);//这是按某个轴旋转,而不是将三个轴向分别旋转对应角度.如果输入(10,20,0),代表按(10,20,0)这个轴去旋转,而不是 X轴旋转10度,Y轴旋转20度
//主角旋转
Vector3 rolerot = cameraTransf.eulerAngles;
rolerot.x = 0;
rolerot.z = 0;
transform.rotation = Quaternion.Euler(rolerot);
float mx = Input.GetAxis("Horizontal");
float mz = Input.GetAxis("Vertical");
Vector3 motion = Vector3.zero;
motion.x = mx * Time.deltaTime * speed;
motion.z = mz * Time.deltaTime * speed;
motion.y = -gravity * Time.deltaTime;
characterCrl.Move(transform.TransformDirection(motion));//本地坐标转换成世界坐标
// Debug.Log("motion:" + motion);
cameraTransf.position = transform.TransformPoint(0, rolehight, 0);
}
特别需要注意的是cameraTransf.Rotate()。是按照某一个轴向旋转,不是在对应坐标轴上分别旋转.如果不加以区分,就会得到很奇怪的效果哦,