离散仿真引擎基础
一、简答题
1.解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。
游戏对象:出现在场景中,一般有人物、道具和风景等等,充当组件的容器,实现真正的功能。游戏对象自己不做任何事。他们需要专有属性,才可以成为一个角色,一个环境,或一个特殊效果。
资源:表示可以在项目中使用的任何素材。可能来自在Unity之外创建的文件,例如3D模型、音频文件,图像,脚本或Unity支持的任何其他类型的文件。还有一些可以在Unity中创建的资源类型,如动画控制器、音频混音器或渲染纹理。
游戏对象可以保存为资源;资源可以作为游戏对象的模板。
2.下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
资源的目录组织结构: 主要包括动画,文本,场景,素材,模型,预设以及使用说明等。
游戏对象树的层次结构:主要包括摄像机包,游戏开始位置,场景布局以及文本管理等。
3.编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
常用事件包括 OnGUI() OnDisable() OnEnable()
void Awake(){
Debug.Log("Awake");
}
void Start () {
Debug.Log("Start");
}
void Update () {
Debug.Log("Update");
}
void FixedUpdate(){
Debug.Log("FixedUpdate");
}
void LateUpdate(){
Debug.Log("Update");
}
void OnGUI()
{
if (GUI.Button(new Rect(100, 100, 100, 100), "Button"))
print("You clicked the button!");
}
void OnDisable(){
Debug.Log("PrintOnDisable: script was disabled");
}
void OnEnable(){
print("script was enabled");
}
运行结果:
4.查找脚本手册,了解 GameObject,Transform,Component 对象
1)分别翻译官方对三个对象的描述(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.
组件:所有附加到游戏对象上的东西的基类。
2)描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
table 对象属性:第一个选择框activeSelf属性-该对象是否显示/渲染;chair为对象名称;Static属性表示该对象为静态;Tag属性用于分类;Layer属性-相机最常使用图层来渲染场景的一部分;Prefab属性-预设
Transform 的属性:Position(位置);Rotation(旋转角度);Scale(缩放比例)
table 的部件:有Transform、Cube、Box Collider、Mesh Renderer等部件
3)用 UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)
5.资源预设(Prefabs)与 对象克隆 (clone)
1)预设(Prefabs)有什么好处?
通过预设可以在一定程度上简化创建的过程。预设的目的是为相同属性的对象创建模板,这样再次创建对象时可以变得相当简便。
2)预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
首先,两者的目的都是为了得到属性相同的一堆游戏对象。但预设是固定了一个模板,通过模板创建的对象都是固定属性的,想要改变一个对象的某一公共属性,只有改变模板的固有属性,但同时所有的对象的该属性都会改变;而对象克隆是与被克隆对象的属性一样,但当你改变被克隆对象后,再次克隆的新对象与原来克隆的对象属性不同。
3)制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour
{
public GameObject obj;
void Start()
{
GameObject instance = (GameObject)Instantiate(obj.gameObject, transform.position, transform.rotation);
}
}
运行后,可以看到table的clone。
二、 编程实践,小游戏
游戏内容: 井字棋 或 贷款计算器 或 简单计算器 等等
井字棋(代码)
运行结果:
x wins:
o wins:
It’s a draw: