Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸

Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸

C#游戏开发快速入门

4.7  游戏示例Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸

在Unity中编写脚本,读者可以自己编写方法,也可以使用Unity编写的方法。一般情况下,脚本代码中会用到很多Unity编写的方法。而自己编写方法,通常是为了减少代码的重复书写,或者将Unity的方法组织起来,实现新的功能。对于Unity编写的方法,不会使用的时候,读者一定要记得去帮助文档里查阅,查阅的步骤本章前面的部分已经说明了。

本节游戏示例编写的脚本中,完全使用Unity编写的方法,实现玩家通过键盘控制游戏对象上下左右移动的效果,具体的游戏制作过程如下Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸:

(1)为游戏场景添加两个游戏对象:Sphere和Directional light。前者就是本游戏要控制的游戏对象,后者负责游戏视图的光照效果。调节游戏视图中各对象的位置,使得Sphere对象位于Game视图的中央,如图4-12所示。

图4-12  在Scene和Game视图里,查看各游戏对象的相对位置,以及游戏视图的显示效果

(2)为游戏项目导入4个图片,它们将被用于在游戏视图里表示小球的运动方向,本游戏导入的4个图片如图4-13所示。

图4-13  为游戏项目导入的4个表示方向的图片Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸

提示:为游戏项目导入图片的方法是:直接拖动。即将图片直接拖动到Unity的Project视图里即可。

(3)在Project视图里,新建一个脚本,并命名为MyScript,打开此脚本,并添加下面的代码:

01     using UnityEngine;

02     using System.Collections;

03

04     public class MyScript : MonoBehaviour

05     {

06              public Texture texUp,texDown,texLeft,texRight;

07              public GameObject mySphere;

08              public float sphereSpeed = 0.1f;                                             //决定小球的移动速度

09              private float horizontalNum,VerticalNum;

10

11              void Update()

12              {

13                        //检测是否按下了水平方向上的方向键

14                       horizontalNum = Input.GetAxis (“Horizontal”);

15                       mySphere.transform.Translate (horizontalNum*Vector3.right*sphereSpeed);

16                        //检测是否按下了垂直方向上的方向键

17                       VerticalNum = Input.GetAxis (“Vertical”);

18                       mySphere.transform.Translate (VerticalNum*Vector3.up*sphereSpeed);

19              }

20              void OnGUI()

21              {

22                       GUILayout.BeginHorizontal ();

23                        //绘制左箭头,或者右箭头Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸

24                       if(horizontalNum > 0)

25                                 GUILayout.Label (texRight,GUILayout.Width(100),GUILayout.Height (100));

26                       else if(horizontalNum < 0)

27                                 GUILayout.Label (texLeft,GUILayout.Width(100),GUILayout.Height (100));

28                        //绘制上箭头,或者下箭头

29                       if(VerticalNum > 0)

30                                 GUILayout.Label (texUp,GUILayout.Width(100),GUILayout.Height (100));

31                       else if(VerticalNum < 0)

32                                 GUILayout.Label (texDown,GUILayout.Width(100),GUILayout.Height (100));

33                       GUILayout.EndHorizontal ();

34              }

35     }

将此脚本赋予Main Camera对象,并在后者的Inspector视图里设置My Script组件下的属性,如图4-14所示Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸。

q  Tex Up:up;

q  Tex Down:down;

q  Tex Left:left;

q  Tex Right:right;

q  My Sphere:Sphere;

q  Sphere Speed:0.1;

图4-14  设置组件下各属性Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸

(4)脚本中使用的Unity方法,这里会做简要说明,如果读者对各方向的详细使用说明感兴趣,可以自己查阅帮助文档。

q  14、17行使用了Input.GetAxis ()方法,用于检测玩家是否按下了键盘上的左,或者右方向键;为方法传入的参数是Horizontal和Vertical,它们是Unity默认定义的输入按键,读者可以在Unity里单击Edit|project Settings|Input命令,然后在弹出的InputManager对话框中看到它们,如图4-15所示。

图4-15  InputManager对话框

q  15、18行使用了游戏对象的transform.Translate ()方法,用于修改球体对象Transform组件下的Position属性,所以游戏场景中球体对象的位置就发生了改变;

q  20行的OnGUI()方法,用于在游戏视图上绘制各种图形,或者控件,这些图形和控件并不存在于游戏场景中。如果非要说出位置的话,作者觉得说它们存在于屏幕上更合适些;

q  22、33行的方法GUILayout.BeginHorizontal ()和GUILayout.EndHorizontal ()会迫使图形和控件,在水平方向上,一个挨着一个的绘制;

q  25、27、30和32行使用了GUILayout.Label ()方法,作用是在屏幕上绘制标签(Label)控件;

(5)运行游戏,小球处于视图的中央,按下键盘上的方向键,小球就会朝着指定的方向移动,并且游戏视图的左上角还使用图片显示着小球的移动方向,并且图片的显示与否,与玩家是否按下了方向键有关。如果玩家都没有按下方向键,那么就不会有方向图片显示,游戏的运行效果如图4-16所示。

图4-16  处于静止状态和运动状态的小球,以及显示在游戏视图左上角的方向图片Unity游戏示例SphereDirectional lightGame视图C#游戏开发快速入门大学霸

Comments are closed.