Unity3D课程学习笔记-创新互联

Unity3D课程学习笔记(一)
1.解释游戏对象(GameObjects)和资源(Assets)的区别与联系
官方文档对Assets的解释:An asset is representation of any item that can be used in your game or project. An asset may come from a file created outside of Unity, such as a 3D model, an audio file, an image, or any of the other types of file that Unity supports. There are also some asset types that can be created within Unity, such as an Animator Controller, an Audio Mixer or a Render Texture.

创新互联建站是专业的铁西网站建设公司,铁西接单;提供成都网站建设、成都网站设计,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行铁西网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

官方文档对GameObjects的解释:GameObjects are the fundamental objects in Unity that represent characters, props and scenery. They do not accomplish much in themselves but they act as containers for Components, which implement the real functionality.

解释区别与联系:对象一般是一些资源的集合体,是资源整合的具体表现,而资源可以被多个对象使用。游戏对象一般为玩家,敌人,环境等,而资源可组成游戏中所有的对象,一般包括声音,脚本,材质等,资源可以被多个对象使用,资源作为模版,可实例化游戏中具体的对象。

2.下载几个游戏案例,分别总结资源、对象组织的结构(指资源的目录组织结构与游戏对象树的层次结构)
游戏:Beat-Plane:如下图所示结构,资源中可以放置图像、声音、脚本等。

Unity3D课程学习笔记

3.编写一个代码,使用 debug 语句来验证 MonoBehaviour 基本行为或事件触发的条件
测试代码如下所示:
Unity3D课程学习笔记
则该代码运行后在Console中显示如下所示:
Unity3D课程学习笔记

MonoBehaviour 基本行为或事件触发的条件(按执行顺序):

Awake() : 当前控制脚本实例被装载的时候调用。一般用于初始化整个事例使用。(建议少用,此刻物体还未实例化出来,会影响程序的执行顺序)

Start() : 当前控制脚本第一次执行Update之前调用。

Update() : 每帧都执行一次,是最常用的时间函数。

FixedUpdate() : 每固定帧绘制时执行一次,和Update不同的是FixedUpdate是渲染帧执行,如果你的渲染效率底下的时候FixedUpdate的调用次数就会下降。FixedUpdate比较适用于物理引擎的计算,因为是跟每帧渲染有关,而Update比较适合做控制。(放置游戏基本物理行为的代码,在Update之后执行)

LateUpdate() : 在每帧执行完毕调用,他在所有Update结束后才调用,比较适合于命令脚本的执行。官网上例子是摄像机的跟随,都是在所有Update操作完才跟进摄像机,不然就有可能出现摄像机已经推进了,但是视角里还未有角色的空帧出现。

OnEnable() : 当对象变为可用或激活状态时此函数被调用,OnEnable不能用于协同程序。(物体启动时被调用)

OnDisable() : 当对象变为不可用或非激活状态时此函数被调用。当物体销毁时它被调用,并且可用于任意清理代码。当脚本编译完成之后被重新加载时,OnDisable将被调用,OnEnable在脚本被载入后调用。(物体被禁用时调用)

OnGUI() : 绘制GUI时候触发。一般在这个函数里绘制GUI菜单。(GUI显示函数只能在OnGUI中调用)

4.查找脚本手册,了解GameObject,Transfrom,Component对象
4.1.分别翻译官方对三个对象的描述(Description)
GameObject :GameObjects are the fundamental objects in Unity that represent characters, props and scenery. They do not accomplish much in themselves but they act as containers for Components, which implement the real functionality.

翻译:游戏对象是Unity中表示游戏角色,游戏道具和游戏场景的基本对象。他们自身无法完成许多功能,但是他们构成了那些给予他们实体功能的组件的容器。

Transform :The Transform component determines the Position, Rotation, and Scale of each object in the scene. Every GameObject has a Transform.

翻译: 转换组件决定了游戏场景中每个游戏对象的位置,旋转和缩放比例。每个游戏对象都有转换组件。

Component :Components are the nuts & bolts of objects and behaviors in a game. They are the functional pieces of every GameObject.

翻译: 组件是游戏中对象和行为的细节。它是每个游戏对象的功能部分。

4.2.描述下图中 table 对象(实体)的属性、table 的 Transform 的属性、 table 的部件
Unity3D课程学习笔记

Table对象的属性:Tag属性用于区分游戏中不同类型的对象,Tag可以理解为一类元素的标记,可用GameObject.FindWithTag()来查询对象。GameObject.FindWithTag()只返回一个对象,如果想获取多个Tag为某值的对象,应该用GameObject.FindGameObjectsWithTag()。第一个选择框是activeSelf属性。Layer属性默认是Default。

Table的Transform属性:Position、Rotation、Scale

Table的部件:Mesh Filter、Box Collider、Mesh Renderer

4.3.用UML图描述三者的关系:
UML图如下所示:
Unity3D课程学习笔记

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

通过名字查找:

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

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

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

public static GameObect CreatePrimitive(PrimitiveTypetype)
遍历对象树:

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

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

6.资源预设(Prefabs)与 对象克隆 (clone)
6.1.预设(Prefabs)有什么好处?
预设类似于一个模板,通过预设可以创建相同属性的对象,这些对象和预设关联。一旦预设发生改变,所有通过预设实例化的对象都会产生相应的变化(适合批量处理)。

6.2.预设与对象克隆 (clone or copy or Instantiate of Unity Object) 关系?
对象克隆不受克隆本体的影响,因此A对象克隆的对象B不会因为A的改变而相应改变。

6.3.制作 table 预制,写一段代码将 table 预制资源实例化成游戏对象
Unity3D课程学习笔记

7.尝试解释组合模式(Composite Pattern / 一种设计模式)。使用 BroadcastMessage()方法向子对象发送消息
组合模式允许用户将对象组合成树形结构来表现”部分-整体“的层次结构,使得客户以一致的方式处理单个对象以及对象的组合。组合模式实现的最关键的地方是——简单对象和复合对象必须实现相同的接口。这就是组合模式能够将组合对象和简单对象进行一致处理的原因。

子类对象方法:

void recallMessage() { print("Hello!"); }
父类对象方法:

void Start () { this.BroadcastMessage("recallMessage"); }

8.编程实践,井字棋小游戏
井字棋小游戏其实只是一个2D游戏,具体实现过程并不是很难,主要是要掌握GUI的一些API的使用
本次作业主要用到GUI的一些API,GUI是指Graphic User Interface,是图形用户接口,主要提供可视化界面方面的接口

具体代码实现如下:
Unity3D课程学习笔记
Unity3D课程学习笔记
游戏的UI如下所示:
Unity3D课程学习笔记

另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


新闻名称:Unity3D课程学习笔记-创新互联
网页链接:http://pwwzsj.com/article/doodcc.html