离散仿真引擎基础
1、解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。
- 对象:对象直接出现在游戏场景中,是资源整合的具体表现,对象一般有玩家,敌人,游戏场景,摄像机等虚拟父类,这些父类没有实例化,而他们的子类实例化并包含了这些游戏对象,我们可以对这些对象进行操作。
- 资源:资源可以是我们自定义或下载下来的素材,可以被多个对象使用,有些资源可以做为模板并实例化为对象。资源文件夹(Asset)通常包含脚本,预设,场景,声音等。
2、下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
- 资源的目录组织结构:
主要包括动画,文本,场景,素材,模型,预设以及使用说明等。 - 游戏对象树的层次结构:
主要包括摄像机包,游戏开始位置,场景布局以及文本管理等。
3、编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
- 基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
- 常用事件包括 OnGUI() OnDisable() OnEnable()
public class firstTry : MonoBehaviour
{
void Awake()
{
Debug.Log("onAwake");
}
void Start()
{
Debug.Log("onStart");
}
void Update()
{
Debug.Log("onUpdate");
}
void FixedUpdate()
{
Debug.Log("onFixedUpdate");
}
void LateUpdate()
{
Debug.Log("onLateUpdate");
}
void OnGUI()
{
Debug.Log("onGUI");
}
void OnDisable()
{
Debug.Log("onDisable");
}
void OnEnable()
{
Debug.Log("onEnable");
}
}
4、查找脚本手册,了解 GameObject,Transform,Component 对象
分别翻译官方对三个对象的描述(Description)
GameObject:
GameObjects are the fundamental objects in Unity that represent characters, props and scenery.
游戏对象是在 Unity 中代表任务,道具和场景的基础对象
Transform:
The Transform component determines the Position, Rotation, and Scale of each object in the scene.
变化组件决定了场景中游戏对象的位置,大小和旋转关系。
Component:
Components are the nuts & bolts of objects and behaviors in a game.
组件是游戏对象和其对应行为之间的枢纽。
描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
- table 对象(实体)的属性:
layer : Default
tag : Untagged
table 的 Transform 的属性 - Position: (0, 0, 0)
Rotation: (0, 0, 0)
Scale : (1, 1, 1)
table 的 部件 - Transform
Mesh Renderer
Box Collider
用 UML 图描述 三者的关系( UMLet 14.1.1 stand-alone版本):
5、资源预设(Prefabs)与 对象克隆 (clone)
-
预设(Prefabs)有什么好处?
1、使对象和资源能够重复利用。
2、相同的游戏对象可以用同一个预制创建。
3、对预设进行修改后,所有使用该预设的游戏对象都会发生改变。预设资源完整储存了对象的组件和属性,相当于模板,能够方便我们创建相同的游戏对象并赋予他们相同的行为,比如用一块砖来建造一面墙,用一颗小草创建一片草原。
-
预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
1、克隆游戏对象需要场景中有被克隆对象,而创建预制只需事先创建预制即可,场景中一开始可以不存在该游戏对象。
2、克隆出来的游戏对象并不会随着被克隆体的变化而发生变化,但是使用预制创建出来的对象会随着预制的改变而发生改变。 -
制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象
public class NewBehaviourScript : MonoBehaviour {
private string prePath = "prefabs/table";
void Start () {
GameObject Table =Instantiate(Resource.Load(prePath), new Vector(0,0 ,4), Quaternion.identity) as GameObject;
}
}