今天我们来讲一讲Unity3D游戏引擎开发的入门第一课。我们将教大家开发一款简单的游戏——Roll-A-Ball。
游戏的内容很简单,通过键盘的“W”、“A”、“S”、“D”键或方向键来控制一个小球的移动,让小球去收集食物,每收集一个食物得分加一,当把所有的食物吃完后赢得胜利!
下面是这款游戏的最终效果:
(注:游戏开发平台:WIndows 10,开发工具:Unity 2017.2.0f3 (64-bit),测试平台:Windows 10)
一、创建游戏工程
双击打开桌面上的Unity图标,点击右上角的“New”新建一个Unity Project,填好项目名及选择路径,再点击“Create Project”按钮来创建项目。
在“Assets”目录下新建一个文件夹“Scenes”用来保存“场景”,创建方法是在“Project”窗口中的“Assets”目录下右键“Create”→“Folder”,并将其重命名为“Scenes”。
在键盘上使用快捷键“Ctrl+S”保存“场景”,填入场景名,点击“保存”
二、创建基本场地和小球
接下来我们将创建小球滚动的场地和一个小球。
2.1、创建场地
在“Hierarchy”窗口下右键“3D Object”→“Plane”,将其重命名为“Ground”,也就是“地面”的意思,然后在“Inspector”窗口下找到“Transform”组件,按照下图填入相应的数据
同样的,在“Hierarchy”窗口下右键“3D Object”→“Cube”,将其重命名为“Wall”,也就是“墙”的意思,然后在“Inspector”窗口下找到“Transform”组件,并按下图填入相应数据
选中“Hierarchy”窗口下面的“Wall”游戏物体,按三下快捷键“Ctrl+D”,这样就能复制出另外三个“墙”(整个场地的四面都要有墙)
选中“Wall (1)”,将其“Transform”组件的“Position”属性改为“X=10”;
选中“Wall (2)”,点击“Transform”组件最右边的“设置图标”,选择“Reset”,再将“Scale”改为“X=20”,将“Position”改为“Y=0.5,Z=-10”;
选中“Wall (3)”,点击“Transform”组件最右边的“设置图标”,选择“Reset”,并将“Scale”改为“X=20”,将“Position”改为“Y=0.5,Z=10”。
然后全选所有的“Wall”(从“Wall”到“Wall (3)”),并将它们拖放到“Ground”下面,此时效果如下图:
到这一步算是把整个基本的场地建完了,不过为了让效果好看一点,可以为其加上颜色。
在“Assets”下新建文件夹“Materials”,用来存放“材料”。随后定位到“Materials”文件夹下,在“Project”窗口下右键“Create”→“Material”创建材料并重命名为“Ground”,选中“Ground”并在右侧“Inspector”窗口下选取一个你喜欢的颜色,最后将材料“Ground”拖到“Hierarchy”窗口下的游戏物体“Ground”上应用此材料。
2.2、创建小球
接下来我们创建此游戏的主角小球,在“Hierarchy”窗口下右键“3D Object”→“Sphere”并将其重命名为“Player”,按下图在其“Transform”组件中填入相应的数据
三、控制小球的移动及相机跟随
3.1、小球的移动
想要控制小球移动,首先得为小球添加“Rigidbody”组件。步骤如下:首先选中“Player”,然后在右侧点击“Add Component”按钮,再在搜索框中输入“Rigidbody”,然后选择“Rigidbody”
随后在“Assets”目录下创建一个名为“Scripts”的文件夹,定位到此文件夹下,右键“Create”→“C# Script”,并将此脚本命名为“Player”,然后将其拖入游戏物体“Player”中
双击“Player”脚本,它会打开代码编辑器,将“Player.cs”文件的内容修改如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour {
private Rigidbody rb;
public int force = 5;
// Use this for initialization
void Start () {
// 获得小球的刚体组件(Rigidbody)
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
// 水平方向,按下“A”、“D”键或“←”、“→”键
float h = Input.GetAxis("Horizontal");
// 垂直方向,按下“W”、“S”键或“↑”、“↓”键
float v = Input.GetAxis("Vertical");
// 给小球施加力
rb.AddForce(new Vector3(h, 0, v) * force);
}
}
此时便可以通过键盘的方向键来控制小球的移动了,测试的方法是点击“运行图标“,当图标变蓝就会切换到”Game“窗口下运行游戏,结束运行的方式是再点击一下”运行图标“
3.2、相机的跟随
接下来我们将会设置相机的跟随,相机的视野也就是你玩游戏的视野
首先新建脚本”FollowTarget“,将其拖放到游戏物体”Main Camera“中,如下:
编写”FollowTarget.cs“,将内容修改如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class FollowTarget : MonoBehaviour {
public Transform playerTransform;
// 相对位移
private Vector3 offset;
// Use this for initialization
void Start () {
offset = transform.position - playerTransform.position;
}
// Update is called once per frame
void Update () {
transform.position = playerTransform.position + offset;
}
}
选中”Main Camera“,将”Follow Target (Script)“组件下的”Player Transform“属性修改为”Player“
修改方法是点击”Player Transform“属性右边的小图标,在弹出的窗口中选择”Player“
此时可以再次运行查看效果,可以发现游戏的视野会随着小球的移动而移动。
四、添加食物
下面我们为这个游戏添加一些食物,随后小球会收集(吃)这些食物。
第一步,在”Hierarchy“窗口下右键”3D Object“→”Cube“并将其重命名为”Pickup“。第二步按照下图在其”Transform“组件下填入相应数据,你也可以根据具体效果自行调整。第三步在”Materials“目录下新建材料并重命名为“Pickup”,选择一个自己喜欢的颜色。第四步将此材料拖入游戏物体“Pickup”中。
下一步我们要让食物变多。首先在“Assets”下新建文件夹“Prefabs”并定位到此文件夹下,将“Hierarchy”窗口下的游戏物体“Pickup”拖入到“Project”窗口中的“Prefabs”目录下。再选中“Pickup”游戏物体,按多次“Ctrl+D”,目的是为了得到足够多的食物,将食物分别放到合适的位置。最后在“Hierarchy”窗口下右键“Create Empty”并将其重命名为“Pickups”,再将所有的Pickup拖入到“Pickups”中,效果如下:
在“Scripts”目录下创建脚本“Pickup”,如下:
随后选择“Prefabs“目录下的”Pickup“,在”Inspector“窗口下点击”Add Component“按钮,搜索并选择”Pickup“
双击“Pickup.cs”文件,编辑其内容为:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Pickup : MonoBehaviour {
// Use this for initialization
void Start () {
}
// Update is called once per frame
void Update () {
transform.Rotate(new Vector3(0, 1, 0));
}
}
这段代码的目的是为了让”Pickup“食物绕Y轴旋转起来。
五、让小球收集食物
这一步我们将完成小球收集(吃)食物的功能。
选中”Pickup.prefab“,在”Inspector“窗口下选择”Tag“→”Add Tag...“
按如图所示的步骤依次点击”+“号,输入”Pickup“,再点击”Save“按钮保存此Tag
然后再次选中”Pickup.prefab“,将”Tag“修改为”Pickup“
这样可以给所有食物同样的标签,以便在小球接触某个物体时知道它是食物
然后别忘了将”Box Collider“组件下的”Is Trigger“属性给勾选上,因为我们要做的是触发检测
打开”Player“脚本文件,将其内容改为:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Player : MonoBehaviour {
private Rigidbody rb;
public int force = 5;
// Use this for initialization
void Start () {
// 获得小球的刚体组件(Rigidbody)
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
// 水平方向,按下“A”、“D”键或“←”、“→”键
float h = Input.GetAxis("Horizontal");
// 垂直方向,按下“W”、“S”键或“↑”、“↓”键
float v = Input.GetAxis("Vertical");
// 给小球施加力
rb.AddForce(new Vector3(h, 0, v) * force);
}
// 触发检测
void OnTriggerEnter(Collider other)
{
if (other.tag == "Pickup") {
Destroy(other.gameObject);
}
}
}
此时运行一下游戏,可以发现小球吃食物的功能已经完成了!
六、计分显示和游戏胜利提示
这一步我们将继续完善一下这款游戏,为其添加游戏计分功能和游戏胜利提示。
首先在”Hierarchy“窗口下右键”UI“→”Text“,然后切换到2D显示,修改”Text“组件的”Text“属性为0,这将用来显示分数
同样的再创建一个Text,将其重命名为”WinText“,它将用来显示胜利提示,并将”Text“组件的”Text“属性改为”You Win!“(你赢了的意思),还可以在”Color“中选择合适的颜色(比如绿色),最后还要取消勾选下图④号的位置,这样做是因为胜利提示默认不会显示,只有将食物全部吃完才会控制其显示。
双击”Player.cs“脚本文件进入代码编辑器,修改代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
public class Player : MonoBehaviour {
private Rigidbody rb;
public int force = 5;
private int score = 0;
public Text text;
public GameObject winText;
// Use this for initialization
void Start () {
// 获得小球的刚体组件(Rigidbody)
rb = GetComponent<Rigidbody>();
}
// Update is called once per frame
void Update () {
// 水平方向,按下“A”、“D”键或“←”、“→”键
float h = Input.GetAxis("Horizontal");
// 垂直方向,按下“W”、“S”键或“↑”、“↓”键
float v = Input.GetAxis("Vertical");
// 给小球施加力
rb.AddForce(new Vector3(h, 0, v) * force);
}
// 触发检测
void OnTriggerEnter(Collider other)
{
if (other.tag == "Pickup") {
score++;
text.text = score.ToString();
if (score == 12) {
winText.SetActive(true);
}
Destroy(other.gameObject);
}
}
}
再次运行游戏,可以发现游戏已经有计分功能和胜利提示了!
七、保存及游戏发布
在文章的最后我们一起来看一看如何发布游戏到目标平台。
首先使用快捷键”Ctrl+S“保存场景,在Unity的菜单栏中选择”File“→”Build Settings...“。在弹出的窗口点击”Add Open Scenes“按钮,选择要发布的场景,在”Target Platform“下选择目标平台,这里我选择的是”Windows“,在”Architecture“下选择架构,这里我选择”x86_64“代表64位,最后点击”Build“按钮就可以将游戏发布到目标平台了。
可以看出,Unity支持的平台有很多,比如:Windows、Mac、Xbox、iOS、Android等等
点击”Build“按钮后,它会要你选择保存路径和游戏名,依次填入完成后再点击”保存“按钮就大功告成了
最后生成了如下几项,点击exe文件(可执行文件)就可以运行你自己开发的游戏啦!
--END
