3D游戏编程与设计-离散仿真引擎基础

离散仿真引擎基础作业

简答题

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

游戏对象是在游戏中真实存在一个物体,是可以进行选中操作的对象,而资源则是对游戏对象的一个修饰,比如一个正方体是游戏对象,但是其表面的图案等具体信息是资源来设定的。

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

案例一:卡丁车

在这里插入图片描述

案例二

小鸟
从图中我们不难看出,这款资源包的资源结构,它包含了图片、脚本等很多资源,并分门别类地放入各个文件夹
游戏对象树的层次结构:
游戏中的对象并不都是并列存在的,他们有从属的关系,就像一棵树一样

编写一个代码,使用debug语句来验证MonoBehaviour基本行为或事件

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");
    }
}

jieguo

基本行为包括Awake()Start()Update()FixedUpdate()LateUpdate()

常用事件包括OnGUI()OnEnable()

分析:

上图是各个函数被调用的顺序,我们不难看出:
1、Awake最先被调用,且只调用一次;
2、OnEnable紧接着被调用,也只调用一次;
3、Start紧接着被调用,也只调用一次;
4、在运行过程中,FixedUpdate,Update,LateUpdate,OnGUI相继被调用

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

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

GameObject: 游戏中的每个对象都是一个游戏对象(GameObject)。然而,游戏对象(GameObjects)本身不做任何事情。它们需要特殊属性(special properties)才能成为一个角色、一种环境或者一种特殊效果。
Transform:变换(Transforms)是每个游戏对象(GameObject)的关键组件(Component)。它们决定游戏对象 (GameObject)的位置、旋转方式及缩放。
Reset:在游戏中,组件(Components)就是对象和行为的螺栓与螺母,它们是每个游戏对象 (GameObject)的功能零件。

描述下图中table对象(实体)的属性、table的Transform的属性、table的部件

table 的对象是GameObject,第一个选择框是 activeSelf属性,第二个选择框是Transform属性,第三个选择框是Mesh Filter筛网过滤器属性,第四个选择框是Box Collider属性,第五个选择框是Mesh Renderer筛网渲染器属性,第六个选择框是Default-Material属性。

用UML图描述三者的关系

Transform Component GameObject 1 1 many 1 1 Transform Component GameObject

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

预设(Prefabs)有什么好处?

预设是一个非常容易复用的类模板,可以迅速方便创建大量相同属性的对象、操作简单,代码量少,减少出错概率。

预设与对象克隆(clone or copy or Instrantiate of Unity Object)关系?

一旦预设中的属性改变了,由预设产生的实例也会相应的改变;而通过对象克隆出来的对象,不会因为本体的改变而改变。

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

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class create : MonoBehaviour {
    public GameObject prefab;

    // Use this for initialization
    void Start () {
        Instantiate(prefab, new Vector3(0f, 0f, 0f), Quaternion.identity);
    }
}

编程实践,小游戏

游戏内容:井字棋

技术限制:仅允许使用IMGUI构建UI

作业目的:

了解OnGUI()事件,提升debug能力

提升阅读API文档能力

项目链接:https://github.com/zxy0616/3DGame-unity.git

思考题

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

为什么是“模板方法”模式而不是“策略模式”呢?

将游戏对象组成树型结构,每个节点都是游戏对象(或数)。

尝试解释组合模式(Composite Pattern / 一种设计模式)。

使用 BroadcastMessage() 方法,向子对象发送消息。你能写出 BroadcastMessage() 的伪代码吗?

一个游戏对象用许多部件描述不同方面的特征。我们设计坦克(Tank)游戏对象不是继承于GameObject对象,而是 GameObject 添加一组行为部件(Component)。

这是什么设计模式?

为什么不用继承设计特殊的游戏对象?

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值