- 解释对象与资源的区别于联系,根据官方案例,分别总结资源和对象组织的规则/规律。
答: 联系:有些资源可作为模板,可实例化成游戏中具体的对象。
区别:对象一般直接出现在游戏的场景中,是资源整合的具体表现,是资源整合的具体表现;而资源是为对象服务而使用的,多个不同的对象可以享用共同的资源。
组织规律:对象一般是人物,物体。比如玩家、敌人、环境和摄像机等;而资源一般是可为对象服务的,比如材质、场景、声音、预设、贴图、脚本、动作等。
· 编写简单程序代码,逐一验证 MonoBehaviour 基本行为触发的条件。
答:
publicclassNewBehaviourScript : MonoBehaviour {
void Awake() {
Debug.Log(“Awakeinvoked!”);
}
void Start() {
Debug.Log(“Startinvoked!”);
}
void Update() {
Debug.Log(“Updateinvoked!”);
}
void OnGUI() {
Debug.Log(“OnGUIinvoked!”);
}
void FixedUpdate() {
Debug.Log(“FixedUpdateinvoked!”);
}
void LateUpdate() {
Debug.Log(“LateUpdateinvoked!”);
}
void Reset() {
Debug.Log(“Resetinvoked!”);
}
void OnDisable() {
Debug.Log(“OnDisableinvoked!”);
}
void OnDestroy() {
Debug.Log(“OnDestroyinvoked!”);
}
}
- 通过官方参考手册,查找 GameObject,Transform,Component 对象,简单解释三者之间的关系。(使用UMLet 画教程上图)
答:Component是组件,一个GameObject可以包含很多个不同的组件Component,而Component有着很多不同的功能属性,Transform就属于其中的一种。而且Transform是每一个GameObject都必有的Component。
- 整理官方和其他学习材料,介绍如何用程序(代码)管理一个场景的游戏对象树林。编写简单代码验证以下技术的实现:
o 查找对象
o 添加子对象
o 遍历对象树
o 清除所有子对象
答: 通过名字查找:
public GameObject.Find(“string testname”)
通过标签查找单个对象:
public GameObject.FindWithTag(“stringtagname”)
通过标签查找一组对象:
public GameObject.FindGameObjectWithTag(“stringtagname”)
添加子对象:
public GameObject.CreatePrimitive(PrimitiveType.name)
遍历对象树:
foreach(Transform child in transform) {
Debug.Log(child.gameObject.name);
}
清楚所有子对象:
foreach(Transform child in transform) {
Destroy(child.gameObject);
}
- 预设有什么好处?与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
答:预设就是把一个制作好了的游戏对象模板化,用于批量的套用工作,产生的对象和模板本质属性相同,但生产的位置和角度以及生成后的一些属性是允许发生变化的,游戏的场景中需要大量相同的实例就可以用预设实现。而且预设发生变化,由此预设产生的所有实例都会跟着变化。而对象克隆出来的实例不会随本体变化而变化。
- 解释组合模式。并编写验证程序,向组合对象中子对象 cast 消息, 验证组合模式的优点。
答:组合模式,将对象组合成树形结构以表示“部分-整体”的层次结构,组合模式使得用户对单个对象和组合对象的使用具有一致性。有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以像处理简单元素一样来处理复杂元素。
子类对象(my_obj)方法:
void TestFun() {
print("OK!");
}
父类对象(GameObject)方法:
void Start () {
this.BroadcastMessage("TestFun ");
}
结构:
GameObject
|----
my_obj
|----
my_obj
运行结果:
OK!
OK!