实验题传送门: 实验题
1.解释游戏对象(GameObjects)和资源(Assets)的区别与联系
游戏对象:指的是一个能够容纳实现实际功能的组件。游戏中的每个对象都是一个游戏对象 (GameObject)。然而,游戏对象 (GameObjects) 本身不做任何事情。它们需要特殊属性 (special properties) 才能成为一个角色、一种环境或者一种特殊效果。
资源:指的是在游戏中可能用到的各种东西,比如模型、声音文件、贴图文件等等
联系:资源可以作为模板,实例化成具体的游戏对象,也可以作为游戏对象中的某种属性,同时也可以被多个游戏对象同时使用。
2.下载几个游戏案例,总结资源、对象组织的结构
该游戏资源的内容分为预制、脚本等等,按照文件的类型的不同,添加到不同的文件夹当中,便于后面的资源整理和利用
该游戏将游戏对象分为游戏的控制,环境的设置,玩家以及目标,符合游戏的各个必要的环节
3.编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
常用事件包括 OnGUI() OnDisable() OnEnable()
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class test : MonoBehaviour
{
// Start is called before the first frame update
void Start()
{
Debug.Log("Start");
}
void Awake(){
Debug.Log("Awake");
}
void FixedUpdate(){
// Debug.Log("Fix");
}
void LateUpdate(){
// Debug.Log("Late");
}
void OnGUI(){
//Debug.Log("GUI");
}
void OnDisable(){
Debug.Log("Dis");
}
void OnEnable(){
Debug.Log("Enable");
}
// Update is called once per frame
void Update()
{
// Debug.Log("Update");
}
}
awake:当一个脚本实例被载入时被调用
start:在所有update函数之前被调用一次
update:当行为启用时,其update在每一帧被调用
fixedupdate:当行为启用时,其fixedupdate在每一时间片被调用,受到Time.timeScale的影响,固定时间调用
lateupdate:所有update调用一轮完后调用
OnGUI:渲染和处理GUI事件时调用
OnEnable:当对象变为可用或激活状态时被调用
OnDisable:当对象变为不可用或非激活状态时被调用,例如运行时直接删除该对象
4.查找脚本手册,了解 GameObject,Transform,Component 对象
分别翻译官方对三个对象的描述(Description)
描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
本题目要求是把可视化图形编程界面与 Unity API 对应起来,当你在 Inspector 面板上每一个内容,应该知道对应 API。
例如:table 的对象是 GameObject,第一个选择框是 activeSelf 属性。
用 UML 图描述 三者的关系
1)翻译:
- GameObject:是Unity场景里面所有实体的基类.
- Transform:物体的位置、旋转和缩放。
- Component:一切附加到游戏物体的基类。
2)描述(图形由自行截图获得)
- 第一个选择框是activeSelf:可以定义对象的名称,动静态等属性
- 第二个选择框是Transform:可以定义对象的位置、面向方向、大小
- 第三个选择框是Mesh Fiter:可以定义对象的形状
- 第四个选择框是Box Collider:可以调整碰撞体的位置、大小、形状
- 第五个组件是Material:可以定义物体的材质
- 第六个选择框是Component:可以给对象增加行为、属性
3)UML图(由于属性过多,类图中只放部分属性)
5.资源预设与克隆
1)预设的好处:
预设可以提前将设计游戏中所需要的游戏对象进行设计打包,成为一个模板。在设计的过程中,随时可以直接从资源当中加载,成为一个游戏对象。例如:实验题中的棋子,如果临时设计就需要大量代码进行临时创建,而预设可以让程序直接提取对应资源。
2)预设与克隆关系
克隆是对已经存在的游戏对象,或者是资源当中的预设进行复制。克隆可以是对已经添加在视图当中的游戏对象进行复制,也可以是对资源当中,我们提前预设好的模板进行克隆。因此,预设一般来说是克隆的一个基础步骤,在预设之后,就可以在资源当中随心所欲地为自己想要的对象进行克隆了。
3)制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象
由于实验题中我已经实现预设实例化,在此直接挪用棋子实现的代码
ChessTable[i,j] = Instantiate(Resources.Load((i+j)%2==1?m1:m2), new Vector3(i, 0, j), Quaternion.identity) as GameObject;
ChessTable[i,j].transform.parent = this.transform;