3D游戏--离散仿真引擎基础的简答题和思考题

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


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


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

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


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

资源的目录组织结构:
我在Unity3D官网的资源商店里选择了一个游戏资源包,并查看了它的资源目录
在这里插入图片描述

从图中我们不难看出,这款资源包的资源结构,它包含了图片、脚本等很多资源,并分门别类地放入各个文件夹

游戏对象树的层次结构:
游戏中的对象并不都是并列存在的,他们有从属的关系,就像一棵树一样,比如只用Unity3D做出一张桌子和一把椅子,一个衣柜,他们共同构成一个整体——家具:
在这里插入图片描述


三、编写一个代码,使用 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");
    }
}

在这里插入图片描述

分析:
上图是各个函数被调用的顺序,我们不难看出:
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 图描述 三者的关系

在这里插入图片描述

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

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

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

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

GameObject test = (GameObject)Instantiate (t1);


五、思考题

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

huyaxiaomuge

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值