简答题
解释游戏对象(GameObjects)和资源(Assets)的区别与联系。
对象:对象直接出现在游戏场景中,是资源整合的具体表现,对象一般有玩家,敌人,游戏场景,摄像机等虚拟父类,这些父类没有实例化,而他们的子类实例化并包含了这些游戏对象,我们可以对这些对象进行操作。
资源:资源可以是我们自定义或下载下来的素材,可以被多个对象使用,有些资源可以做为模板并实例化为对象。资源文件夹(Asset)通常包含脚本,预设,场景,声音等
——CSDN hellowangld
在Unity3D中,游戏对象(GameObjects)是对象(Object)的子类,同时是场景内其他所有个体的基类。游戏对象可以使用资源(Assets),同时资源也可以被实例化为对象。
下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
资源的目录组织结构:
-
Models 模型文件
-
Plugins 主要是DLL的外部插件文件
-
Prefabs 预储存文件
-
Resources 动态加载的资源文件
-
Scenes 场景文件
-
Scripts 脚本代码文件
-
Sounds 音效文件
-
Textures 所有的贴图
对象组织的结构
编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件。
基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate(),常用事件包括 OnGUI() OnDisable() OnEnable()
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour {
// 基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate(),常用事件包括 OnGUI() OnDisable() OnEnable()
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");
}
}
查找脚本手册,了解GameObject,Transform,Component 对象
分别翻译官方对三个对象的描述(Description)
GameObject: 游戏对象是统一体中代表人物、道具和场景的基本对象。它们本身并没有完成多少工作,但是它们充当组件的容器,组件实现真正的功能。
Transform: Transform组件决定场景中每个对象的位置、旋转和比例。每个GameObject(游戏物体)都有一个变换。
Component: 组件是游戏中对象和行为的螺母和螺栓。它们是每个游戏对象的功能部件。
描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
)]
table的对象是GameObject,第一个选择框是activeSelf 属性,第二个文本框是对象名称,第三个选择框为static属性。
Transform中的属性有位置、旋转、比例。
table的部件有Transform,Mesh Filter,Box Collider,Mesh Renderer。
用 UML 图描述三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)
整理相关学习资料,编写简单代码验证以下技术的实现:
- 查找对象
var obj = GameObject.Find("table");
if(obj != null) {
Debug.Log("find!");
}
- 添加子对象
GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
obj.name = "a cube";
obj.transform.position = new Vector3(0, 0, 2);
obj.transform.parent = this.transform;
- 遍历对象树
GameObject[] objs = GameObject.FindObjectsOfType<GameObject>();
foreach (GameObject obj in objs) {
Debug.Log(obj.name);
}
- 清除所有子对象
int childCount = transform.childCount;
for</