1.解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。
- 对象(GameObjects):对象直接出现在游戏场景中,是资源整合的具体表现,对象一般有玩家,敌人,游戏场景,摄像机等虚拟父类,这些父类没有实例化,而他们的子类实例化并包含了这些游戏对象,我们可以对这些对象进行操作
- 资源(Assets):资源可以是我们自定义或下载下来的素材,可以被多个对象使用,有些资源可以做为模板并实例化为对象。资源文件夹(Asset)通常包含脚本,预设,场景,声音等。
2. 下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
资源的目录组织结构:
Assets- Editor 自写的灵活方便插件
- Editor_NGUI 较大型三方的插件(前面加上Editor是为了让所有编辑器都集中在一块)
- Editor_WaypointTool 较大型三方的插件
- Gizmos 使用GIZMOS所需要的标志等临时文件
- StreamingAssets (包括JsonData目录/Assetbundle目录/各种只读文件预储存目录,这个目录将自动打包到导出程序,用Application.streamingAssetsPath读取)
- Models 模型文件,其中会包括自动生成的材质球文件
- Others 其他类型的文件(一般作为不常修改的文件类型,例如添加的Shader、物理材质、动画文件。)若认为是比较常用的话,可以提取成一个文件夹。
- Plugins 主要是DLL的外部插件文件,例如JsonFx、SmartFoxClient等
Prefabs 预储存文件 - Resources 动态加载的资源文件,一般这里只用少量,多的话,需要自己打ASSETBUNDLE包,有选择性的动态加载
- Scenes 场景文件
- Scripts 脚本代码文件
- Sounds 音效文件
- Textures 所有的贴图
- Z_Test 临时测试文件,加Z是让它放到最下面。放到一起的好处是删除的时候可以任意直接删掉,不会影响其他部分的东西。
游戏对象树的层次结构:
每个游戏对象由多个组件(component)组成
3。编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test : MonoBehaviour {
void Awake () {
Debug.Log ("Awake");
}
// Use this for initialization
void Start () {
Debug.Log ("Start");
}
// Update is called once per frame
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");
}
}
4.查找脚本手册,了解 GameObject,Transform,Component 对象
分别翻译官方对三个对象的描述(Description)
1.GameObjects是Unity中代表角色,道具和风景的基本对象。它们本身并不是很完整,但它们充当组件的容器实现了具体的功能。
2.Transform变换组件决定了每个对象在场景中的位置,比例和旋转,每个对象都有一个变换组件。
3.组件(Component)是用来绑定到游戏对象(Game Object)上的一组相关属性。本质上每个组件是一个类的实例。- 描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件:
1.table的属性:第一个选择框是activeSelf 属性,第二个文本框是对象名称,第三个选择框为static属性。第二行有Tag属性和Layer属性,第三行是prefabs(预设)属性。
2.table的transform属性:包括position(位置),Rotation(旋转),Scale(比例)。
3.table的部件:chair1 chair2 chair3 - 用 UML 图描述 三者的关系
5.整理相关学习资料,编写简单代码验证以下技术的实现:
查找对象
using UnityEngine; using System.Collections; public class Test : MonoBehaviour { public GameObject a; public GameObject b; public GameObject[] c; void Start() { b = GameObject.FindWithTag("Respawn");//通过标签名获取单个对象 c = GameObject.FindGameObjectsWithTag("Respawn");//通过标签获取多个对象 } }
- 添加子对象
using UnityEngine;
using System.Collections;
public class example : MonoBehaviour{
void Start() {
GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Plane);
GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
cube.transform.position = new Vector3(0, 0.5F, 0);
GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);
sphere.transform.position = new Vector3(0, 1.5F, 0);
GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);
capsule.transform.position = new Vector3(2, 1, 0);
GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);
cylinder.transform.position = new Vector3(-2, 1, 0);
}
}
- 遍历对象树
foreach (Transform child in transform) {
Debug.Log(child.gameObject.name);
}
- 清除所有子对象
foreach (Transform child in transform) {
Destroy(child.gameObject);
}
资源预设(Prefabs)与 对象克隆 (clone)
预设是一个非常容易复用的类模板,可以迅速方便创建大量相同属性的对象、操作简单,代码量少,减少出错概率。修改的复杂度降低,一旦需要修改所有相同属性的对象,只需要修改预设即可,所有通过预设实例化的对象都会做出相应变化。而克隆只是复制一个一模一样的对象,这个对象独立于原来的对象,在修改的过程中不会影响原有的对象,这样不方便整体改动。
制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象:
GameObject prefab = (GameObject)Instantiate (prefab1);
尝试解释组合模式(Composite Pattern / 一种设计模式)使用 BroadcastMessage() 方法向子对象发送消息
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。组合模式是将对象组合成树形结构以表示“部分-整体”的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。
//父对象:
void test(){
Debug.Log ("Hello world");
}
// Use this for initialization
void Start () {
this.BroadcastMessage ("test");
}
//子对象
void test(){
Debug.Log ("Hello world");
}