标签:
这个游戏小项目为第一人称射击游戏
大概分为几个步骤:
一:主角的制作
1.控制主角移动的实现
要点:
character Controller组件的理解
rigidbody组件的理解
colider与rigidbody的理解
用代码控制主角的移动——键盘交互的实现
//操作主角移动 //定义3个值控制移动 float xm = 0, ym = 0, zm = 0; //上下左右运动 if (Input.GetKey(KeyCode.W)) { zm += m_movSpeed * Time.deltaTime; } else if (Input.GetKey(KeyCode.S)) { zm -= m_movSpeed * Time.deltaTime; } if (Input.GetKey(KeyCode.A)) { xm -= m_movSpeed * Time.deltaTime; } else if(Input.GetKey(KeyCode.D)) { xm += m_movSpeed*Time.deltaTime; }
另外贴上player里面一些变量的定义,帮助定义
//Transform 组件 public Transform m_transform; //角色控制器组件 CharacterController m_ch; //角色移动速度 float m_movSpeed = 3.0f; //重力 float m_gravity = 2.0f; //生命值 public int m_life = 5;
在编辑器中为主角显示一个图标:因为之前实现主角的时候是通过一个GameObject->empty上添加character Controller来实现的,所以为了在编辑的时候方便一点,我们用一张图片在编辑器中代表主角,这张图片只能在编辑器中显示,代码如下:
void OnDrawGizmos() { Gizmos.DrawIcon(this.transform.postion,"spawn.tif"); }
2.绑定摄像机
先定义摄像机的属性
//摄像机Transform Transform m_camTransform; //摄像机旋转角度 Vector3 m_camRot; //摄像机高度(主角身高) float m_camHeight = 1.4f;
3.绑定
接下来就是摄像机位置与朝向和主角的绑定了
首先:start函数中摄像机位置与朝向的初始化
void Start(){ //获得摄像机的初始位置 m_camTransform=Camera.main.transform; //将摄像机的初始位置与主角初始位置一致 Vector3 pos=m_transform.postion; pos.y+=m_camHeight; m_camTransform.postion=pos; //将摄像机朝向与主角一致 m_camTransform.rotation=m_transform.rotation; m_camRot=m_camTransform.eulerAngles; //锁定光标
Screen.lockCursor=true;
}
另外,关于光标锁定,所谓光标锁定
这里有一个问题,就是Transform.rotation和eulerAngles问题,这里有些不懂,先留下,以后解决
接着,就是在update()函数中随时更新摄像机位置与朝向,使其与主角位置保持一致了
//获取鼠标移动距离 float rh = Input.GetAxis("Mouse X"); float rv = Input.GetAxis("Mouse Y"); //旋转摄像机 m_camRot.x -= rv; m_camRot.y += rh; m_camTransform.eulerAngles = m_camRot; //使主角的面向方向与摄像机一致 Vector3 camrot = m_camTransform.eulerAngles; camrot.x = 0; camrot.z = 0; m_transform.eulerAngles = camrot; //主角移动代码 //使摄像机位置与主角一致 Vector3 pos = m_transform.position; pos.y += m_camHeight; m_camTransform.position = pos;
标签:
原文地址:http://www.cnblogs.com/YTYMblog/p/5263430.html