unity3d游戏开发之跑酷游戏项目讲解_第1页
unity3d游戏开发之跑酷游戏项目讲解_第2页
unity3d游戏开发之跑酷游戏项目讲解_第3页
unity3d游戏开发之跑酷游戏项目讲解_第4页
unity3d游戏开发之跑酷游戏项目讲解_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

今天主题就是Unity3D 游戏开发之跑酷游戏项目讲解。 一、游戏策划 游戏采用 2D 界面,角色从左到右奔跑,在路段中随机生成障碍物和金币,玩家需要使 用跳跃功能躲开障碍物,在游戏中玩家收集的金币数目越多,奔跑的距离越长,玩家的得 分就越高。我们最终实现的界面效果如图所示,首先我们来讲一下游戏的原理,我们这里 这里采用的方法是路段固定,移动摄像机的方法。换句话说,当角色开始移动后,摄像机 和场景跟随角色缓缓向右移动。当角色跑完每一个路段距离的 2/3 时,计算下一路段的位 置,并在该位置生成一个新的路段,这样在游戏场景中可以产生无限远的路段,当某一路 段离开摄像机视野时,立即将其销毁。于此同时,我们在每一个路段上随机产生障碍物和 金币,然后对角色做碰撞检测即可。 二、角色控制 角色控制这里,我们只关注角色的状态,即角色是处于奔跑状态还是死亡状态。通过 这一状态,我们针对角色采取不同的处理方式。如果角色处于奔跑状态,则更新角色位置、 摄像机位置、背景位置,否则角色将在被障碍物撞到以后倒地死亡。我们来一起看下面的 脚本: csharp view plaincopyprint? 1. using UnityEngine; 2. using 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; 骑士团 Unity3D 系列教程培训 群号:193521697 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(DeathCount0.125F) 119. 120. float y=transform.position.y-0.02F; 121. transform.position=new Vector3(transform.position.x,y,transform.p osition.z); 122. transform.animation.Play(“Run“); 骑士团 Unity3D 系列教程培训 群号:193521697 123. 124. 125. 126. /移动角色、相机和场景 127. private void Move() 128. 129. /让角色从左到右开始奔跑 130. transform.Translate(Vector3.forward * mMoveSpeed * Time.deltaTime); 131. /移动摄像机 132. mCamera.Translate(Vector3.right * mMoveSpeed * Time.deltaTime); 133. /移动背景 134. mBackground.Translate(Vector3.left * mMoveSpeed * Time.deltaTime); 135. 136. 137. /创建新的路段 138. private void CreateCubeWay() 139. 140. /当角色跑完一个路段的的 2/3 时,创建新的路段 141. /用角色跑过的总距离计算前面 n-1 个路段的距离即为在第 n 个路段上跑过的距离 142. if(transform.position.x+30-(mCount-1)*50 =50*2/3) 143. 144. /克隆路段 145. /这里从第一个路段的位置开始计算新路段的距离 146. GameObject mObject=(GameObject)Instantiate(CubeWay,new Vector3( -5F+mCount * 50F,0F,-2F),Quaternion.identity); 147. mObject.transform.localScale=new Vector3(50F,0.25F,1F); 148. /路段数加 1 149. mCount+=1; 150. 151. 152. 153. void OnTriggerEnter(Collider mCollider) 154. 155. /如果碰到的是金币,则金币消失,金币数目加 1; 156. if(mCollider.gameObject.tag=“Coin“) 157. 158. Destroy(mCollider.gameObject); 159. mCoinCount+=1; 160. 161. /如果碰到的是障碍物,则游戏结束 162. else if(mCollider.gameObject.tag=“Rock“) 163. 164. isRuning=false; 165. 166. 167. 在这里我们需要关注下面的内容: 1、Update()方法及 Move()、Jump() 、CreateCubeWay()、Death()方法,因为这是角 色在奔跑过程中的核心控制方法。 2、CreateCubeWay() 方法的作用是在玩家跑完每一个路段的 2/3 时,在指定的位置生 成新的路段。假设当前场景中共有 n 个路段,玩家在每一个路段上奔跑的距离=用玩家从 起点到当前位置的长度-前面 n-1 个路段的距离。通过这种方法我们可以判断玩家在每一个 路段上的相对位置。在确定了这个位置后,我们将其与路段长度的 2/3 比较,如果大于或 者等于这个距离,则生成新的路段,且第 n+1 个路段的位置等于第一个路段的位置+n 个 路段的总长度。由此,我们就实现了在指定的位置生成新的路段,使场景中源源不断的生 成新的路段。 3、玩家收集金币和障碍物的碰撞检测都是在 OnTrigger 方法中实现的,我们使用了一 个 bool 类型的标识变量 isRuning 来表示角色的状态,此状态直接影响 Update()方法的执 行,大家可以从代码中自己去寻找。 4、这里角色的跳跃是通过脚本模拟出来的,因为这里使用刚体似乎不能实现如果想实 现的那种效果,大家可以参考 Jump()方法。 三、场景布设 这里我们 2D 平面作为游戏的背景,使用 NGUI 来显示界面文字内容。在 Unity3D 场景 中使用 NGUI 需要相机和 Anchor 设置为同一层级,并设置相机的景深,这样两个相机系 统都能工作了。路段 CubeWay 是一个预设体 Cube,负责在 CubeWay 上生成金币和障碍 物,该对象关联在 Player 脚本上。玩家角色是一个 3D 的人物模型,最终场景布设效果如 图所示: 骑士团 Unity3D 系列教程培训 群号:193521697 更多精彩请到 / 四、预设定义 在这个游戏中需要重用的对象有路段 CubeWay、金币 Coin、障碍物 Rock,我们分别来 看他们的脚本: csharp view plaincopyprint? 1. using UnityEngine; 2. using System.Collections; 3. 4. public class CubeWay : MonoBehaviour 5. 6. /在道路上显示的金币、障碍物 7. public GameObject mObjects; 8. 9. 10. void Start () 11. 12. 13. /在每段路段上随机产生 20 到 50 个物品 14. int mCount=Random.Range(20,50); 15. for(int i=0;i().text=“金币 : “ +

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论