有你在真好 的个人博客
Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball
阅读:2362 添加日期:2021/3/27 23:23:04 原文链接:https://www.toutiao.com/item/6482654484500578830/

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

今天我们来讲一讲Unity3D游戏引擎开发的入门第一课。我们将教大家开发一款简单的游戏——Roll-A-Ball。

游戏的内容很简单,通过键盘的“W”、“A”、“S”、“D”键或方向键来控制一个小球的移动,让小球去收集食物,每收集一个食物得分加一,当把所有的食物吃完后赢得胜利!

下面是这款游戏的最终效果:

播放 暂停
进入全屏 退出全屏
00:00 00:00
重播 刷新试试

(注:游戏开发平台:WIndows 10,开发工具:Unity 2017.2.0f3 (64-bit),测试平台:Windows 10)

一、创建游戏工程

双击打开桌面上的Unity图标,点击右上角的“New”新建一个Unity Project,填好项目名及选择路径,再点击“Create Project”按钮来创建项目。

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

在“Assets”目录下新建一个文件夹“Scenes”用来保存“场景”,创建方法是在“Project”窗口中的“Assets”目录下右键“Create”→“Folder”,并将其重命名为“Scenes”。

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

在键盘上使用快捷键“Ctrl+S”保存“场景”,填入场景名,点击“保存”

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

二、创建基本场地和小球

接下来我们将创建小球滚动的场地和一个小球。

2.1、创建场地

在“Hierarchy”窗口下右键“3D Object”→“Plane”,将其重命名为“Ground”,也就是“地面”的意思,然后在“Inspector”窗口下找到“Transform”组件,按照下图填入相应的数据

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

同样的,在“Hierarchy”窗口下右键“3D Object”→“Cube”,将其重命名为“Wall”,也就是“墙”的意思,然后在“Inspector”窗口下找到“Transform”组件,并按下图填入相应数据

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

选中“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”下面,此时效果如下图:

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

到这一步算是把整个基本的场地建完了,不过为了让效果好看一点,可以为其加上颜色。

在“Assets”下新建文件夹“Materials”,用来存放“材料”。随后定位到“Materials”文件夹下,在“Project”窗口下右键“Create”→“Material”创建材料并重命名为“Ground”,选中“Ground”并在右侧“Inspector”窗口下选取一个你喜欢的颜色,最后将材料“Ground”拖到“Hierarchy”窗口下的游戏物体“Ground”上应用此材料。

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

2.2、创建小球

接下来我们创建此游戏的主角小球,在“Hierarchy”窗口下右键“3D Object”→“Sphere”并将其重命名为“Player”,按下图在其“Transform”组件中填入相应的数据

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

三、控制小球的移动及相机跟随

3.1、小球的移动

想要控制小球移动,首先得为小球添加“Rigidbody”组件。步骤如下:首先选中“Player”,然后在右侧点击“Add Component”按钮,再在搜索框中输入“Rigidbody”,然后选择“Rigidbody”

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

随后在“Assets”目录下创建一个名为“Scripts”的文件夹,定位到此文件夹下,右键“Create”→“C# Script”,并将此脚本命名为“Player”,然后将其拖入游戏物体“Player”中

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

双击“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“窗口下运行游戏,结束运行的方式是再点击一下”运行图标“

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

3.2、相机的跟随

接下来我们将会设置相机的跟随,相机的视野也就是你玩游戏的视野

首先新建脚本”FollowTarget“,将其拖放到游戏物体”Main Camera“中,如下:

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

编写”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“

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

修改方法是点击”Player Transform“属性右边的小图标,在弹出的窗口中选择”Player“

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

此时可以再次运行查看效果,可以发现游戏的视野会随着小球的移动而移动。

四、添加食物

下面我们为这个游戏添加一些食物,随后小球会收集(吃)这些食物。

第一步,在”Hierarchy“窗口下右键”3D Object“→”Cube“并将其重命名为”Pickup“。第二步按照下图在其”Transform“组件下填入相应数据,你也可以根据具体效果自行调整。第三步在”Materials“目录下新建材料并重命名为“Pickup”,选择一个自己喜欢的颜色。第四步将此材料拖入游戏物体“Pickup”中。

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

下一步我们要让食物变多。首先在“Assets”下新建文件夹“Prefabs”并定位到此文件夹下,将“Hierarchy”窗口下的游戏物体“Pickup”拖入到“Project”窗口中的“Prefabs”目录下。再选中“Pickup”游戏物体,按多次“Ctrl+D”,目的是为了得到足够多的食物,将食物分别放到合适的位置。最后在“Hierarchy”窗口下右键“Create Empty”并将其重命名为“Pickups”,再将所有的Pickup拖入到“Pickups”中,效果如下:

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

在“Scripts”目录下创建脚本“Pickup”,如下:

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

随后选择“Prefabs“目录下的”Pickup“,在”Inspector“窗口下点击”Add Component“按钮,搜索并选择”Pickup“

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

双击“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...“

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

按如图所示的步骤依次点击”+“号,输入”Pickup“,再点击”Save“按钮保存此Tag

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

然后再次选中”Pickup.prefab“,将”Tag“修改为”Pickup“

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

这样可以给所有食物同样的标签,以便在小球接触某个物体时知道它是食物

然后别忘了将”Box Collider“组件下的”Is Trigger“属性给勾选上,因为我们要做的是触发检测

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

打开”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,这将用来显示分数

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

同样的再创建一个Text,将其重命名为”WinText“,它将用来显示胜利提示,并将”Text“组件的”Text“属性改为”You Win!“(你赢了的意思),还可以在”Color“中选择合适的颜色(比如绿色),最后还要取消勾选下图④号的位置,这样做是因为胜利提示默认不会显示,只有将食物全部吃完才会控制其显示。

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

双击”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“按钮就可以将游戏发布到目标平台了。

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

可以看出,Unity支持的平台有很多,比如:Windows、Mac、Xbox、iOS、Android等等

点击”Build“按钮后,它会要你选择保存路径和游戏名,依次填入完成后再点击”保存“按钮就大功告成了

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

最后生成了如下几项,点击exe文件(可执行文件)就可以运行你自己开发的游戏啦!

Unity3D入门:手把手教你开发你的第一款游戏——Roll-a-Ball

--END

ICP备案号:苏ICP备14035786号-1 苏公网安备 32050502001014号