赞
踩
目录
在接下来的若干节中,我们通过搭建并逐步完善一个3D小demo《Roll a ball》初步掌握Unity3D中的场景构建等内容。
我们的目标是在unity的3D预设下搭建一个小游戏demo,游戏内容为控制小球从场景的起点滚动到终点。
在本节中,我们需要构建一个平台和一个小球,并使得小球能够根据键盘操作进行相应的移动。
-本节相关内容请读者参考:
-Scene 视图导航 - Unity 手册,《Scene视图导航》
-变换组件 - Unity 手册,《变换组件(Transform)》
新建一个3D预设的项目,如图所示:
可以看到,现在场景中的画面空空如也,只有一个摄像机(Main Camera)和一个光源(Directional Light)。Game选项卡里显示的即是通过摄像机看到的场景。
在场景中新建一个3D Object Plane(3D平面),鼠标在Hierarchy选项卡右击->3D Object->Plane。创建之后无法在画面中看见平面,是因为其厚度为无限小,在正视图中不可见。调整场景视图辅助图标
以使平面在场景中可视。
调整之后的界面如下所示,可以看到,虽然平面在场景中可视,却无法在游戏预览(Game)中可视。这是因为游戏主摄像机的角度与场景的角度不同(可以将场景视图比作上帝视角,游戏视图就是玩家视角,两者自然不是一个视角。游戏中的视角只取决于主摄像机的视角)。
选中Main Camera,可以看到有两条白线从其原点射出(其实是四条白线,代表一个四棱锥,为摄像机的视野)。用工具调整Main Camera的角度和位置,使平面整个出现在游戏视野内。
在场景中新建一个Sphere(球体),鼠标在Hierarchy选项卡右击->3D Object->Sphere。调整其位置,使得其正好停留在平面上,且居于平面中心。这种调整由于要求比较精细,并且调整过程中不能很好地使用肉眼校正,所以我们不使用视图工具,而是通过调整游戏对象的transform组件属性来调整其位置。
Transform组件一共有三个属性,它们的含义如下所示。分别查看球体与平面的transform,并将球体的position属性调整到与平面相同的水平。此时,由于球体与平面的中心点位置相同,球体表现为一半嵌入在平面中。根据其坐标轴,继续调整球体的位置(对应位置坐标轴+球体的Scale值/2,默认为0.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。
双击Project选项卡中出现的脚本文件,由于unity默认的脚本编辑器是VS,如果读者电脑中有VS,unity将会用VS打开脚本文件。默认脚本编辑器在Edit->Preferences->External Tools中修改,但是不建议有VS的读者修改,因为VS不需要额外设置就可以联合调试Unity脚本。
打开后的脚本如图所示,可以看到这是一个继承自MonoBehaviour的类,并且有两个空函数Start与Update。如同注释所言,Start函数在第一次启动时被调用,Update在游戏更新每一帧时调用。
改写脚本,如下,其中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符号取决于读者场景的摄像机和平面朝向
-
- }
-
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。