U3D摄像机视角
U3D的可以通过设置摄像机来实现第一人称,第三人称等不同游戏视角。
1第一人称视角
四元数转化成欧拉角 Vector3 v3=transform.rotation.eulerAngles;
欧拉角转换成四元数 Quaternion rotation = Quaternion.Euler(v3);
需要实现的效果:鼠标上下左右移动镜头跟着移动;人物移动和跳跃(这里我们人物移动使用的是CharacterController组件的Move和SimpleMove方法);
//player.cs 人物移动代码
//使用CharacterController组件控制人物移动,simpleMove和Move两种方法的区别是:Move需要自己定义重力,如下:
using UnityEngine;
using System.Collections;
/// <summary>
/// CharacterController控制移动
/// 1:SimpleMove(自动应用重力效果)
/// 2:Move(不会应用重力效果,需要自己去实现)
/// </summary>
public class PlayerMove : MonoBehaviour {
private CharacterController cc;//角色控制器,控制物体的移动
private float speed = 4.0f;//移动速度
private float gravity = 10.0f;//重力
private Vector3 moveDir = Vector3.zero;//移动方向
void Start ()
{
cc = this.GetComponent<CharacterController>();
}
void Update ()
{
//模拟重力效果
//一开始y方向速度为正,表示再上升即跳起来;当y为负时,开始下降,且下降速度越来越快
if (moveDir.y > -gravity)
{
moveDir.y -= gravity * Time.deltaTime;
print(moveDir);
}
cc.Move(moveDir * Time.deltaTime);//首先必須保證moveDir为负数,不能为0,只有是负数,才能算是isGrounded
if (cc.isGrounded)//在地上
{
if (Input.GetKeyDown(KeyCode.Space))//按空格起跳
{
moveDir.y = speed;
}
else
{
float h = Input.GetAxis("Horizontal")*speed;
float v = Input.GetAxis("Vertical")*speed;
Vector3 dir = new Vector3(h, 0, v);//水平面方向的移动
dir *= speed;
if (Input.GetKey(KeyCode.LeftShift))
{
dir *= 2;
}
//cc.SimpleMove(transform.TransformDirection(dir));//不需要乘以deltaTime,把当前方向转换到世界空间中
cc.Move(transform.TransformDirection(dir) * Time.deltaTime);//需要乘以deltaTime
}
}
else {
//在空中的运动状态控制
if (Input.GetKey("w"))
{
Vector3 zDir