温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Unity3D课程学习笔记

发布时间:2020-02-27 08:31:30 来源:网络 阅读:444 作者:qwe9897 栏目:游戏开发

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.

官方文档对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课程学习笔记

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI