首页 > 代码库 > unity学习--005:模仿几种游戏操作方式的实现
unity学习--005:模仿几种游戏操作方式的实现
结合前面的 角色控制和镜头控制 在这里实现几种综合的操作方式
1. CF类的 第一视角控制方式
此类操控方式将摄像机绑定猪脚头部模拟第一视角
移动方式以unity自带的CharacterController.Move()方法为基础进行改进。
首先给角色判定一个Camera和下面的C#脚本
public float speed = 3.0F;
public float rotateSpeed = 3.0F;
void Update() {
CharacterController controller = GetComponent<CharacterController>();
transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0);
Vector3 forward = transform.TransformDirection(Vector3.forward);
float curSpeed = speed * Input.GetAxis("Vertical");
controller.SimpleMove(forward * curSpeed); }
测试他的移动时我会以第三视角观察,点击Main Camera上的便可随时切换了
自带的移动脚本效果不错,能走能跳,视角也符合常情
下面改动脚本,让镜头和猪脚随着鼠标转动角度, 猪脚和镜头的Y周都可以转动,镜头只可以转动X轴的部分角度
在猪脚的移动脚本中的UPDATE方法中添加 transform.Rotate(new Vector3(0,Input.GetAxis("Mouse X"),0));便是改动猪脚的Y轴的角度
在Awake中添加鼠标消失的代码 void Awake(){Screen.showCursor = false; } 这里在开发时要注意 鼠标一开始是不消失的,只有点击一下才消失
这是因为开发初始鼠标没有定位游戏窗口,系统是显示的,当点击窗口时进入作用域中才会消失。
下面是修改以后的角色移动脚本
public float speed = 10.0F; //使鼠标消失 void Awake() { Screen.showCursor = false; } void Update() { CharacterController controller = GetComponent<CharacterController>(); //角色转向 //transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0); //设置移动方向X和Z Vector3 moveDirection = transform.TransformDirection(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"))); //简单移动 transform.Rotate(new Vector3(0, Input.GetAxis("Mouse X"), 0)); controller.SimpleMove(moveDirection * speed); }
然后给镜头添加旋转角度脚本。
由于镜头的y轴随着猪脚的转动而改变(MOve方法就不会) 所以我们在Camera中只要修改X轴即可
void Update () {transform.Rotate(-Input.GetAxis("Mouse Y"), 0, 0);}
这里只是简单的介绍了Rotate角度问题,这里的角度要做好问题很多,这里的角度问题就不深究了
这样只要在屏幕上合适的地方添加准星便是类似CF与CS的角色控制器了。这里也可以将镜头的这点代码放进Move脚本中,并设定角度限制
系数等问题都是测试得来的合适系数。
public float speed = 10.0F; Transform cameraFirst; //使鼠标消失 void Awake() { Screen.showCursor = false; cameraFirst = GameObject.Find("Camera").transform; } void Update() { CharacterController controller = GetComponent<CharacterController>(); //角色转向 //transform.Rotate(0, Input.GetAxis("Horizontal") * rotateSpeed, 0); //设置移动方向X和Z Vector3 moveDirection = transform.TransformDirection(new Vector3(Input.GetAxis("Horizontal"), 0, Input.GetAxis("Vertical"))); //移动Camera 角度 if (cameraFirst.rotation.x - Input.GetAxis("Mouse Y")*0.3 <= 0.5 && cameraFirst.rotation.x - Input.GetAxis("Mouse Y")*0.3 >= -0.71) { cameraFirst.Rotate(-Input.GetAxis("Mouse Y"), 0, 0); } //移动角色角度 transform.Rotate(new Vector3(0, Input.GetAxis("Mouse X"), 0)); //简单移动 controller.SimpleMove(moveDirection * speed); }
这样就简单的实现了下第一视角
2. 魔兽世界类型操控,通过第三视角的Camera 结合 键盘操控WASD与鼠标点击目标位置实现
3. DOTA,lol模式操控,通过固定角度的Camera 与鼠标临界推动屏幕移动 ,角色移动通过鼠标点击目标点实现。
4. 移动端通过手指划屏来模拟移动场景
unity学习--005:模仿几种游戏操作方式的实现