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

2.5 背景移动

在太空射击游戏项目中,为模拟太空环境,在游戏界面中设置了太空背景,从上到下垂直向下缓慢移动。

2.5.1 单个背景移动

在图2-71中,在项目Project窗格中选择sprite对象,拖放到层次Hierarchy窗格中,并修改名称为 “background1”,然后拖放Stars图片到background1,调整background1的Scale参数:X=6, Y=6, Z=1;将background1的Position参数设置为:X=0, Y=0, Z=1。

图2-71 设置背景

此时太空背景消失了,不再显示在游戏Game界面中。在层次Hierarchy窗格中选择“Main Camera”对象,设置该摄像机的Position参数设置为:X=0, Y=1, Z=-8。

此时就会正常显示太空背景,并且太空背景在陨石、飞机和炮弹游戏对象(它们的Z=0)的后面。

在太空背景向下移动过程中,同样需要知道太空背景离开屏幕底部的边界参数,经过测试后发现,Y=-3.9。

对于C#开发者来说,在项目Project窗格中新建一个BackgroundController.cs文件,实现背景移动的代码,见代码2-17。

代码2-17 BackgroundController的C#代码

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

在上述C#代码中,第11行实现背景的向下移动;第13行代码判断背景是否超出屏幕底部,如果超出屏幕底部,则执行第14行代码,重新设置背景的起始位置,以便背景重新向下移动。

将上述代码拖放到background1对象之上,以便背景运行上述代码。

对于JavaScript开发者来说,在项目Project窗格中新建一个backgroundController.js文件,实现背景移动的代码,见代码2-18。

代码2-18 backgroundController的JavaScript代码

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

在上述JavaScript代码中,第5行实现背景的向下移动;第7行判断陨石移动是否超出Y轴的底部边界,如果超出底部屏幕,则执行第8行代码,重新设置陨石在屏幕上方的位置,以便背景重新向下移动。

将上述代码拖放到background1对象之上,以便背景运行上述代码。

运行游戏,此时会看到:太空背景可以循环向下移动,不过会出现空白的背景。

2.5.2 两个背景循环移动

为实现背景不断向下循环移动,需要再添加一个背景。

在图2-72中,在项目Project窗格中选择sprite对象,拖放到层次Hierarchy窗格中,并修改名称为“background2”,然后拖放Stars_large图片到background2,调整background2的Scale参数:X=6, Y=6;将background2的Position参数设置为:X=0, Y=6, Z=1。

图2-72 设置第二个背景

此时就会在游戏场景Scene窗格中,显示两个无缝连接的太空背景。

对于C#开发者来说,修改BackgroundController.cs文件之后,见代码2-19。

代码2-19 BackgroundController的C#代码

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

在上述C#代码中,与代码2-17相比较,只是修改了第14行代码。当背景超出屏幕底部时,需要重新设置背景的起始位置,该位置是在另外一张背景图片的上方,以便无缝连接,此时的初始位置Y应该设置为8。

将上述代码拖放到background2对象之上,以便背景运行上述代码。

对于JavaScript开发者来说,修改backgroundController.js文件之后,见代码2-20。

代码2-20 backgroundController的JavaScript代码

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

在上述JavaScript代码中,与代码2-18相比较,只是修改了第8行代码。当背景超出屏幕底部时,需要重新设置背景的起始位置,该位置是在另外一张背景图片的上方,以便无缝连接,此时的初始位置Y应该设置为8。

将上述代码拖放到background2对象之上,以便背景运行上述代码。

运行游戏,此时会看到:太空背景可以循环向下移动,不再出现空白的背景。