3D游戏编程与设计作业二


1.简答题

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

区别:游戏对象是直接出现在场景中的,可以被玩家看到并且进行操作的,是组成游戏场景的基本部分,如玩家、敌人、环境等;资源是用于修饰游戏对象的,赋予对象一定特殊属性的,如Materials、Script、Sound等。
联系:对象是资源整合的具体表现,一个对象可以利用一个或多个资源,一个资源也可以被一个或多个对象利用。

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

在网络上随便找到一个游戏项目,这里找到的是MiniCar
资源目录结构如下:
在这里插入图片描述除了这些以外,还有Sound、Image类的资源,可见资源文件并不是一类文件,而是由一大类可以被继续划分为小类的文件。

对象组织如下:
在这里插入图片描述
可以看到,该游戏下又可能会含有许多子对象,子对象可能还由多个子对象构成,这就是所说的游戏对象树的层次结构。

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

check脚本代码如下:

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

public class check : MonoBehaviour
{
    void Awake(){
        Debug.Log("Awake");
    }
    // Start is called before the first frame update
    void Start(){
        Debug.Log("Start");
    }

    // Update is called once per frame
    void Update(){
        Debug.Log("Update");
    }

    void FixUpdate(){
        Debug.Log("FixUpdate");
    }

    void LateUpdate(){
        Debug.Log("LateUpdate");
    }

    void OnGUI () {
        Debug.Log("OnGUI");  
    }
    void OnDisable () {
        Debug.Log("OnDisable");  
    }

    void OnEnable () {
        Debug.Log("OnEnable");  
    }
}

根据文档各个函数的触发条件为:
Awake:脚本被实例化时调用;
Start:在该游戏对象刚开始被创建时调用;
Update:每帧调用一次;
FixedUpdate:按照自设定的频率执行;
LateUpdate:在bahaviour为enabled的时候,该帧结束的时候调用;
OnGUI:渲染GUI的时候调用;
OnDisable() 当行为变得无效的时候被调用;
OnEnable() 当对象启用并激活的时候被调用;
运行结果:
在这里插入图片描述
在这里插入图片描述
之后的调用都是Update、OnGUI和LateUpdate。

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

(a)分别翻译官方对三个对象的描述(Description)
Game Object:Base class for all entities in Unity Scenes.
翻译:Unity Scenes中所有实体的基类。
Transform:Position, rotation and scale of an object.
翻译:一个object的位置、旋转和尺寸。
Component:Base class for everything attached to GameObjects.
翻译:所有附加到Game Object上的东西的基类。

(b)描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
table的属性有:activeSelf(active),tag(Untagged),Layer(Default),Prefab(unchosen),Transform(具体值如下)
Transform的属性:分为三种,Position(位置)为(-2,0,0),Rotation(旋转)为(0,0,0),Scale(尺寸)为(1,0.2,1);
部件有:Mesh Filter,Box Collider,Mesh Renderer

(c)用 UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)
在这里插入图片描述

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

(a)预设(Prefabs)有什么好处?
预置是类似于生成一个游戏对象的模板,在之后需要创建相同的对象时可以直接调用预设,从而使得对象和资源可以重复利用,而且在需要修改对象的时候只需要修改预设即可。

(b)预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
预设和克隆都是通过复制产生游戏对象,而克隆需要当前场景已经存在游戏对象,预设设置好之后不需要有相应游戏对象;除此之外,克隆产生的游戏对象是相互独立的,可以任意修改其中的某一个对象,而如果修改预设则会导致所有对象改变。

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

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

public class prelab : MonoBehaviour
{
    public GameObject table;
    // Start is called before the first frame update
    void Start()
    {
        GameObject prefabTable = (GameObject)Instantiate(table.gameObject);
    }

    // Update is called once per frame
    void Update()
    {
        
    }
}

2.编程实践——井字棋

项目实现比较简单,将脚本编写好之后直接拉到camera中运行即可。
具体代码参考GitHub
效果如下:
平局
在这里插入图片描述
X获胜
在这里插入图片描述
O获胜
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值