Unity 4.3游戏开发项目实战(C#、JavaScript版本)
上QQ阅读APP看书,第一时间看更新

2.4 陨石降落

在太空射击游戏项目中,陨石从游戏界面上方不断降落,需要飞机发射炮弹击落陨石,否则陨石砸中飞机多次之后,游戏将终止。

2.4.1 显示陨石

在项目Project窗格中,选择prefabs文件夹中的sprite对象,直接拖放该对象到层次Hierarchy窗格中,并将该对象的名称修改为rock,如图2-68所示。

图2-68 拖放sprite对象

为了在Unity3D中显示陨石,在图2-69中拖放Rock图片到层次Hierarchy窗格中的Rock对象之上,在检视器中设置Shader为“Transprent”→“Diffuse”,设置图片背景为透明化,然后设置Position参数:X=0, Y=1.5, Z=0; Scale参数:X=0.8, Y=0.8, Z=1。

图2-69 拖放Rock图片

这里需要说明的是,不要将图片Rock拖放到右下方的图片框中,这种操作是不正确的,大家自己可以测试、实验。

此时在游戏Game窗格中就会显示该炮弹对象,如图2-70所示。

图2-70 显示陨石

2.4.2 陨石降落

下面实现陨石的降落以及陨石的随机降落。

1.陨石降落

陨石降落的代码相对简单。

对于C#开发者来说,选择Script文件夹,在右键出现的快捷菜单中选择“Create”→“C# Script”命令,创建一个C#文件,该文件名称为RockController.cs。

RockController的C#代码,见代码2-13。

代码2-13 RockController的C#代码

1: using UnityEngine;
2: using System.Collections;
3:
4: public class RockController : MonoBehaviour
5: {
6:
7:   public float speed=2.0f;
8:
9:   void Update()
10:  {
11:     transform.Translate(0, -speed*Time.deltaTime,0);
12: }
13:}

在上述C#代码中,第11行代码在Y轴方向向下移动陨石,实现陨石降落。

对于JavaScript开发者来说,选择Script文件夹,在右键出现的快捷菜单中选择“Create”→“Javascript”命令,创建一个JavaScript文件,该文件为rockController.js。

rockController的JavaScript代码,见代码2-14。

代码2-14 rockController的JavaScript代码

1: var speed:float=2.0f;
2:
3: function Update()
4: {
5:   transform.Translate(0, -speed*Time.deltaTime,0);
6: }

在上述JavaScript代码中,第5行代码在Y轴方向向下移动陨石,实现陨石降落。

将上述代码拖放到项目Project窗格中的rock对象之上,使得rock对象可以运行陨石降落的代码。

在Unity3D中单击运行按钮,运行游戏,可以看到:陨石从上方降落到下方直到离开屏幕底部。

2.陨石随机降落

下面实现当陨石降落到屏幕下方,直到离开屏幕底部的时候,陨石会重新返回到屏幕的顶部,并且随机设置上方的左右位置。

为实现上述功能,同样需要知道陨石在屏幕左、右以及上方、底部的位置边界,经过实验,上方的Y=3.5,底部的Y=-2.0;左、右边界则分别为X=-2.1和X=2.1。

对于C#开发者来说,在RockController.cs中添加相关代码,见代码2-15。

代码2-15 RockController的C#代码

1: using UnityEngine;
2: using System.Collections;
3:
4: public class RockController : MonoBehaviour
5: {
6:
7:   public float speed=2.0f;
8:
9:   void Update()
10:  {
11:     transform.Translate(0, -speed*Time.deltaTime,0);
12:
13:    if(transform.position.y<-2.0f)
14:      transform.position=new Vector3(Random.Range(-2.1f,2.1f),3.5f,0);
15: }
16:}

在上述C#代码中,添加了第13行、第14行代码。第13行判断陨石移动是否超出Y轴的底部边界,如果超出底部屏幕,则执行第14行代码,重新设置陨石在屏幕上方的位置,其中左、右方向的X值,采用Random的Range()方法来随机设置,而Y则设置为3.5,从而实现陨石的不断降落。

对于JavaScript开发者来说,在rockController.js中添加相关代码,见代码2-16。

代码2-16 rockController的JavaScript代码

1: var speed:float=2.0f;
2:
3: function Update()
4: {
5:   transform.Translate(0, -speed*Time.deltaTime,0);
6:
7:   if(transform.position.y<-2.0f)
8:    transform.position=new Vector3(Random.Range(-2.1f,2.1f),3.5f,0);
9:
10: }

在上述JavaScript代码中,添加了第7行、第8行代码。第7行判断陨石移动是否超出Y轴的底部边界,如果超出底部屏幕,则执行第8行代码,重新设置陨石在屏幕上方的位置,其中左、右方向的X值,采用Random的Range()方法来随机设置,而Y则设置为3.5,从而实现陨石的不断降落。

单击运行按钮,运行游戏,此时可以看到:陨石每次都获得随机的左、右位置,不断从上方降落到下方直到离开屏幕底部。