1、简答题【建议做解释 游戏对象(GameObjects) 和 资源(Assets)的区别与联系。

    •   游戏对象:直接出现在游戏的场景中,是资源整合的具体表现,对象通过层次结构来组织,通过整体-部分的关系构成层次结构。资源:资源通过文件夹的形式组织,包含常用的图像,视频,脚本文件,预制文件等等,可以被一个或者多个对象使用。
  • 下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
    • 资源的目录组织结构主要包含文件、材质、模型、预制件、场景、脚本、标准资源这几个部分。资源里面又包含了图片,游戏需要用到的音乐等等。游戏对象树就如同Windows的文件资源管理器一样,树目录结构:一个游戏对象(文件夹)包含多个子对象(子文件夹),子对象(子文件夹)又可以继续包含多个子对象(子文件夹)。
  • 编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
    • 基本行为包括 Awake() Start() Update() FixedUpdate() LateUpdate()
    • 常用事件包括 OnGUI() OnDisable() OnEnable()
    • using System.Collections;
      using System.Collections.Generic;
      using UnityEngine; public class testBehavior : MonoBehaviour
      {
      void Start(){
      Debug.Log("Start");
      } void Awake(){
      Debug.Log("Awake");
      } 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");
      }
      }

        

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

      • GameObject:是Unity场景里面所有实体的基类.
        Transform:物体的位置、旋转和缩放。
        Component:一切附加到游戏物体的基类。
    • 描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
      • 本题目要求是把可视化图形编程界面与 Unity API 对应起来,当你在 Inspector 面板上每一个内容,应该知道对应 API。
      • 例如:table 的对象是 GameObject,第一个选择框是 activeSelf 属性。
      • activeSelf:修改对象的名称,动静态等属性(图中对象名称是table,动态)
        Transform:调整对象的位置、面向方向、大小(默认位置大小)
        Box Collider:调整坐标系的位置、大小
        Add Component:给对象增加行为

    • 用 UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)
  • 资源预设(Prefabs)与 对象克隆 (clone)
  • 预设(Prefabs)有什么好处?

    • 预设 (Prefab) 是一种资源 - 存储在工程视图 (Project View) 中可重复使用的游戏对象 (GameObject)。预设 (Prefabs) 可放入到多个场景中,且每个场景可使用多次。向场景添加一个预设 (Prefab) 时,就会创建它的一个实例。所有预设 (Prefab) 实例都链接到原始预设 (Prefab),实质上是原始预设的克隆。不管您的工程中有多少个实例,您对预设 (Prefab) 作薄出任何更改时,您会看到这些更改应用于所有实例。预设与对象
    • 克隆 (clone or copy or Instantiate of Unity Object) 关系?
    • 在Unity3D当中,为了快速复制出游戏对象,主要有克隆游戏对象与创建预制两种方法。

      两者区别在于:

      1、克隆游戏对象需要场景中有被克隆对象,而创建预制只需事先创建预制即可,允许场景中一开始并不存在该游戏对象。

      2、克隆出来的游戏对象并不会随着被克隆体的变化而发生变化,但是使用预制创建出来的对象会随着预制的改变而发生改变。

    • 制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象
    • 将table预制体放到 Resource 文件夹下使用

      • public GameObject obj;
        void Start () {
        GameObject instance = (GameObject)Instantiate(obj.gameObject, transform.position, transform.rotation);
        }

2、 编程实践,小游戏

  • 游戏内容: 井字棋 或 贷款计算器 或 简单计算器 等等
  • 技术限制: 仅允许使用 IMGUI 构建 UI
  • 作业目的:
    • 了解 OnGUI() 事件,提升 debug 能力
    • 提升阅读 API 文档能力
    • using System.Collections;
      using System.Collections.Generic;
      using UnityEngine; public class Chess : MonoBehaviour { private int turn = 1;
      private int[,] grid = new int[3, 3]; // 重新开始游戏
      void Start () {
      Restart();
      } void Restart()
      {
      turn = 1;
      for (int i = 0; i < 3; ++i)
      {
      for (int j = 0; j < 3; ++j)
      {
      grid[i, j] = 0;
      }
      }
      } void OnGUI()
      {
      //设置button中字体的大小
      GUI.skin.button.fontSize = 20; //设置label中字体大小和颜色
      GUIStyle style = new GUIStyle();
      style.fontSize = 40;
      style.normal.textColor = new Color(255, 255, 255); //判断是否点击Restart按钮
      if(GUI.Button(new Rect(360, 500, 80, 80), "Restart")){
      Restart();
      } //判断游戏是否结束
      int result = judge();
      if (result == 1)
      {
      GUI.Label(new Rect(340, 170, 100, 50), "O wins!", style);
      }
      else if (result == 2)
      {
      GUI.Label(new Rect(340, 170, 100, 50), "X wins!", style);
      }else if (result == 3)
      {
      GUI.Label(new Rect(300, 170, 100, 50), "GameOver!", style);
      } //生成棋盘并判断格子是否被点击
      for (int i=0; i<3; i++)
      {
      for(int j=0; j<3; j++) {
      if (grid[i, j] == 1)
      {
      GUI.Button(new Rect(280 + i * 80, 220 + j * 80, 80, 80), "O");
      }else if (grid[i, j] == 2)
      {
      GUI.Button(new Rect(280 + i * 80, 220 + j * 80, 80, 80), "X");
      }else if (GUI.Button(new Rect(280 + i * 80, 220 + j * 80, 80, 80), "")&&result==0)
      {
      if (turn == 1)
      {
      grid[i, j] = 1;
      }else
      {
      grid[i, j] = 2;
      }
      turn = -turn;
      }
      }
      }
      } int judge()
      {
      // 横向连线
      for (int i = 0; i < 3; ++i)
      {
      if (grid[i, 0] != 0 && grid[i, 0] == grid[i, 1] && grid[i, 1] == grid[i, 2])
      {
      return grid[i, 0];
      }
      }
      //纵向连线
      for (int j = 0; j < 3; ++j)
      {
      if (grid[0, j] != 0 && grid[0, j] == grid[1, j] && grid[1, j] == grid[2, j])
      {
      return grid[0, j];
      }
      }
      //斜向连线
      if (grid[1, 1] != 0 &&
      grid[0, 0] == grid[1, 1] && grid[1, 1] == grid[2, 2] ||
      grid[0, 2] == grid[1, 1] && grid[1, 1] == grid[2, 0])
      {
      return grid[1, 1];
      }
      //全部格子都被点击
      bool allClick = true;
      for (int i=0; i<3; i++)
      {
      for (int j=0; j<3; j++)
      {
      if (grid[i, j] == 0)
      {
      allClick = false;
      }
      }
      }
      if (allClick)
      return 3; return 0;
      }
      }

        视频链接:https://github.com/IYreality/Homework/blob/master/3-1/unity-3D/second/%E4%BA%95%E5%AD%97%E6%A3%8B%E6%BC%94%E7%A4%BA.wmv

3、思考题【选做】

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

    • 为什么是“模板方法”模式而不是“策略模式”呢?
  • 将游戏对象组成树型结构,每个节点都是游戏对象(或数)。
    • 尝试解释组合模式(Composite Pattern / 一种设计模式)。
    • 使用 BroadcastMessage() 方法,向子对象发送消息。你能写出 BroadcastMessage() 的伪代码吗?
  • 一个游戏对象用许多部件描述不同方面的特征。我们设计坦克(Tank)游戏对象不是继承于GameObject对象,而是 GameObject 添加一组行为部件(Component)。
    • 这是什么设计模式?
    • 为什么不用继承设计特殊的游戏对象?

作业提交要求

  • 仅能用博客或在线文档提交作业,建议使用 Github 提交代码和作业。不能使用docx、pdf等需要下载阅读的格式
  • deadline 问课程 TA

Unity-3D-H2的更多相关文章

  1. Circular progress bar in Unity 3D

    Circular progress bar in Unity 3D - UnityScripthttp://stackoverflow.com/questions/22662706/circular- ...

  2. Unity 3D 游戏上线之后的流水总结

    原地址:http://tieba.baidu.com/p/2817057297?pn=1 首先.unity 灯光烘焙 :Unity 3D FBX模型导入.选项Model 不导入资源球.Rig 不导入骨 ...

  3. C#程序员整理的Unity 3D笔记(十五):Unity 3D UI控件至尊–NGUI

    目前,UGUI问世不过半年(其随着Unity 4.6发布问世),而市面上商用的产品,UI控件的至尊为NGUI:影响力和广度(可搜索公司招聘Unity 3D,常常能看到对NGUI关键词). NGUI虽然 ...

  4. C#程序员整理的Unity 3D笔记(十三):Unity 3D基于组件的思想

    如果你接触过<设计模式>.软件架构的编程思想,就会知道优秀的设计准则:“组合优于继承的”. 这句话很简短,但开始学习OOP的时候,真切的是—-不太好理解(以我个人当初学习为例). OOP的 ...

  5. 【图说】Eclipse与Unity 3D协同工作

    原地址:http://blog.csdn.net/h570768995/article/details/9355313 Eclipse开发过程中总会碰到很多的难题,如何利用好工具帮助我们更快捷的开发也 ...

  6. C#程序员整理的Unity 3D笔记(十):Unity3D的位移、旋转的3D数学模型

    遇到一个想做的功能,但是实现不了,核心原因是因为对U3D的3D数学概念没有灵活吃透.故再次系统学习之—第三次学习3D数学. 本次,希望实现的功能很简单: 如在小地图中,希望可以动态画出Player当前 ...

  7. 再议Unity 3D

    一年前,偶发冲动,翻译了<[译] Unity3D游戏和facebook绑定(1:简介)>系列文章. 现在看有2个明显的好处, 一:给这个不温不火的博客带了top 3的人气: 二:我个人由此 ...

  8. [Unity 3D] Unity 3D 里的碰撞检测

    Unity 3D里两个碰撞体之间发生碰撞可以用OnCollision族函数和OnTrigger族函数来获知和处理.Unity官方给出了两张可发生碰撞的组合表: Collision detection ...

  9. [Unity 3D] Unity 3D 性能优化 (一)

    听到过很多用Unity 3D开发游戏的程序员抱怨引擎效率太低,资源占用太高,包括我自己在以往项目的开发中也头疼过.最近终于有了空闲,可以仔细的研究一下该如何优化Unity 3D下的游戏性能.其实国外有 ...

  10. Unity 3D 建立开发环境

    之后的基本方向 ios游戏开发,基础教程http://www.devdiv.com/unity_d_-thread-128068-1-1.html,学习Unity 3D游戏开发. 应该昨天表示,读了一 ...

随机推荐

  1. .NET Core 3时代DevExpress Winforms v19.2增强TreeList控件

    DevExpress Winforms Controls内置140多个UI控件和库,完美构建流畅.美观且易于使用的应用程序.无论是Office风格的界面,还是分析处理大批量的业务数据,DevExpre ...

  2. Eclipse使用技巧小结

    前言:自学Java以来,就一直用eclipse,这款ide深受广大新手和大牛喜爱.学会使用其中的技巧,越用越熟练,开发也就越快捷方便.话不多说,直接上小结吧. 一.快捷键 1.提示 :A|t+/ 2. ...

  3. Docker搭建Redis一主两从三哨兵

    作者:oscarwin juejin.im/post/5d26b03de51d454fa33b1960 这次实验准备了三台云主机,系统为Debian,ip分别为:35.236.172.131 ,35. ...

  4. Oracle 11g关闭用户连接审计

    sys.aud$表数据量增长较快.这时,不想关闭数据库的审计,但是又不想频繁的清理sys.aud$表.可进行如下操作关闭数据库连接的审计 noaudit connect;

  5. VS tools

    官方下载,有免费也有试用的 http://visualstudiogallery.msdn.microsoft.com/ VS2012简单的使用感受+插件推荐 http://blog.sina.com ...

  6. 电路IO驱动能力

    驱动能力 电源驱动能力 -> 输出电流能力 -> 输出电阻 指输出电流的能力,比如芯片的IO在高电平时的最大输出电流是4mA -> 该IO口的驱动驱动能力为4mA 负载过大(小电阻) ...

  7. error:Cannot pull with rebase

    原文文链接:https://blog.csdn.net/u012385190/article/details/70670213git 执行git pull –rebase报错误如下: error: C ...

  8. python 简单了解一下 描述器

    1.描述器是什么? 在Python中描述器也被称为描述符, 1)描述器实际上是任何新式类(新式类是继承自 type 或者 object 的类),这种类至少实现了3个特殊的方法__get__, __se ...

  9. 对官网vue事件修饰符串联的顺序如何理解?

    官网有一个提醒:使用修饰符时,顺序很重要:相应的代码会以同样的顺序产生.因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent ...

  10. Coarse-to-Fine超分辨率相关

    1.A Coarse-to-Fine Subpixel Registration Method to Recover Local Perspective Deformation in the Appl ...