《Unity企业内训》 |
版本程序员 |
做者面试 |
参与者数据库 |
完成日期编程 |
备注设计模式 |
Unity_Training_V01_1.0数组 |
严立钻性能优化 |
|
2018.09.11网络 |
|
|
|
|
|
|
##《Unity企业内训》发布说明:数据结构
++++“Unity企业内训”是对企业内非程序员岗位的Unity普及,好比产品运营等,让相关人员熟悉Unity开发过程,更了解程序员的开发流程和技能点;有利于沟通交流和产品需求提出及优化;并发
++++“Unity企业内训”定位是非程序员岗位,再次声明:程序员请绕行,产品运营美术等请进入;
##《Unity企业内训》目录:
++++Unity企业内训(目录):http://www.javashuo.com/article/p-oefbctlf-mn.html
#第1讲:Unity中C#开发基础
#第2讲:Unity引擎基础
#第3讲:Unity面向组件开发
#第4讲:Unity物理系统
#第5讲:UGUI
#第6讲:Unity动画系统
#第7讲:Unity特效渲染
#第8讲:Unity数据存储
#第9讲:Unity中Sqlite数据库
#第10讲:Unity中的资源管理
#第11讲:Unity中的性能优化
#第12讲:Unity网络
#第13讲:设计模式
#第14讲:UML类图
#第15讲:Shader编程
#第16讲:游戏框架
#第17讲:Lua热更新
#第18讲:UnityAPI
#第19讲:VIVE开发
#第20讲:Oculus开发
#第21讲:Unity案例分析
#第22讲:VRTK跨平台开发
#第3讲:Unity面向组件开发 |
#第3讲:Unity面向组件开发
++++3.一、Unity组件开发
++++3.二、Unity脚本组件
++++3.三、经常使用类
++++3.四、Prefab预设体
##3.一、Unity组件开发 |
++3.一、Unity组件开发
++++3.1.一、工程与应用程序
++++3.1.二、Unity工程开发框架
++++3.1.三、Unity面向组件开发思想
++++3.1.四、脚本组件的使用
###3.1.一、工程与应用程序 |
++3.1.一、工程与应用程序
++++立钻哥哥:新建立的Unity工程,在其目录文件夹中包含4个文件夹:Assets/、Library/、ProjectSettings/、Temp/等;
++++[Assets/]:里面存放的是项目所须要的资源;
++++[Library/]:里面存放的是所须要的库文件;
++++[ProjectSettings/]:里面存放的是工程设置文件;
++++[Temp/]:里面存放的是临时文件;
###3.1.二、Unity工程开发框架 |
++3.1.二、Unity工程开发框架
++++立钻哥哥:
++++工程,场景,游戏对象和组件的关系:
--一个工程里面有多个场景,至关于一个游戏有多个关卡;
--一个场景里面有多个游戏对象,至关于游戏中的不一样的元素;
--每一个游戏对象又有一个或者多个组件,游戏对象想要实现什么样的功能只须要加上相对应的组件便可;
###3.1.三、Unity面向组件开发思想 |
++3.1.三、Unity面向组件开发思想
++++立钻哥哥:Unity面向组件开发,游戏物体想要实现什么样的功能,只须要添加相对应的组件便可,此时会在Inspector检视面板中显示出来,一些属性值能够可视化的更改;
###3.1.四、脚本组件的使用 |
++3.1.四、脚本组件的使用
++++立钻哥哥:Unity2017以前版本自带Mono脚本编辑器,建立Mono应用程序;Unity2017以后推荐使用VS(Visual Studio),包括了整个软件生命周期中须要的大部分工具;
++++在Unity中经过菜单设置修改默认的脚本编辑器:[Edit]=>[Preferences]=>[External Tools]=>[External Script Editor];
++脚本组件
++++立钻哥哥:脚本是一种特殊的组件,它用于添加到游戏对象上以实现用户自定义的一些功能;
++++Unity主要支持C#来编写脚本;
++脚本的建立
++++立钻哥哥:在Project视窗Asset文件夹中点击右键,建立C#脚本,而后把建立的脚本拖放到游戏物体上便可;
++脚本的使用
++++立钻哥哥:双击建立的脚本组件,便可打开脚本;
using UnityEngine; using System.Collections; using System.Collections.Generic; using System;
public class MyClass : MonoBehaviour{ } //立钻哥哥:public class MyClass:MonoBehaviour{} |
++++说明:类名与脚本组件名一致,并自动的继承MonoBehaviour类;(类名与脚本名不同会出错)
##3.二、Unity脚本组件 |
++3.二、Unity脚本组件
++++3.2.一、Unity脚本类
++++3.2.二、MonoBehaviour类
++++3.2.三、脚本生命周期
++++3.2.四、经常使用调试方法
###3.2.一、Unity脚本类 |
++3.2.一、Unity脚本类
++++立钻哥哥:Unity中的经常使用脚本类可简单分为四大类:宏观控制类;游戏对象类;组件类;资源类;
++++[宏观控制类]:主要做用是针对Unity程序中的某一方面进行宏观控制;包括:应用程序类(Application)、输入类(Input)、图形输出类(GUI)、物理引擎类(Physics)、资源类(Resources)、时间类(Time)等;
++++[游戏对象类(GameObject)]:表示当前脚本挂载的游戏对象;
++++[组件类(Component)]:脚本开发中的组件类能够和图形界面中的检视面板对应起来;(每个游戏对象的细节设置与操控都须要借助组件类来完成)
++++[资源类]:资源通常都是在图形界面导入以后直接使用;
###3.2.二、MonoBehaviour类 |
++3.2.二、MonoBehaviour类
++++立钻哥哥:Unity脚本组件必须继承MonoBehaviour类;
++++继承自MonoBehaviour的脚本组件能够自动调用其封装好了的回调方法;
###3.2.三、脚本生命周期 |
++3.2.三、脚本生命周期
++++立钻哥哥:脚本生命周期:[Awake()]=>[OnEnable()]=>[Start()]=>[FixedUpdate()]=>[Update()]=>[LateUpdate()]=>[OnBecameVisible()]=>[OnGUI()]=>[OnBecameInvisible()]=>[OnDisable()]=>[OnDestroy()]=>[OnApplicationQuit()];
++++初始阶段:Awake()、OnEnable()、Start();
--Awake()唤醒:当物体载入时当即调用1次,经常使用于在游戏开始前进行初始化,能够判断当知足某种条件执行此脚本 this.enable = true;
--OnEnable()当可用:每当脚本对象启用时调用;
--Start()开始:物体载入且脚本对象启用时被调用1次;经常使用于数据或游戏逻辑初始化,执行时机晚于Awake();
++++物理阶段:FixedUpdate();
--FixedUpdate()固定更新:脚本启用后,固定时间被调用,适用于对游戏对象作物理操做,例如移动等;
--设置更新频率:[Edit]=>[Project Setting]=>[Time]=>[Fixed Timestep]值,默认为0.02s;
++++游戏逻辑:Update()、LateUpdate();
--Update()更新:脚本启用后,每次渲染场景时调用,频率与设备性能及渲染量有关;
--LateUpdate()延迟更新:在Update()函数被调用后执行,适用于跟随逻辑;
++++场景渲染:OnGUI()、OnBecameVisible()、OnBecameInvisible();
--OnGUI()渲染:渲染和处理GUI事件时调用;
--OnBecameVisible()当可见:当Mesh Renderer在任何相机上可见时调用;
--OnBecameInVisible()当不可见:当Mesh Renderer在任何相机上不可见时调用;
++++结束阶段:OnDisable()、OnDestroy()、OnApplicationQuit();
--OnDisable()当不可用:对象变为不可用和附属游戏对象非激活状态时此函数被调用;
--OnDestroy()当销毁:当脚本销毁或附属的游戏对象被销毁时调用;
--OnApplicationQuit()当程序结束:应用程序退出时被调用;
###3.2.四、经常使用调试方法 |
++3.2.四、经常使用调试方法
++++立钻哥哥:在学习和使用Unity时会常常调试代码,经常使用的调试方法有:第一种,在可能出错的行添加断点;第二种,选择打印消息的方式;
++调试方法1:在可能出错的行添加断点
++++立钻哥哥:
++调试方法2:打印消息的方式
++++立钻哥哥:经常使用打印消息的方式:一种是print,一种是Debug.Log();
++++[print()方法]:它是MonoBehaviour类的成员;当一个脚本继承MonoBehaviour时,才可使用Print方法;
++++[Debug方法]:是一个独立的、密闭的类;Debug任何地方均可以,建议使用Debug.Log()方法;
##3.三、经常使用类 |
++3.三、经常使用类
++立钻哥哥:API(Application Programming Interface)应用程序编程接口,是一些预先定义的函数;Unity引擎提供了丰富的组件和类库,为开发者提供了很是大的便利,熟练掌握和使用这些API对于提升游戏开发效率很重要;
++++3.3.一、Component类
++++3.3.二、GameObject类
++++3.3.三、Transform类
++++3.3.四、Vector3类
++++3.3.五、Quaternion类
++++3.3.六、Time类
++++3.3.七、Mathf类
###3.3.一、Component类 |
++3.3.一、Component类
++++立钻哥哥:Component类:gameObject、transform、tag、collider、renderer、rigidbody、GetComponent()、GetComponentInChildren()、GetComponents()、GetComponentsInChildren();
++++[gameObject]:组件附加的游戏对象;组件老是被附加到游戏对象上;
++++[transform]:附加到此游戏对象Transform组件(若是没有则为空);
++++[tag]:此游戏对象的标签;
++++[collider]:附加到此游戏对象的Collider(如无附加则为空);
++++[renderer]:附加到此游戏对象Renderer组件(若是没有则为空);
++++[rigidbody]:附加到此游戏对象Rigidbody组件(若是没有则为空);
++++[GetComponent()]:若是游戏对象有附加type类型的组件,则返回,若是没有则为空;
++++[GetComponentInChildren()]:返回此游戏对象上type类型的组件或任何它的子对象,使用深度优先搜索;
++++[GetComponents()]:返回此对象type类型的全部组件;
++++[GetComponentsInChildren()]:返回此游戏对象与其子对象全部type类型的组件;
###3.3.二、GameObject类 |
++3.3.二、GameObject类
++++立钻哥哥:GameObject类:tag、name、FindGameObjectsWithTag(string tag)、T GetComponent<T>()、SetActive(bool value)、FindWithTag(string tag);
++++经过tag获得游戏物体:
--static GameObject FindWithTag(string tag);
--GameObject.FindWithTag(“立钻哥哥”);
++++经过name获得游戏物体:
--static GameObject Find(string name);
--GameObject.Find(“立钻哥哥”);
++++[tag]:可读写属性,游戏物体的tag;
++++[name]:可读写属性,游戏物体的name;
++++[FindGameObjectsWithTag(string tag)]:静态方法,返回全部tag标识的物体,返回值是个数组;
++++[T GetComponent<T>()]:泛型实例方法,获得T类型的组件(强烈建议使用);
++++[SetActive(bool value)]:实例方法,设置游戏物体是不是活动的;
++++[FindWithTag(string tag)]:静态方法,获得tag标识的游戏物体;
###3.3.三、Transform类 |
++3.3.三、Transform类
++++立钻哥哥:Transform类:任何建立的游戏对象在场景中都会有位置,旋转和缩放最基本的信息,故该组件是必须存在的;
++++Transform组件做用:一、负责游戏对象的变换(位置,旋转和缩放);二、维持父子关系;
++++[position]:世界坐标系中transform的位置;
++++[localPosition]:相对于父物体的位置;
++++[eulerAngles]:欧拉角,旋转的角度;
++++[rotation]:世界坐标系中变换的四元数;
++++[parent]:物体父物体的Transform组件;
++++[root]:物体最高层次父物体的Transform组件;
++++[void Translate(Vector3 translation)]:使当前对象朝translation;
++++[void Rotate(Vector3 eulerAngles)]:按给定的欧拉角进行旋转;
++++[void RotateAround(Vector3 point, Vector3 axis, float angle)]:绕point点沿axis轴旋转angle度;
++++[Transform Find(string name)]:经过名字查找子物体;
++++[void LookAt(Transform target)]:使物体朝向target点;
###3.3.四、Vector3类 |
++3.3.四、Vector3类
++++立钻哥哥:Vector3类是封装了向量运算相关变量和方法的结构体;
++++Vector类的点乘、叉乘;
++点乘
++++立钻哥哥:点乘又称“点积”和“内积”;
++++几何意义:a*b = |a|*|b|*cos<a, b>:两个向量的单位向量相乘后再乘以两者夹角的余弦值;
++++代码:float dot = Vector3.Dot(Va, Vb);
++++点乘应用:对于标准化过的向量,点乘结果等于两向量夹角的余弦值;
++++计算两向量夹角:
float dot = Vector3.Dot(a.normalized, b.normalized); float angle = Mathf.Acos(dot) * Mathf.Rad2Deg; |
++叉乘
++++立钻哥哥:叉乘又称“叉积”或“外积”;
++++几何意义:结果为两个向量所组成面的垂直向量,模长为两向量模长乘积再乘夹角的正弦值;
++++脚本:Vector vector = Vector3.Cross(a, b);
++++叉乘应用:建立垂直于平面的向量;判断两条向量相对位置;
++Vector3类
++++立钻哥哥:Vector3封装了向量运算相关变量和方法的结构体;
++++[normalized]:标准化向量,方向不变,长度为1(只读);
++++[magnitude]:向量长度(只读);
++++[sqrMagnitude]:向量长度平方(只读);
++++[forward]:Vector3(0,0,1)的简码,Z轴正方向;
++++[up]:Vector(0,1,0)的简码,Y轴正方向;
++++[right]:Vector3(1,0,0)的简码,X轴正方向;
++++[void Normalize()]:标准化向量,长度为1;
++++[static Vector3 Lerp(Vector3 from, Vector3 to)]:两个向量之间的夹角;
++++[static float Distance(Vector3 a, Vector3 b)]:两个向量之间的距离;
###3.3.五、Quaternion类 |
++3.3.五、Quaternion类
++++立钻哥哥:Quaternion类:四元数;
++++[identity]:该四元数无旋转,经常使用在代码建立对象;
++++[LookRotation()]:建立一个旋转,沿着forward(z轴)而且头部沿着upwards(y轴)的约束注视;
++++四元数是左乘向量,表示将该向量按照四元数表示的角度旋转;
Vector3 point = new Vector3(0, 0, 10); Vector3 newPoint = Quaternion.Euler(0, 30, 0) * point; |
++避免万向节死锁
++++立钻哥哥:
this.transform.rotation *= Quaternion.Euler(0, 1, 0); == >可以使物体沿自身Y轴旋转;
|
this.transform.Rotate(Vector3 eulerAngles); ==>内部就是使用四元数相乘实现;
|
###3.3.六、Time类 |
++3.3.六、Time类
++++立钻哥哥:Time类:时间类;
++++[time]:从游戏开始到如今所用的时间(只读);
++++[deltaTime]:获取上一次Update()方法执行的时间到本次执行Update()方法时间的差值;
++++[fixedDeltaTime]:在物理和其余固定帧速率进行更新上一帧所消耗的时间,以秒计算;
++++[timeScale]:表示事件缩放,正常时间为1;
###3.3.七、Mathf类 |
++3.3.七、Mathf类
++++立钻哥哥:Mathf数学类封装了常见数学计算方法的结构体;
++++[Lerp()]:两个浮点数之间进行插值;
++++[Clamp()]:返回一个限制值;
++++[Sin()]:计算并返回浮点型的正弦值;
++++[Cos()]:计算并发挥浮点型的余弦值;
++++[Abs()]:计算并返回指定参数的绝对值;
++++[Max()]:返回两个值之中最大的值;
++++[Min()]:返回两个值之中最小的值;
++++[Sqr()]:返回平方根;
++++[PI()]:圆周率;
##3.四、Prefab预制体 |
++3.四、Prefab预制体
++++3.4.一、预制体概念
++++3.4.二、预制体实例化
###3.4.一、预制体概念 |
++3.4.一、预制体概念
++++立钻哥哥:Prefab预制体是一个游戏对象及其组件的集合,目的是使游戏对象及资源可以被重复使用,相同的游戏对象能够经过一个预制体来建立,此过程能够理解为实例化;
++++[预制体的生成]:把一个游戏对象从层级视图拖到工程视窗后就生成一个预制体;
###3.4.二、预制体实例化 |
++3.4.二、预制体实例化
++++立钻哥哥:预制体实例化:把预制体直接拖到层级视窗上,就会实例化一个游戏对象;
++++对预制体作出修改后,其所实例化的对象也会作出相应的改动;
++++经过预设体建立的游戏对象会在Inspector视窗出现Prefab;
--[Select]:点击Select能够选中建立该物体的预设体;
--[Revert]:更改实例化后的游戏物体,点击Revert,会取消更改;
--[Apply]:将该对象的信息同步到预设体,使用该预设体实例化的其余游戏对象也随之改变;
++预制体的使用
++++立钻哥哥:Instantiate(),预制体实例化;
static Object Instantiate(Object original, Vector3 position, Quaternion rotation); |
++++[original]:预制体;
++++[position]:位置;
++++[rotation]:旋转;
#第4讲:Unity物理系统 |
++++Unity企业内训(第4讲):http://www.javashuo.com/article/p-vfalurum-kz.html
++立钻哥哥推荐的拓展学习连接(Link_Url):
立钻哥哥推荐的拓展学习连接(Link_Url) |
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++Unity企业内训(目录):http://www.javashuo.com/article/p-oefbctlf-mn.html
++++Unity企业内训(第1讲):http://www.javashuo.com/article/p-ehlblkrj-mc.html
++++Unity企业内训(第2讲):http://www.javashuo.com/article/p-tiecmlwc-ma.html
++++Unity企业内训(第3讲):http://www.javashuo.com/article/p-mlpucjnv-ma.html
++++VR实验:以太网帧的构成:http://www.javashuo.com/article/p-fnfhdcgt-bp.html
++++FrameVR示例V0913:http://www.javashuo.com/article/p-xnlrngai-cw.html
++++计算机组成原理(教材篇):http://www.javashuo.com/article/p-sejaldpf-kr.html
++++HTC_VIVE开发基础:http://www.javashuo.com/article/p-mhcdmelt-bt.html
++++Oculus杂谈:http://www.javashuo.com/article/p-unmgvyjw-ce.html
++++Oculus安装使用:http://www.javashuo.com/article/p-ulvvimkb-cr.html
++++VRTK杂谈:http://www.javashuo.com/article/p-gsryrkjk-eb.html
++++VRTK代码结构(目录):http://www.javashuo.com/article/p-wfilzqyd-es.html
++++VRTK(SceneResources):http://www.javashuo.com/article/p-ryptqvzl-hm.html
++++Unity5.x用户手册:http://www.javashuo.com/article/p-ufnzpmga-s.html
++++Unity面试题ABC:http://www.javashuo.com/article/p-mwacxwca-gm.html
++++Unity面试题D:http://www.javashuo.com/article/p-wuwcrclr-s.html
++++Unity面试题E:http://www.javashuo.com/article/p-hmabbtmc-ba.html
++++Unity面试题F:http://www.javashuo.com/article/p-olslkfao-cq.html
++++Cocos2dx面试题:http://www.javashuo.com/article/p-daozmsii-cz.html
++++Lua快速入门篇(Xlua拓展):http://www.javashuo.com/article/p-rrszijom-cm.html
++++Lua快速入门篇(XLua教程):http://www.javashuo.com/article/p-pduvmusb-ho.html
++++Lua快速入门篇(基础概述):http://www.javashuo.com/article/p-shernvtt-u.html
++++框架知识点:http://www.javashuo.com/article/p-eufbowgf-u.html
++++游戏框架(UI框架夯实篇):http://www.javashuo.com/article/p-cvemoigb-cu.html
++++游戏框架(初探篇):http://www.javashuo.com/article/p-zfpoilbc-hy.html
++++设计模式简单整理:http://www.javashuo.com/article/p-rngqugib-hg.html
++++专题:设计模式(精华篇):http://www.javashuo.com/article/p-nbohnaya-hw.html
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity案例(Vehicle):http://www.javashuo.com/article/p-wxnfscgy-dy.html
++++UML类图:http://www.javashuo.com/article/p-sxberuew-bm.html
++++Unity知识点0001:http://www.javashuo.com/article/p-ryvdxxjr-ep.html
++++Unity知识点0008:http://www.javashuo.com/article/p-kxgstxls-gu.html
++++U3D_Shader编程(第一篇:快速入门篇):http://www.javashuo.com/article/p-kyppgrac-gz.html
++++U3D_Shader编程(第二篇:基础夯实篇):http://www.javashuo.com/article/p-qkyowtli-hv.html
++++Unity引擎基础:http://www.javashuo.com/article/p-beommoeb-ka.html
++++Unity面向组件开发:http://www.javashuo.com/article/p-eigmuvut-dt.html
++++Unity物理系统:http://www.javashuo.com/article/p-nqvvciwv-kd.html
++++Unity2D平台开发:http://www.javashuo.com/article/p-ycaagdtj-hs.html
++++UGUI基础:http://www.javashuo.com/article/p-rukxwckw-mc.html
++++UGUI进阶:http://www.javashuo.com/article/p-wcatruhq-gt.html
++++UGUI综合:http://www.javashuo.com/article/p-dkccmqii-gg.html
++++Unity动画系统基础:http://www.javashuo.com/article/p-mbrdouxy-dq.html
++++Unity动画系统进阶:http://www.javashuo.com/article/p-aqaqpbkh-bp.html
++++Navigation导航系统:http://www.javashuo.com/article/p-dswwllas-t.html
++++Unity特效渲染:http://www.javashuo.com/article/p-ckojjyfj-bp.html
++++Unity数据存储:http://www.javashuo.com/article/p-bvlzynso-m.html
++++Unity中Sqlite数据库:http://www.javashuo.com/article/p-ejutsbxl-ca.html
++++WWW类和协程:http://www.javashuo.com/article/p-dbwmhsav-cy.html
++++Unity网络:http://www.javashuo.com/article/p-sqrlntgh-dw.html
++++C#事件:http://www.javashuo.com/article/p-zmwruvql-gm.html
++++C#委托:http://www.javashuo.com/article/p-uozpymaf-gh.html
++++C#集合:http://www.javashuo.com/article/p-sfqfdqsf-ex.html
++++C#泛型:http://www.javashuo.com/article/p-xrttqngo-ee.html
++++C#接口:http://www.javashuo.com/article/p-vhlfplgv-dm.html
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:http://www.javashuo.com/article/p-olslkfao-cq.html
++++C#数据类型:http://www.javashuo.com/article/p-hmabbtmc-ba.html
++++Unity3D默认的快捷键:http://www.javashuo.com/article/p-wuwcrclr-s.html
++++游戏相关缩写:http://www.javashuo.com/article/p-mwacxwca-gm.html
++++UnityAPI.Rigidbody刚体:http://www.javashuo.com/article/p-phaztrtw-w.html
++++UnityAPI.Material材质:http://www.javashuo.com/article/p-ntyoqcng-q.html
++++UnityAPI.Android安卓:http://www.javashuo.com/article/p-fyyfgkck-q.html
++++UnityAPI.AndroidJNI安卓JNI:http://www.javashuo.com/article/p-kvxjsnzf-w.html
++++UnityAPI.Transform变换:http://www.javashuo.com/article/p-bfgrrhxl-cq.html
++++UnityAPI.WheelCollider轮碰撞器:http://www.javashuo.com/article/p-smnaoooi-cn.html
++++JSON数据结构:http://www.javashuo.com/article/p-dljbtddn-g.html
++++CocosStudio快速入门:http://www.javashuo.com/article/p-qldbaqqa-v.html
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
--_--VRunSoft:lovezuanzuan--_--