Unity3D游戏开发之跑酷游戏项目讲解

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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.//角色落地继续奔跑

相关文档
最新文档