3D游戏——离散仿真引擎基础(简答题)

这次的作业是有关离散仿真引擎基础的简答题和思考题


  1. 解释游戏对象和资源的区别与联系
  2. 下载几个游戏案例,分别总结资源、对象组织的结构
  3. 编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
  4. 查找脚本手册,了解 GameObject,Transform,Component 对象
  5. 思考题


一、解释游戏对象(GameObjects)和资源(Assets)的区别与联系

游戏对象 资源
区别 摄像机、光源、3D物体、2D物体等 属性组件、脚本、音频资源等
联系 游戏对象可以调动(使用)资源


二、下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)

资源的目录组织结构:
我在Unity3D官网的资源商店里选择了一个游戏资源包,并查看了它的资源目录
3D游戏——离散仿真引擎基础(简答题)_第1张图片
从图中我们不难看出,这款资源包的资源结构,它包含了图片、脚本等很多资源,并分门别类地放入各个文件夹

游戏对象树的层次结构:
游戏中的对象并不都是并列存在的,他们有从属的关系,就像一棵树一样,比如只用Unity3D做出一张桌子和一把椅子,一个衣柜,他们共同构成一个整体——家具:
3D游戏——离散仿真引擎基础(简答题)_第2张图片


三、编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件

基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
常用事件包括 OnGUI() OnDisable() OnEnable()
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class test : MonoBehaviour {
    void Awake()
    {
        Debug.Log("awake");
    }
    void Start () {
        Debug.Log("start");
	}
    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");
    }
}

3D游戏——离散仿真引擎基础(简答题)_第3张图片
分析:
上图是各个函数被调用的顺序,我们不难看出:
1、Awake最先被调用,且只调用一次;
2、OnEnable紧接着被调用,也只调用一次;
3、Start紧接着被调用,也只调用一次;
4、在运行过程中,FixedUpdate,Update,LateUpdate,OnGUI相继被调用


四、查找脚本手册,了解 GameObject,Transform,Component 对象

分别翻译官方对三个对象的描述(Description)

GameObject: Base class for all entities in Unity Scenes.
Transform: Position, rotation and scale of an object.
Component: Base class for everything attached to GameObjects.

GameObject:Unity场景中所有实体的基类

Transform:对象的位置,旋转和缩放。场景中的每个对象都有一个Transform。它用于存储和操纵对象的位置,旋转和缩放。每个变换都可以有一个父级,允许分层次地应用位置,旋转和缩放

Component:附加到GameObject的所有内容的基类

用 UML 图描述 三者的关系

3D游戏——离散仿真引擎基础(简答题)_第4张图片

资源预设(Prefabs)与 对象克隆 (clone)

1、预设的好处:预设提供了模板,有利于资源的复用,节约时间;通过更改预设的资源,能够将所有调用该资源的对象进行修改

2、预设与对象克隆关系?
克隆其实就相当于又调用了一次预设的资源。假设A克隆了B,B对应的预设资源是C,那么如果C发生改变,A和B都会改变。而B并不会随着A的改变而改变

3、制作 table 预制,写一段代码将 table预制资源实例化成游戏对象

GameObject test = (GameObject)Instantiate (t1);


五、思考题

微软 XNA 引擎的 Game对象屏蔽了游戏循环的细节,并使用一组虚方法让继承者完成它们,我们称这种设计为“模板方法模式”。为什么是“模板方法”模式而不是“策略模式”呢?

回答的重点在于两种方式的区别。“模板方式模式”定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。策略模式则定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。微软的XNA引擎屏蔽了游戏循环的细节,并使用一组虚方法由继承者完成,显然符合“定义一个操作中的算法的骨架,而将一些步骤延迟到子类中”的定义,而不是“定义一系列的算法,把它们一个个封装起来”。所以这是“模板方式”模式。

你可能感兴趣的:(3D游戏)