Unity3D游戏开发之跑酷游戏项目讲解
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
今天主题就是《Unity3D游戏开发之跑酷游戏项目讲解》。
一、游戏策划
游戏采用2D界面,角色从左到右奔跑,在路段中随机生成障碍物和金币,玩家需要使
用跳跃功能躲开障碍物,在游戏中玩家收集的金币数目越多,奔跑的距离越长,玩家的得分就越高。我们最终实现的界面效果如图所示,首先我们来讲一下游戏的原理,我们这里这里采用的方法是路段固定,移动摄像机的方法。换句话说,当角色开始移动后,摄像机和场景跟随角色缓缓向右移动。当角色跑完每一个路段距离的2/3时,计算下一路段的位置,并在该位置生成一个新的路段,这样在游戏场景中可以产生无限远的路段,当某一路段离开摄像机视野时,立即将其销毁。于此同时,我们在每一个路段上随机产生障碍物和金币,然后对角色做碰撞检测即可。
二、角色控制
角色控制这里,我们只关注角色的状态,即角色是处于奔跑状态还是死亡状态。通过
这一状态,我们针对角色采取不同的处理方式。如果角色处于奔跑状态,则更新角色位置、摄像机位置、背景位置,否则角色将在被障碍物撞到以后倒地死亡。我们来一起看下面的脚本:
[csharp]view plaincopyprint?
ing UnityEngine;
ing System.Collections;
3.
4.public class Player : MonoBehaviour {
5.
6.//定义角色移动速度
7.public float mMoveSpeed=2.5F;
8.
9.//摄像机
10.private Transform mCamera;
11.//背景图片
12.private Transform mBackground;
13.
14.//角色是否在奔跑
15.private bool isRuning=true;
16.//场景中路段总数目
17.private int mCount=1;
18.
19.//路段预设
20.public GameObject CubeWay;
21.
22.//死亡动画播放次数
23.private int DeathCount=0;
24.
25.//收集的金币数目
26.private int mCoinCount=0;
27.public int CoinCount {
28.get {
29.return mCoinCount;
30. }
31. }
32.
33.//当前奔跑距离
34.private int mLength=0;
35.public int Length {
36.get {
37.return mLength;
38. }
39. }
40.
41.//当前得分
42.private int mGrade=0;
43.public int Grade {
44.get {
45.return mGrade;
46. }
47. }
48.
49.void Start ()
50. {
51.//获取相机
52. mCamera=Camera.main.transform;
53.//获取背景
54. mBackground=GameObject.Find("Background").transform;
55. }
56.
57.void Update ()
58. {
59.//如果角色处于奔跑状态则移动角色、相机和场景
60.if(isRuning)
61. {
62. Move();
63. CreateCubeWay();
64. Jump();
65. UpdateData();
66. }else
67. {
68. Death();
69. }
70. }
71.
72.///
73./// 更新玩家的游戏数据
74.///
75.private void UpdateData()
76. {
77.//计算奔跑距离
78. mLength=(int)((transform.position.x+25)*25);
79.//计算玩家得分
80. mGrade=(int)(mLength*0.8+mCoinCount*0.2);
81. }
82.
83.
84.///角色死亡
85.private void Death()
86. {
87.//为避免死亡动画在每一帧都更新,使用DeathCount限制其执行
88.if(DeathCount<=1)
89. {
90.//播放死亡动画
91. transform.animation.Play("Lose");
92.//次数+1
93. DeathCount+=1;
94.//保存当前记录
95.//PlayerPrefs.SetInt("这里填入一个唯一的值",Grade);
96. }
97. }
98.
99.private void Jump()
100. {
101.//这里不能使用刚体结构,所以使用手动方法实现跳跃
102.if(Input.GetKeyDown(KeyCode.Space) || Input.GetMouseButton(0)) 103. {
104.while(transform.position.y<=1)
105. {
106.float y=transform.position.y+0.02F;
107. transform.position=new Vector3(transform.position.x,y,trans form.position.z);
108. transform.animation.Play("Jump");
109. }
110. StartCoroutine("Wait");
111. }
112. }
113.
114. IEnumerator Wait()
115. {
116. yield return new WaitForSeconds(0.8F);
117.//角色落地继续奔跑