Week03-3DHomwork

Week 03 - Homework

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

  • 游戏对象是Unity中最基础的对象,它可以代表游戏角色、 游戏道具和游戏场景。它们本身不会并不会为游戏贡献很多,但是它们却作为组件(展现真正游戏效果)的容器发挥着重要作用。1
  • 资源是能够用在游戏中的事物,可以来自Unity外创建的文件,比如3D模型、音频文件、图像,或是任何Unity支持的其他文件类型。同时,Unity内部也可以创建很多资源类型,比如动画控制器、音频混合器和渲染纹理等等。2
  • 区别在于:
    1. 游戏对象是游戏中的一个逻辑概念,有自身的属性和行为(比如玩家、大BOSS、场景);而大部分游戏资源是来自外部的文件,仅作为游戏对象的组成部分(比如材料、音乐、图片)。
    2. 游戏对象是游戏过程的一部分;资源是游戏编程过程的一部分。
  • 联系在于:
    1. 游戏对象可以作为资源的一部分;
    2. 游戏资源既可以成为游戏对象本身,也可以作为游戏对象的一种属性使游戏对象更为生动。

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

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

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

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

    public class testOrder : 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");  
        }
    }

Awake - OnEnable - Start - FixedUpdate - LateUpdate - OnGUI - OnDisable

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

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

    • GameObject: 游戏对象是Unity中最基础的对象,它可以代表游戏角色、 游戏道具和游戏场景。它们本身不会并不会为游戏贡献很多,但是它们却作为组件(展现真正游戏效果)的容器发挥着重要作用。3
    • Transform: Transform(变换)组件决定了场景中每一个物体的位置、旋转角度和缩放大小。每一个游戏对象都有一个变换(组件)。4
    • Component: 添加到游戏对象的一切事物的基类。注意:你的代码永远不会直接地创建组件;相反,你会写脚本代码并将脚本添加到游戏对象上。5
  • 描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件

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

    • 例如:table 的对象是 GameObject,第一个选择框是 activeSelf 属性。

    • table的对象是GameObject,它有如下属性:

      • 第一个选择框是activeSelf属性:通过停止勾选(可视化图形编程界面)或将其属性改为inactive(API中),GameObject可以被暂时从场景中移出。6

      • 第二个框是Transform Component

      • 第三个框是Mesh Filter(网格过滤器):网格过滤器从资源中获取一个网格,并将其传递给网格渲染器使其得以在屏幕上渲染。7

      • 第四个框是Box Collider(盒装对撞机):是一个盒子形状的原型对撞机。8

      属性解释
      center本地坐标系下盒子的中心坐标
      size在对象本地坐标系下盒子的大小
      • 第五个框(第三个选择框)是Mesh Renderer(网格渲染器):网格渲染器从网格过滤器中获取几何图形,并将其在Transform Component所定义的位置上渲染出来。9
  • 用UML 图描述 三者的关系(请使用 UMLet 14.1.1 stand-alone版本出图)
    UML - GameObject, Component, Transform

整理相关学习资料,编写简单代码验证以下技术的实现:

  • 查找对象10

    • 通过名字查找:

      public static GameObject Find(string name)
    • 通过标签查找单个对象:

      public static GameObject FindWithTag(string tag)
    • 通过标签查找多个对象:

      public static GameObject[] FindGameObjectsWithTag(string tag)
  • 添加子对象

    public static GameOjbect CreatePrimitive(PrimitiveType type)
    GameObject child = GameObject.CreatePrimitive(PrimitiveType.Sphere);
    child.transform.parent = this.transform;//这里child是孩子,
    • 遍历对象树

          foreach (Transform child in transform) {
              Debug.Log(child.gameObject.name);
          }
    • 清除所有子对象

        foreach (Transform child in transform) {
            Destroy(child.gameObject);
        }

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

  • 预设(Prefabs)有什么好处?11
    • 当需要创建一个在场景中要被多次使用的对象时,比如:NPC,游戏道具或者一小部分游戏场景。简单复制出来的多个对象,在需要修改的时候,需要一个一个单独编辑,会造成很大的不方便。预设就是这样一个可以存放实例(组件和性质齐全的游戏对象)的对象,其中的实例有着相同的属性,需要编辑的时候只需要编辑一个对象就可以对所有对象生效了。
  • 预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?12
    • 对象克隆就是对一个游戏对象的简单复制,复制过后依然可以选择性更改其属性。克隆本体改变,克隆对象不会随之改变。
  • 制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象13

    • public class PrefabBeh : MonoBehaviour {
      public Transform prefab;
        void Start()
        {
            for (int i = 0; i < 3; i++)
            {
                Instantiate(prefab, new Vector3(i * 8.0F, 0, 0), Quaternion.identity);
            }
        }
      }

      运行结果:

      tablePrefabResult

      tablePrefabResult2

尝试解释组合模式(Composite Pattern / 一种设计模式)。使用 BroadcastMessage()方法向子对象发送消息

public void BroadcastMessage(string methodName, object parameter = null, SendMessageOptions options = SendMessageOptions.RequireReceiver)
  • ParentCall.cs:
  public class ParentCall : MonoBehaviour {
        void Update () {
            this.BroadcastMessage("ApplyDamage", 5.0F,  SendMessageOptions.RequireReceiver);
        }
        void ApplyDamage() {
            print("table is called");
        }
}
  • ChildCalled1.cs:
  public class ChildCalled1 : MonoBehaviour {
        void ApplyDamage() {
              print("Chair 1 is called");
        }
  }
  • 运行结果:
    broadCast

其他参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值