1.解释对象与资源区别于联系,根据官方案例,分别总结资源和对象组织的规则/规律。
    下载并查看了Adam和Survival Shooter tutorial两个官方资源案例,这些案例作为资源,可以作为一个模板导入使用,也可以被多个对象使用或者本身实例化为游戏中的对象。导入的过程中可以自由选择部分资源导入,导入的这些资源可以被自己新建的对象所使用。资源内部可以有很多对象。
    Unity商店资源分类有3D模型、动画、音频、脚本、着色器、纹理和材料、编辑器扩展等。资源有Audio, Fonts, GiParamaters, Materials, Models, Prefabs, Scripts, Textures等。对象则有玩家、环境、对手、摄像机、灯光等虚拟父类。资源是可以被多个对象使用的,本身也可以进行实例化。对比起对象,资源更像是集成的可扩展的模板包。


2.编写简单程序代码,逐一验证MonoBehaviour基本行为触发的条件。
MonoBehaviour is the base class from which every Unity script derives.查阅了官方文档,MonoBehaviour行为有很多,基本行为选取了Awake, Start, Update, FixedUpdate, LateUpdate, Reset, OnGUI, OnDestroy, OnDisable来进行实验研究。
代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class exam : MonoBehaviour {void Awake () {Debug.Log ("Awake");}// Use this for initializationvoid Start () {Debug.Log ("Start");}// Update is called once per framevoid Update () {Debug.Log ("Update");}void FixedUpdate () {Debug.Log ("FixedUpdate");}void LateUpdate () {Debug.Log ("LateUpdate");}void Reset () {Debug.Log ("Reset");}void OnGUI () {Debug.Log ("OnGUI");}void OnDestroy () {Debug.Log ("OnDestroy");}void OnDisable () {Debug.Log ("OnDisable");}
}

实验小结:
经过阅读官方文档以及实践检验,发现Awake是在脚本实例被加载时即被调用;
FixedUpdate是当MonoBehaviour启用之后在每一个固定的framerate frame中被调用;
LateUpdate是当Behaviour是enabled的情况下在每一frame被调用。
OnDestroy是当MonoBehaviour被销毁时调用
OnDisable是当行为变得无效的时候被调用
OnEnable是当对象启用并激活的时候被调用
OnGUI是当渲染和处理GUI事件时被调用。
Reset是重置为默认值
Start只执行一次,在第一个Update被调用时启用。
Update被叫做每一帧,如果MonoBehaviour被接受。


3.通过官方参考手册,查找GameObject,Transform,Component对象,简单解释三者之间的关系。(使用UMlet画教程上图)
Unity由Scene中的各种游戏对象(GameObject)构成游戏世界,组件(Component)是用来挂载到游戏对象(Game Object)上的一组相关属性。本质上每个组件是一个类的实例。不同类型的游戏对象,都可以看成一个空的游戏对象,通过挂载不同组件实现不同功能。Unity脚本也是以组件的形式挂载在GameObject上执行的

GameObject:Unity场景中所有实体的基类Base class for all entities in Unity scenes.
class in UnityEngine/Inherits from:Object

Transform:指对象的位置、旋转和缩放。
场景中的每个对象都有一个变换。它用来存储和操纵物体的位置、旋转和缩放。每一个变换都可以有一个父函数,它允许你应用位置、旋转和缩放。这是层次结构窗格中看到的层次结构。他们也支持枚举,所以你可以通过儿童使用环:
class in UnityEngine/Inherits from:Component

Component:连接到所有基类对象。(Base class for everything attached to GameObjects)
class in UnityEngine/inherits form:Object

使用UMlet画图:

4.整理官方和其他学习材料,介绍如何用程序(代码)管理一个场景的游戏对象树林。编写简单代码验证以下技术的实现:
4.1查找对象
Unity中提供了五种获取对象的方法
1.通过对象名称(Find)
public static GameObject Find(string name);
通过名字寻找对象并返回它,只返回active GameObject,如果没有GameObject,则返回null。如果名称内包含“/”字符,会当做是hierarchy中的一个路径名。

2.通过标签获取单个游戏对象
public static GameObject FindWithTag(string tag))
返回一个用tag做标识的活动的对象,如果没有找到则为null。

using UnityEngine;using System.Collections;public class findwithtag : MonoBehaviour {public GameObject a;public GameObject b;void Start() {if (b == null)b = GameObject.FindWithTag("Respawn");Instantiate(a, b.transform.position, b.transform.rotation);}}

3.通过标签获取多个游戏对象
public static GameObject[] FindGameObjectsWithTag(string tag);
返回一个用对象标记的标签,如果没有找到对象则返回空数组。

using UnityEngine;using System.Collections;public class Example : MonoBehaviour {public GameObject a;public GameObject[] b;void Start() {if (b == null)b = GameObject.FindGameObjectsWithTag("Respawn");foreach (GameObject respawn in b) {Instantiate(a, respawn.transform.position, respawn.transform.rotation);}}}

4.通过类型获取单个游戏对象
返回类型为type的活动的第一个游戏对象。

5.通过类型获取多个游戏对象
返回类型为type的所有活动的游戏对象列表。
4.2添加子对象
public static GameObject CreatePrimitive(PrimitiveType type);
创建一个游戏对象与原始网格渲染器和适当的collider。

using UnityEngine;
using System.Collections;public class example : MonoBehaviour {void Start() {GameObject plane = GameObject.CreatePrimitive(PrimitiveType.Plane);GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);cube.transform.position = new Vector3(0, 0.5F, 0);GameObject sphere = GameObject.CreatePrimitive(PrimitiveType.Sphere);sphere.transform.position = new Vector3(0, 1.5F, 0);GameObject capsule = GameObject.CreatePrimitive(PrimitiveType.Capsule);capsule.transform.position = new Vector3(2, 1, 0);GameObject cylinder = GameObject.CreatePrimitive(PrimitiveType.Cylinder);cylinder.transform.position = new Vector3(-2, 1, 0);}
}

4.3遍历对象树
foreach (Transform child in transform) {
Debug.Log(child.gameObject.name);
}

4.4清除所有子对象
foreach (Transform child in transform) {
Destroy(child.gameObject);
}


5.预设有什么好处?与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
预设是一个非常容易复用的类模板,可以迅速方便创建大量相同属性的对象、操作简单,代码量少,减少出错概率。修改的复杂度降低,一旦需要修改所有相同属性的对象,只需要修改预设即可,所有通过预设实例化的对象都会做出相应变化。而克隆只是复制一个一模一样的对象,这个对象独立于原来的对象,在修改的过程中不会影响原有的对象,这样不方便整体改动。

6.解释组合模式。并编写验证程序,向组合对象中子对象 cast 消息,验证组合模式的优点。
组合模式(Composite Pattern),又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象。组合模式依据树形结构来组合对象,用来表示部分以及整体层次。这种类型的设计模式属于结构型模式,它创建了对象组的树形结构。这种模式创建了一个包含自己对象组的类。该类提供了修改相同对象组的方式。组合模式是将对象组合成树形结构以表示“部分-整体”的层次结构,它使得用户对单个对象和组合对象的使用具有一致性。
经典案例:系统目录结构,网站导航结构等

组合模式的使用,使得Unity离散引擎灵活、易于扩展;Component强组合于GameObject,使得内存空间管理富有效率,提高了性能。

转载于:https://www.cnblogs.com/xieyuanzhen-Feather/p/6591240.html

【Unity3D】资源对象、预设、查找对象、组合模式等知识点相关推荐

  1. 组合模式的应用之绘制基本图形和复合图形对象

    组合模式的使用场景 (1)通常,组合模式会组合出树型结构来,这意味着所有可以使用对象树来描述或操作的功能,都可以考虑使用组合模式,如UI界面设计中的容器对象.读取XML或对语句进行语法分析.OA系统中 ...

  2. 《研磨设计模式》chap15 组合模式(2)改写示例+总结

    1. 改写示例 在添加子组件的方法实现中,加入对父组件的引用实现.在删除子组件的方法实现中,加入把被删除的商品类别对象的父商品类别,设置成为被删除的商品类别的子类别的父商品类别的功能.实现新的返回组件 ...

  3. 设计模式 -- 组合模式(Composite)

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- 主要内容包括: 初识组合 ...

  4. 研磨设计模式 之 组合模式(Composite) 3——跟着cc学设计系列

    15.3  模式讲解 15.3.1  认识组合模式 (1)组合模式的目的 组合模式的目的是:让客户端不再区分操作的是组合对象还是叶子对象,而是以一个统一的方式来操作. 实现这个目标的关键之处,是设计一 ...

  5. 面向对象建模技术之设计模式——组合模式

    本文内容可以直达下载ppt详细版本: 面向对象建模技术--17种设计模式的详细介绍-行业报告文档类资源-CSDN下载 或选择各种知识的综合大礼包: 面向对象建模技术+UML+各种模型图+统一建模语言+ ...

  6. javascript设计模式-组合模式

    1 <!DOCTYPE HTML> 2 <html lang="en-US"> 3 <head> 4 <meta charset=&quo ...

  7. Java 设计模式之组合模式

    一.了解组合模式 1.1 什么是组合模式 组合模式允许你将对象组合成树形结构来表现"整体/部分"层次机构.组合能够使客户以一致的方式处理个别对象以及组合对象. 组合模式让我们能够用 ...

  8. 设计模式---组合模式

    设计模式---组合模式 什么是组合模式:Composite? 使用场景 代码示例 组合模式模板 组合模式的安全性和透明性 总结 优缺点: 适用场景: 什么是组合模式:Composite? 计算机的文件 ...

  9. 设计模式之组合模式(Composite)

    1.引言 在学习JUnit的时候,看到一段话"JUnit框架是一个典型的Composite模式:TestSuite可以容纳任何派生自Test的对象:当调用TestSuite对象的run()方 ...

最新文章

  1. Oracle计算两个整数的和与这两个整数的差与商
  2. 基于matlab的点云重建与三角剖分
  3. php画中画,画中画功能 怎么将两个视频叠加播放,制作成画中画效果
  4. 小程序中实现滚动字幕
  5. 通过ssh访问Back Track 5
  6. 升讯威微信营销系统开发实践:(2)功能设计与架构设计
  7. PyOpenGL之3D界面详解(三)
  8. Linux:yum配置和使用
  9. nginx + tomcat + redis 部署项目,解决session共享问题。
  10. 润乾报表鼠标移动行、单元格变色
  11. fidder不拦截_利用Fiddler拦截接口请求并篡改数据
  12. VS Code unins000尝试在目标目录创建文件时出错
  13. Python面向对象加强1.关于经典类、新式类和property详解
  14. 大数据杀熟?苹果回应:定价权在开发者那
  15. 2021年西电计算机学院软专复试问题总结
  16. 怎么进入计算机配置文件,老司机教你如何查看电脑配置
  17. 计算机cpu电压,怎么才能知道自己电脑的cpu电压
  18. Android:scheme总结(包含data其他部分)
  19. 推荐几个阿里,百度大佬的订阅号给大家
  20. 音乐服务器制作教程,分享硬盘中的音乐 DLNA服务搭建教程

热门文章

  1. 智慧城市丨智能时代的城市设计新策略
  2. Science子刊带来新遗传证据:早期人类驯化了自己
  3. 观点 | 李飞飞最新访谈:我每天都在对AI的担忧中醒来
  4. 人工智能:主导下一轮科技创新红利
  5. 李飞飞重返斯坦福后的大动作:开启「以人为中心的AI计划」
  6. 5 年提速 500 倍,英伟达 GPU 创纪录突破与技术有哪些?
  7. 图灵奖公布:高性能计算先驱、为超算铺平道路的Jack Dongarra获奖
  8. 这可能是东半球最保姆级的后台服务器开发学习路线
  9. 不要再被 Python 洗脑了!!
  10. 用 Python 实现抖音上的“人像动漫化”特效,原来这么简单!