前言
中山大学中山大学数据科学与计算机学院3D游戏课程学习记录博客。
简答题
1.解释游戏对象(GameObjects)和资源(Assets)的区别与联系。
- 游戏对象:出现在游戏场景中,充当游戏的组件。游戏对象不做任何事情,需要特殊属性才能成为一个角色或者一种效果。
- 资源:指游戏中使用到的各种东西,比如模型、音乐、图片等等。
资源可以被用与游戏对象的某种特殊属性,一个资源可以被多个游戏对象共享。
2.下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
在爱给网上下载了保卫萝卜的demo:
其中资源组织结构如下:
其中包括Scenes(场景)、Scripts(精灵)等资源。
对象组织结构如下:
包括一个摄像头和两个自己创建的游戏对象。
3.编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
- 基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
- 常用事件包括 OnGUI() OnDisable() OnEnable()
代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class NewBehaviourScript : MonoBehaviour{
// Start is called before the first frame update
void Start()
{
Debug.Log("Start");
}
// Update is called once per frame
void Update()
{
Debug.Log("Update");
}
private void Awake()
{
Debug.Log("Awake");
}
private void FixedUpdate()
{
Debug.Log("FixedUpdate");
}
private void OnGUI()
{
Debug.Log("OnGUI");
}
private void OnDisable()
{
Debug.Log("OnDisable");
}
private void OnEnable()
{
Debug.Log("OnEnable");
}
}
运行时输出:
4.查找脚本手册,了解 GameObject,Transform,Component 对象
- 分别翻译官方对三个对象的描述:
- GameObject: Unity Scenes中所有实体的基类。
- Transform: 对象的位置,旋转和比例。
- Component: 所有附加到GameObjects的基类。
- 描述下图中table 对象(实体)的属性、table的Transform的属性、table 的部件:
table对象是GameObject:
第一行左侧为activeSelf属性,中间为对象的名称,右边为static属性;
第二行左侧为Tag属性,对对象进行标记;右侧为Layer属性,选择对象的框架;
第三行为预设属性。
Transform属性:
第一行为位置,第二行为旋转角度,第三行为比例。
Component属性:
包括Transform、Cube、Mesh Renderer等属性,可以通过Add Component添加。
- 用 UML 图描述 三者的关系:
5.资源预设(Prefabs)与 对象克隆 (clone)
- 预设有什么好处?
预设可以作为模板。预设能够重复利用;修改预设后,相同的游戏对象都会发生变化。 - 预设与对象克隆关系?
预设和其产生出来的对象是联系的,假如修改预设那么产生的对象也会被修改。
克隆出的对象子体和母体相互独立,修改一个另一个并不会发生改变。 - 制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象:
在Assets下新建Myprefabs文件,把table拉进去,然后挂载脚本,脚本代码如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class prefabs : MonoBehaviour{
public GameObject obj;
void Start()
{
GameObject instance=(GameObject)Instantiate(obj);
}
void Update()
{
}
}
运行结果:
生成实例对象
编程题
井字棋编程,见另一博客:井字棋
思考题
- 微软 XNA 引擎的 Game 对象屏蔽了游戏循环的细节,并使用一组虚方法让继承者完成它们,我们称这种设计为“模板方法模式”。
- 为什么是“模板方法”模式而不是“策略模式”呢?
模板方法是规定代码的结构,使用者不改变代码的结构而改变其中的关键步骤。
策略模式使用者要改变整个算法,其优势在于耦合性低。对于内部代码的改变不会影响到其他部分。
- 为什么是“模板方法”模式而不是“策略模式”呢?