离散仿真引擎基础-作业与练习

1、简答题

解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。
  • 对象(GameObject)是指出现在游戏中的具体事物,它可以是我们创建的精灵和各种形状的物体,也可以是游戏场景和摄像机等。游戏对象本身不做任何事情,它们需要特殊属性才能成为一个角色、一种环境或者一种特殊效果。
  • 资源(Assets)是可以通过Unity资源商店下载并使用的素材,它可以被多个对象使用,它包括一些预设、脚本、声音等。

一个对象通过使用资源实现自身的实例化,使其能够真正地在游戏中被应用。

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

资源的组织结构:预设、脚本、精灵、动画、模型、使用说明等。
对象的组织结构:位置信息、文本管理、摄像机、对象的结构信息等。

编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
常用事件包括 OnGUI() OnDisable() OnEnable()

代码;

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

public class NewBehaviourScript : MonoBehaviour
{
    private 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.");
    }

    private void FixedUpdate()
    {
        Debug.Log("FixedUpdate.");
    }

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

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

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

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

}

在Unity中将脚本添加给一个cube并运行后可以看到结果:

执行顺序与课件中的基本一致。

查找脚本手册,了解 GameObject,Transform,Component 对象
分别翻译官方对三个对象的描述(Description)

GameObject: Unity场景中所有实体的基类
Transform: 对象的位置,旋转和缩放
Component: 附加到GameObjects的所有内容的基类

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

本题目要求是把可视化图形编程界面与 Unity API 对应起来,当你在 Inspector 面板上每一个内容,应该知道对应 API。

table 的对象是 GameObject,第一行第一个选择框是 activeSelf 属性,第二个框是所选对象的名称,第三个选择框是static属性;第二行第一个是tag属性,第二个是Layer属性;第三行是Perfabs属性。
Transform第一行是Position属性,包括xyz三个坐标值;第二行是Rotation属性,同样包括三个坐标值;第三行是Scale属性,同样包括三个坐标值。
table的部件由4个组成,包括table1, table2, table3和table4。

用 UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)

整理相关学习资料,编写简单代码验证以下技术的实现:
查找对象
        //search object
        var findObj = GameObject.Find("Object");
        if (findObj == null) Debug.Log("Object found.");
        else Debug.Log("Object not found.");
添加子对象
        //add sub object
        GameObject obj = GameObject.CreatePrimitive(PrimitiveType.Cube);
        obj.transform.position = new Vector3(0, Random.Range(0, 5), 0);
        obj.transform.parent = this.transform;
遍历对象树
        //traverse object tree
        GameObject game[] = GameObject.FindObjectOfType<GameObject>();
        foreach (GameObject g in game)
        {
            Debug.Log(g.name);
        }
清除所有子对象
        //clear all object
        GameObject game[] = GameObject.FindObjectOfType<GameObject>();
        foreach (GameObject g in game)
        {
            GameObject.Destroy(g);
        }
资源预设(Prefabs)与 对象克隆 (clone)
预设(Prefabs)有什么好处?

预设 (Prefab) 是存储在工程视图中可重复使用的游戏对象 ,它可以放入多个场景中,并且每个场景可以使用多次,当我们向一个场景中添加一个预设时,就会创建它的一个实例,所以无论工程中有多少个实例,当我们对预设做出更改时,这些更改会运用与所有实例,这就使得游戏制作起来更加高校和便捷。

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

对象克隆需要场景中事先已存在对象,而预设允许场景中无对象存在,它只需事先创建预制即可,而场景中不存在对象时无法创建克隆对象;其次预设创建出的对象会根据预设的改变而改变,而克隆创建出的对象不会随被克隆对象的改变而改变。

制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象
    public GameObject table;
    
    // Start is called before the first frame update
    void Start()
    {
        Resources.Load("table");
        Debug.Log("Start.");
        GameObject prefab = (GameObject)Instantiate(table);
        prefab.transform.position = new Vector3(0, Random.Range(0, 5), 0);
        prefab.transform.parent = this.transform;
    }


先将table拖入项目视图,然后删除对象,接着新建一个空对象GameObject,将table预制拖入对象层标签,编写好代码后运行,发现视图中生成了table。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值