1. 解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。
- 游戏对象(GameObjects):游戏对象是指出现在游戏界面或游戏场景中的物体,是通过资源整合的整体。游戏对象一般需要通过不同的脚本来构成游戏中的组件。
- 资源(Assets):资源是游戏对象的特定的属性,例如颜色等。游戏对象可以通过使用资源来实现需要的要求。
2. 下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
- 资源的目录组织结构:一般包括动画(Animations),音效(Audio),材质(Materials),脚本(Scripts)等。
- 游戏对象树的层次结构:一般为主摄像机,光源,游戏开始位置,游戏对象等。
3. 编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
-
基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
-
常用事件包括 OnGUI() OnDisable() OnEnable()
public class Question3 : MonoBehaviour
{
void Awake()
{
Debug.Log("Game awake");
}
void Start()
{
Debug.Log("Game start");
}
void Update()
{
Debug.Log("Game update");
}
void FixedUpdate()
{
Debug.Log("Game FixedUpdate");
}
void LateUpdate()
{
Debug.Log("Game LateUpdate");
}
void OnGUI()
{
Debug.Log("Game OnGUI");
}
void OnDisable()
{
Debug.Log("Game OnDisable");
}
void OnEnable()
{
Debug.Log("Game OnEnable");
}
}
4. 查找脚本手册,了解 GameObject,Transform,Component 对象
-
分别翻译官方对三个对象的描述(Description)
-
GameObject: Base class for all entities in Unity Scenes.
游戏对象:是在Unity场景中所有元素的基类。 -
Transform: Position, rotation and scale of an object.
变换:一个对象的位置,角度以及缩放。 -
Component:Base class for everything attached to GameObjects.
组件:所有和游戏对象有关的东西的基类。 -
描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
- 本题目要求是把可视化图形编程界面与 Unity API 对应起来,当你在 Inspector 面板上每一个内容,应该知道对应 API。
- 例如:table 的对象是 GameObject,第一个选择框是 activeSelf 属性。
Table对象有以下属性:Transform, Cube, Mesh Renderer,Box Collider等属性。
Table 的Transform属性包括:Position(位置),Rotation(角度),Scale(缩放)。
Table的部件有Mesh Renderer,Box Collider等属性。
-
用 UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)
5. 整理相关学习资料,编写简单代码验证以下技术的实现: -
查找对象
-
添加子对象
-
遍历对象树
-
清除所有子对象
//查找对象
void FindObject()
{
var ToFind = GameObject.Find("To_Find");
if (null != ToFind) Debug.Log("Find");
ToFind = GameObject.Find("/To_Find");
if (null != ToFind) Debug.Log("Find");
}
//添加子对象
void InitObject()
{
GameObject ToAdd = GameObject.CreatePrimitive(PrimitiveType.Sphere);
ToAdd.transform.position = new Vector3(0, 0, 0);
ToAdd.transform.parent = this.transform;
}
//遍历对象树
void TraverseObjectTree()
{
GameObject[] game = GameObject.FindObjectOfType<GameObject>();
foreach(GameObject tmp in game)
{
Debug.Log(tmp.name);
}
}
//清除所有子对象
void DeleteAllSubObject()
{
GameObject[] game = GameObject.FindObjectOfType<GameObject>();
foreach (GameObject tmp in game) GameObject.Destroy(tmp);
}
6. 资源预设(Prefabs)与 对象克隆 (clone)
- 预设(Prefabs)有什么好处?
预设可以使得资源可以重复利用。
相同或相似的游戏对象可以用同样的预设来创建。
在修改预设的时候,所有的使用该预设的对象都会转变 - 预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
预设不随游戏场景中的游戏对象变化,但是修改一个预设时,所有的游戏对象都会被修改。
对象克隆出来的对象不会随克隆体的修改而修改。 - 制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象
-
GameObject prefab = (GameObject)Instantiate (prefab1);