前言

在接下来的若干节中,我们通过搭建并逐步完善一个3D小demo《Roll a ball》初步掌握Unity3D中的场景构建等内容。

项目需求

我们的目标是在unity的3D预设下搭建一个小游戏demo,游戏内容为控制小球从场景的起点滚动到终点。

在本节中,我们需要构建一个平台和一个小球,并使得小球能够根据键盘操作进行相应的移动。

场景搭建

-本节相关内容请读者参考:

-https://docs.unity.cn/cn/current/Manual/SceneViewNavigation.html,《Scene视图导航》

-https://docs.unity.cn/cn/current/Manual/class-Transform.html,《变换组件(Transform)》

新建一个3D预设的项目,如图所示:

unity游戏池使用教程(Unity游戏教程初步二)(1)

可以看到,现在场景中的画面空空如也,只有一个摄像机(Main Camera)和一个光源(Directional Light)。Game选项卡里显示的即是通过摄像机看到的场景。

在场景中新建一个3D Object Plane(3D平面),鼠标在Hierarchy选项卡右击->3D Object->Plane。创建之后无法在画面中看见平面,是因为其厚度为无限小,在正视图中不可见。调整场景视图辅助图标

unity游戏池使用教程(Unity游戏教程初步二)(2)

以使平面在场景中可视。

调整之后的界面如下所示,可以看到,虽然平面在场景中可视,却无法在游戏预览(Game)中可视。这是因为游戏主摄像机的角度与场景的角度不同(可以将场景视图比作上帝视角,游戏视图就是玩家视角,两者自然不是一个视角。游戏中的视角只取决于主摄像机的视角)。

unity游戏池使用教程(Unity游戏教程初步二)(3)

选中Main Camera,可以看到有两条白线从其原点射出(其实是四条白线,代表一个四棱锥,为摄像机的视野)。用工具调整Main Camera的角度和位置,使平面整个出现在游戏视野内。

unity游戏池使用教程(Unity游戏教程初步二)(4)

在场景中新建一个Sphere(球体),鼠标在Hierarchy选项卡右击->3D Object->Sphere。调整其位置,使得其正好停留在平面上,且居于平面中心。这种调整由于要求比较精细,并且调整过程中不能很好地使用肉眼校正,所以我们不使用视图工具,而是通过调整游戏对象的transform组件属性来调整其位置。

Transform组件一共有三个属性,它们的含义如下所示。分别查看球体与平面的transform,并将球体的position属性调整到与平面相同的水平。此时,由于球体与平面的中心点位置相同,球体表现为一半嵌入在平面中。根据其坐标轴,继续调整球体的位置(对应位置坐标轴 球体的Scale值/2,默认为0.5)。

unity游戏池使用教程(Unity游戏教程初步二)(5)

搭载脚本

-本节相关内容请读者参考:

-https://docs.unity.cn/cn/current/ScriptReference/MonoBehaviour.html,《MonoBehaviour》

-https://docs.unity.cn/cn/current/ScriptReference/Input.GetAxis.html,《Input.GetAxis》

为了使得球体能够响应键盘操作滚动,我们需要给球体附加一个Script(脚本)组件,并且编写搭载的C#脚本。

选中球体,点击Inspector选项卡最下面的Add Component按钮,为球体添加一个组件。添加组件后,unity会创建一个C#空脚本文件,并让你取一个名字。我们命名其为Sphere。

unity游戏池使用教程(Unity游戏教程初步二)(6)

双击Project选项卡中出现的脚本文件,由于unity默认的脚本编辑器是VS,如果读者电脑中有VS,unity将会用VS打开脚本文件。默认脚本编辑器在Edit->Preferences->External Tools中修改,但是不建议有VS的读者修改,因为VS不需要额外设置就可以联合调试Unity脚本。

unity游戏池使用教程(Unity游戏教程初步二)(7)

打开后的脚本如图所示,可以看到这是一个继承自MonoBehaviour的类,并且有两个空函数Start与Update。如同注释所言,Start函数在第一次启动时被调用,Update在游戏更新每一帧时调用。

unity游戏池使用教程(Unity游戏教程初步二)(8)

改写脚本,如下,其中Vector3是unity对于三维向量和点的类:

using System.Collections; using System.Collections.Generic; using UnityEngine; public class Sphere : MonoBehaviour { // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { float x=Input.GetAxis("Horizontal"); float y=Input.GetAxis("Vertical"); //获取键盘方向键的增量 transform.position=transform.position-new Vector3(x,0,y); //更新游戏对象的位置 //这里的xy符号取决于读者场景的摄像机和平面朝向 } }

点击按钮运行游戏,可以看到,小球可以在键盘操作下移动。

,