简答题
1.解释游戏对象(GameObjects) 和 资源(Assets)的区别与联系。
1)区别:游戏对象(GameObjects) 指的是游戏中一个可被选中的实体,可通过添加组件使其具有一定的特性;资源(Assets) 是我们自定义或下载的素材,比如图片、音频、视频、脚本文件、模型等。
2)联系:游戏对象是一些资源的集合体;资源可以作为模板创建游戏对象,游戏对象也可以作为资源保存
2.下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)。
在github上看了比较多的游戏设计,最终感觉有两个游戏较为典型:VR僵尸设计游戏(文件较大) 和跑酷游戏
由于第一个文件较大,仅以第二个游戏作为说明示例
其资源目录组织结构如下:
如果仔细观察两个游戏的工程目录,可知资源文件一般按照资源的媒体类型、用途或者所属游戏对象进行分类;游戏对象则是将某一类对象概括进一级目录(如枪,僵尸),再逐层将其细化直至为最小对象
3.编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件。
注:
- 基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
- 常用事件包括 OnGUI() OnDisable() OnEnable()
新建一个游戏对象Cube和脚本,在脚本文件中填入如下代码:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
void Awake() {
Debug.Log("Awake");
}
void Start() {
Debug.Log("Start");
}
void Update() {
Debug.Log("Update");
}
void FixedUpdate() {
Debug.Log("FixedUpdate");
}
void LateUpdate() {
Debug.Log("LateUpdate");
}
void OnGUI() {
Debug.Log("OnGUI");
}
void OnDisable() {
Debug.Log("OnDisable");
}
void OnEnable() {
Debug.Log("OnEnable");
}
}
挂载到Cube上运行结果如下:
在观察实验现象时可知,MonoBehaviour基本行为或事件触发皆满足如下条件:
Awake() : 当前控制脚本实例被装载的时候调用。一般用于初始化整个事例使用。
Start() : 当前控制脚本第一次执行Update之前调用。
Update() : 每帧都执行一次。
FixedUpdate() : 渲染帧执行,如果渲染效率底下FixedUpdate的调用次数就会下降。
LateUpdate() : 在每帧执行完毕调用。
OnEnable() : 当对象变为可用或激活状态时此函数被调用,不能用于协同程序。
OnDisable() : 当对象变为不可用或非激活状态时此函数被调用。
OnGUI() : 类似OnUpdate ,但是是在绘制GUI时候触发。
4.查找脚本手册,了解 GameObject,Transform,Component 对象。
- 分别翻译官方对三个对象的描述(Description)
GameObject: GameObjects are the fundamental objects in Unity that represent characters, props and scenery. They do not accomplish much in themselves but they act as containers for Components, which implement the real functionality.
游戏对象是 Unity 中表示游戏角色,道具和场景的基础单位。它们本身并不具有很多功能,但它们可以充当实现真正功能的组件的容器。
Transform: The Transform component determines the Position, Rotation, and Scale of each object in the scene. Every GameObject has a Transform.
转换组件决定了游戏场景中每个游戏对象的位置,旋转角度和规模(即大小)。每个游戏对象都有一个转换组件。
Component: Components are the nuts & bolts of objects and behaviors in a game. They are the functional pieces of every GameObject.
组件是游戏中对象和行为的螺母和螺栓,是每个游戏对象的功能性部件。
- 描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件。
注:本题目要求是把可视化图形编程界面与 Unity API 对应起来,当你在 Inspector 面板上每一个内容,应该知道对应 API。例如:table 的对象是 GameObject,第一个选择框是 activeSelf 属性。
作业网站并未找到图片,但在其他博客中找到了下面的图片:
table对象的属性:
- activeSelf(对象在本地是否为active)为active
- ObjectName(对象名)为table
- Tag(标签)为untagged
- Layer为default
- prefabs(预设,,分为选中,翻转和应用)
transform的属性:
- Position(中心坐标)为(0,0,0)
- Rotation(旋转角度)为(0,0,0)
- Scale(规模)为(1,1,1)
部件:
- Mesh Filter :说明对象 mesh 结构;
- Box Collider :说明盒结构
- Mesh Renderer:mesh 结构渲染器
- 用 UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)
5.资源预设(Prefabs)与 对象克隆 (clone)
- 预设(Prefabs)有什么好处?
预设(Prefabs) 使得对象和资源可以重复使用,并且当想要对相同的游戏对象进行相同的修改时,只需修改预设即可。
- 预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
预设比克隆更加方便。克隆要求游戏场景中已经有对象存在,而预设并不要求;
克隆出的对象各自的属性相互独立,不能同时更改;而是要预设创建出的对象会随着预设的更改而更改。
- 制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象
public GameObject table;
void Start () {
GameObject anotherTable = (GameObject)Instantiate(table.gameObject);
}