版本 |
作者 |
参与者 |
完成日期 |
备注 |
YanlzVR_Unity_V01_1.0 |
严立钻 |
|
2020.04.26 |
|
|
|
|
|
|
++++“Unity从入门到放弃”:是对“Unity”的基础探索;【VR云游戏】:Unity+SteamVR+云技术+5G+AI:其中Unity主要开发语言就是C#,所以在进入Unity开发前先对C#进行一轮基础夯实,熟悉C#之后,那就可以进行Unity开发了,最后结合SteamVR或VRTK等插件进行VR开发了;
++++“Unity从入门到放弃”:定位在一个科普类知识,“从入门到放弃”是一个系列,是最基础的,也是最有参考价值的!
++++【Unity从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/105776475
++++【C#从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/105757329
++++【Linux从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/104176967
++++【C++从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/103849127
++++【Python从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/101393069
++++【Qt从入门到放弃】:https://blog.csdn.net/VRunSoftYanlz/article/details/100904511
#第一篇:C#基础篇 |
#第2讲:Unity引擎基础 |
++++2.1、Unity引擎简介
++++2.2、用户界面介绍
++++2.3、Terrain地形系统
++++2.4、3D基础理论
##2.1、Unity引擎简介 |
++++2.2.1、Unity3D简介
++++2.2.2、著名企业的加入
++++2.2.3、游戏引擎
++++2.2.4、Unity特点
++++2.2.5、Unity发展历史
++++2.2.6、使用Unity开发的游戏
###2.2.1、Unity3D简介 |
++++立钻哥哥:由Unity Technologies公司开发的跨平台游戏引擎;
++++[虚拟现实(Virtual Reality)]:虚拟仿真技术,是当今世界前沿科学之一;利用电脑模拟产生一个三维空间的虚拟世界,通过各种输入设备和虚拟环境中的事物进行交互,让使用者身临其境的观察空间内的事物;
###2.2.2、著名企业的加入 |
++++立钻哥哥:2015年5月,前Epic Games总裁,迈克.卡普斯(Mike Capps)加入Unity;
###2.2.3、游戏引擎 |
++++立钻哥哥:游戏引擎是一款游戏最最核心的代码,程序的框架;包含:渲染引擎、物理引擎、碰撞检测系统、音效、脚本引擎、动画系统、人工智能、网络引擎、以及场景管理;
++++使用游戏引擎,开发者可以重用已有的核心技术,将精力集中在游戏逻辑和设计上,从而简单快速的创建游戏;
###2.2.4、Unity特点 |
++++立钻哥哥:Unity特点:开发效率高;跨平台;
###2.2.5、Unity发展历史 |
++++立钻哥哥:2004年丹麦三位年轻人决定开发;2005年发布Unity1.0版本;
++++2007年发布Unity2.0版本;2010年发布Unity3.0版本;
++++2015年发布Unity5.0版本;
++++2012年Unity上海分公司成立,正式进军中国市场;
###2.2.6、使用Unity开发的游戏 |
++++立钻哥哥:Unity成功案例:王者荣耀;
##2.2、用户界面介绍 |
++++2.2.1、Unity界面布局
++++2.2.2、资源商店的使用
++++2.2.3、创建游戏对象
++++2.2.4、常用快捷键的使用
###2.2.1、Unity界面布局 |
++++立钻哥哥:Unity界面布局一般包括:Project(项目资源面板)、Hierarchy(层次面板)、Scene(场景面板)、Game(游戏面板)、Inspector(检视面板)等;
++++[Project(项目资源面板)]:存放游戏的所有资源,例如场景、脚本、模型、音频、图片等文件;
++++[Hierarchy(层次面板)]:显示当前场景中所有游戏对象的层次关系;包含了当前场景的游戏对象(GameObject),其中一些是资源文件的实例,如3D模型和其他预制组件的实例;
++++[Scene(场景面板)]:提供设计游戏界面的可视化面板;
++++[Game(游戏面板)]:预览游戏运行后的界面;
++++[Inspector(检视面板)]:显示当前选定游戏对象附加的组件及其属性信息;
###2.2.2、资源商店的使用 |
++++立钻哥哥:在Unity引擎中打开Asset Store视图即可浏览资源的商城;通过简单的注册流程便可下载所需要的资源;
++++Unity中打开AssetStore快捷键:[Ctrl + 9]
++++Asset Store链接:https://assetstore.unity.com/
###2.2.3、创建游戏对象 |
++++立钻哥哥:游戏对象也称为游戏物体,游戏中的一个角色,一个模型甚至环境特效都可以称为游戏对象;
++++点击菜单[GameObject]即可创建Unity提供的基本游戏对象:
###2.2.4、常用快捷键的使用 |
++++立钻哥哥:常用快捷键包括:变换工具、定点吸附、缩放场景、移动场景、设置物体为视图中心、围绕物体旋转缩放、摄像机视角调整等;
++++[变换工具]:Q移动场景;W移动物体;E旋转物体;R缩放物体;
++++[定点吸附]:选择物体后按住V键,定位定点,再拖拽到目标物体某个定点上;
++++[缩放场景]:按下鼠标滚轮拖动场景,滚动滚轮缩放场景;
++++[移动场景]:鼠标右键旋转场景;点击Q键后,通过左键移动场景;
++++[场景漫游]:点击右键同时按下W/S/A/D/Q/E键可以实现场景漫游;
++++[设置物体为视图中心]:在Scene面板选中物体后按F键;或在Hierarchy面板双击物体,可将物体设置为场景视图的中心;
++++[围绕物体旋转缩放]:按住Alt键同时通过鼠标左键围绕某物体旋转场景,鼠标右键缩放场景;
++++[调整摄像机视角]:选中摄像机,按[Shift+Ctrl+F]调整摄像机视角;
##2.3、Terrain地形系统 |
++++2.3.1、创建地形
++++2.3.2、编辑地形:高度、地形纹理等
++++2.3.3、树和草的创建与编辑
++++2.3.4、场景漫游
###2.3.1、创建地形 |
++++立钻哥哥:创建Terrain地形:[GameObject]菜单=>[3D Object]=>[Terrain];
###2.3.2、编辑地形:高度、地形纹理等 |
++++立钻哥哥:选中地形(Terrain)后,可以在检视器中查看地形编辑工具;
###2.3.3、树和草的创建与编辑 |
++++立钻哥哥:选中地形(Terrain)后,可以在第四项和第五项用来创建和编辑树和草;
++++选择[Edit Trees ...]和[Edit Details ...]导入树和草资源,刷到地形上即可;
###2.3.4、场景漫游 |
++++立钻哥哥:导入[UnityStandardAssetsSetup(标准的资源)]中的角色控制器;
##2.4、3D基础理论 |
++++2.4.1、坐标系
++++2.4.2、向量
++++2.4.3、网格
++++2.4.4、纹理
###2.4.1、坐标系 |
++++立钻哥哥:Unity中采用左手坐标系(拇指、食指和其余手指分别代表:X、Y、Z轴正方向);
++++立钻哥哥:世界坐标系是一个特殊的坐标系,它建立了描述其他坐标系所需要的参考框架;
++++世界坐标系简言之:东、西、南、北;
++++立钻哥哥:本地坐标系(物体坐标)和特定物体相关联的坐标系;
++++每个物体都有它们独立的坐标系,简言之:前、后、左、右;
++++立钻哥哥:视图分为:ISO(正交模式)和Persp(透视模式);
++++[ISO(正交模式)]:国际标准视图(远近一样大,适合2D布局);
++++[Persp(透视模式)]:近大远小,适合3D布局;
###2.4.2、向量 |
++++立钻哥哥:向量:有大小和方向的量,如速度和位移就是向量;
++++[标量]:只有大小没有方向的量,如速率和长度就是标量;
++++立钻哥哥:c=a+b;
++++立钻哥哥:通常用于获取从一个对象到另一个对象的方向和距离;
++++在减法中,两个参数的顺序会影响结果,b-a方向从点a指向点b,大小为ab线段的长度;
++++立钻哥哥:如果一个非零向量n与平面a垂直,则称向量n为平面a的法向量;
###2.4.3、网格 |
++++立钻哥哥:在图形学中,多边形网格不过是一个多边形列表,三角网格就是全部由三角形组成的多边形网格,任意多边形网格都可以转换成三角网格;
++++四个点的面不一定是一个平面(一张纸对折场景);
++++立钻哥哥:Unity中常见网格组件:Mesh Filter(网格筛选器)、Mesh Renderer(网格渲染器);
++++[网格筛选器(Mesh Filter)]:选择使用什么样的网格;
++++[网格渲染器(Mesh Renderer)]:渲染网格;
###2.4.4、纹理 |
++++立钻哥哥:纹理(Textures)是附加到物体表面的贴图;
++++立钻哥哥:材质是物体的质地,指色彩、纹理、光滑度、透明度、反射率、折射率、发光度等;实际上就是Shader的实例;
++++[Shader着色器]:专门用来渲染3D图形的技术,可以使纹理以某种方式展示;实际就是一段嵌入到渲染管线中的程序,可以控制GPU运算图像效果的算法;
++++立钻哥哥:[纹理+shader]=>[材质Material]=>GameObject;
#第3讲:Unity面向组件开发 |
++++3.1、Unity组件开发
++++3.2、Unity脚本组件
++++3.3、常用类
++++3.4、Prefab预设体
##3.1、Unity组件开发 |
++++3.1.1、工程与应用程序
++++3.1.2、Unity工程开发框架
++++3.1.3、Unity面向组件开发思想
++++3.1.4、脚本组件的使用
###3.1.1、工程与应用程序 |
++++立钻哥哥:新创建的Unity工程,在其目录文件夹中包含4个文件夹:Assets/、Library/、ProjectSettings/、Temp/等;
++++[Assets/]:里面存放的是项目所需要的资源;
++++[Library/]:里面存放的是所需要的库文件;
++++[ProjectSettings/]:里面存放的是工程设置文件;
++++[Temp/]:里面存放的是临时文件;
###3.1.2、Unity工程开发框架 |
++++立钻哥哥:
++++工程,场景,游戏对象和组件的关系:
--一个工程里面有多个场景,相当于一个游戏有多个关卡;
--一个场景里面有多个游戏对象,相当于游戏中的不同的元素;
--每个游戏对象又有一个或者多个组件,游戏对象想要实现什么样的功能只需要加上相对应的组件即可;
###3.1.3、Unity面向组件开发思想 |
++++立钻哥哥:Unity面向组件开发,游戏物体想要实现什么样的功能,只需要添加相对应的组件即可,此时会在Inspector检视面板中显示出来,一些属性值可以可视化的更改;
###3.1.4、脚本组件的使用 |
++++立钻哥哥: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.2、Unity脚本组件 |
++++3.2.1、Unity脚本类
++++3.2.2、MonoBehaviour类
++++3.2.3、脚本生命周期
++++3.2.4、常用调试方法
###3.2.1、Unity脚本类 |
++++立钻哥哥:Unity中的常用脚本类可简单分为四大类:宏观控制类;游戏对象类;组件类;资源类;
++++[宏观控制类]:主要作用是针对Unity程序中的某一方面进行宏观控制;包括:应用程序类(Application)、输入类(Input)、图形输出类(GUI)、物理引擎类(Physics)、资源类(Resources)、时间类(Time)等;
++++[游戏对象类(GameObject)]:表示当前脚本挂载的游戏对象;
++++[组件类(Component)]:脚本开发中的组件类可以和图形界面中的检视面板对应起来;(每一个游戏对象的细节设置与操控都需要借助组件类来完成)
++++[资源类]:资源一般都是在图形界面导入之后直接使用;
###3.2.2、MonoBehaviour类 |
++3.2.2、MonoBehaviour类
++++立钻哥哥:Unity脚本组件必须继承MonoBehaviour类;
++++继承自MonoBehaviour的脚本组件可以自动调用其封装好了的回调方法;
###3.2.3、脚本生命周期 |
++++立钻哥哥:脚本生命周期:[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.4、常用调试方法 |
++++立钻哥哥:在学习和使用Unity时会经常调试代码,常用的调试方法有:第一种,在可能出错的行添加断点;第二种,选择打印消息的方式;
++++立钻哥哥:
++++立钻哥哥:常用打印消息的方式:一种是print,一种是Debug.Log();
++++[print()方法]:它是MonoBehaviour类的成员;当一个脚本继承MonoBehaviour时,才可以使用Print方法;
++++[Debug方法]:是一个独立的、密闭的类;Debug任何地方都可以,建议使用Debug.Log()方法;
##3.3、常用类 |
++立钻哥哥:API(Application Programming Interface)应用程序编程接口,是一些预先定义的函数;Unity引擎提供了丰富的组件和类库,为开发者提供了非常大的便利,熟练掌握和使用这些API对于提高游戏开发效率很重要;
++++3.3.1、Component类
++++3.3.2、GameObject类
++++3.3.3、Transform类
++++3.3.4、Vector3类
++++3.3.5、Quaternion类
++++3.3.6、Time类
++++3.3.7、Mathf类
###3.3.1、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.2、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.3、Transform类 |
++++立钻哥哥:Transform类:任何创建的游戏对象在场景中都会有位置,旋转和缩放最基本的信息,故该组件是必须存在的;
++++Transform组件作用:1、负责游戏对象的变换(位置,旋转和缩放);2、维持父子关系;
++++[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.4、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封装了向量运算相关变量和方法的结构体;
++++[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.5、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.6、Time类 |
++++立钻哥哥:Time类:时间类;
++++[time]:从游戏开始到现在所用的时间(只读);
++++[deltaTime]:获取上一次Update()方法执行的时间到本次执行Update()方法时间的差值;
++++[fixedDeltaTime]:在物理和其他固定帧速率进行更新上一帧所消耗的时间,以秒计算;
++++[timeScale]:表示事件缩放,正常时间为1;
###3.3.7、Mathf类 |
++++立钻哥哥:Mathf数学类封装了常见数学计算方法的结构体;
++++[Lerp()]:两个浮点数之间进行插值;
++++[Clamp()]:返回一个限制值;
++++[Sin()]:计算并返回浮点型的正弦值;
++++[Cos()]:计算并发挥浮点型的余弦值;
++++[Abs()]:计算并返回指定参数的绝对值;
++++[Max()]:返回两个值之中最大的值;
++++[Min()]:返回两个值之中最小的值;
++++[Sqr()]:返回平方根;
++++[PI()]:圆周率;
##3.4、Prefab预制体 |
++++3.4.1、预制体概念
++++3.4.2、预制体实例化
###3.4.1、预制体概念 |
++++立钻哥哥:Prefab预制体是一个游戏对象及其组件的集合,目的是使游戏对象及资源能够被重复使用,相同的游戏对象可以通过一个预制体来创建,此过程可以理解为实例化;
++++[预制体的生成]:把一个游戏对象从层级视图拖到工程视窗后就生成一个预制体;
###3.4.2、预制体实例化 |
++++立钻哥哥:预制体实例化:把预制体直接拖到层级视窗上,就会实例化一个游戏对象;
++++对预制体做出修改后,其所实例化的对象也会做出相应的改动;
++++通过预设体创建的游戏对象会在Inspector视窗出现Prefab;
--[Select]:点击Select可以选中创建该物体的预设体;
--[Revert]:更改实例化后的游戏物体,点击Revert,会取消更改;
--[Apply]:将该对象的信息同步到预设体,使用该预设体实例化的其他游戏对象也随之改变;
++++立钻哥哥:Instantiate(),预制体实例化;
static Object Instantiate(Object original, Vector3 position, Quaternion rotation); |
++++[original]:预制体;
++++[position]:位置;
++++[rotation]:旋转;
#第4讲:Unity物理系统 |
++++4.1、人机交互
++++4.2、碰撞器
++++4.3、刚体
++++4.4、碰撞检测
++++4.5、触发事件
++++4.6、物理材质
++++4.7、射线
##4.1、人机交互 |
++++4.1.1、Input类简介
++++4.1.2、键盘输入的常用方法
++++4.1.3、输入管理器
++++4.1.4、鼠标的属性和方法
###4.1.1、Input类简介 |
++++立钻哥哥:Input类是输入系统的接口,使用这个类能够读取输入管理器设置的按键,以及访问移动设备的多点触控或加速感应数据,可以通过该类来实现外部设备控制游戏场景里面的物体;
###4.1.2、键盘输入的常用方法 |
++++立钻哥哥:键盘输入的常用方法:GetKey()、GetKeyDown()、GetKeyUp();
++++[GetKey()]:按键按下期间返回true;
++++[GetKeyDown()]:按键按下的第一帧返回true;
++++[GetKeyUp()]:按键松开的第一帧返回true;
###4.1.3、输入管理器 |
++++立钻哥哥:Unity提供了输入管理器,在输入管理器中我们可以自定义一些虚拟的轴,通过获取这些轴的数值来让物体旋转移动;
++++[输入管理器(InputManager)]:[Edit]=>[Project Settings]=>[Input]:打开输入管理器;
++++通过名字得到虚拟的值:
static float GetAxis(string axisName); float hor = Input.GetAxis(“Horizontal”); |
###4.1.4、鼠标的属性和方法 |
++++立钻哥哥:鼠标的常用属性和方法:mousePosition、GetMouseButtonDown()、GetMouseButtonUp()、GetMouseButton()、GetAxis(“Mouse X”)、GetAxis(“Mouse Y”)、GetAxis(“Mouse ScrollWheel”);
++++[mousePosition]:得到当前鼠标位置;
++++[GetMouseButtonDown()]:鼠标按键按下的第一帧返回true;
++++[GetMouseButtonUp()]:鼠标按键松开的第一帧返回true;
++++[GetMouseButton()]:鼠标按键按下期间一直返回true;
++++[GetAxis(“Mouse X”)]:得到一帧内鼠标在水平方向的移动距离;
++++[GetAxis(“Mouse Y”)]:得到一帧内鼠标在垂直方向的移动距离;
++++[GetAxis(“Mouse ScrollWheel”)]:获取鼠标滚轮的值;
##4.2、碰撞器 |
++++4.2.1、Collider碰撞器
++++4.2.2、加上碰撞器的游戏对象可响应的回调
###4.2.1、Collider碰撞器 |
++++立钻哥哥:当我们创建一个Cube的时候会自带一个[Box Collider]这样的一个组件;
++++立钻哥哥:对于规则的游戏物体可以使用引擎提供的碰撞器;对于一些大的场景,其碰撞网格可以由建模师提供;
###4.2.2、加上碰撞器的游戏对象可响应的回调 |
++++立钻哥哥:加上碰撞器的游戏对象就可以响应系统写好的几个回调方法;
++++[OnMouseDown()]:鼠标在Collider之上,按下鼠标,该事件即被触发;
++++[OnMouseDrag()]:鼠标在Collider之上,当鼠标拖动时触发;
++++[OnMouseEnter()]:移动鼠标进入Collider区域的时候,该事件被触发;
++++[OnMouseExit()]:移动鼠标移出Collider区域的时候,该事件被触发;
++++[OnMouseOver()]:鼠标处于Collider之上时,每帧都会调用该事件;
++++[OnMouseUp()]:当鼠标弹起的时候,该事件被触发调用;
++++[OnMouseUpAsButton()]:当鼠标在同一个Collider上,按下又弹起的情况下会触发调用该事件;
##4.3、刚体 |
++++4.3.1、刚体的作用
++++4.3.2、常用属性
++++4.3.3、常用方法
###4.3.1、刚体的作用 |
++++立钻哥哥:在游戏中使用物体引擎可以真实的模拟出现实世界中的一些物理效果,例如重力,摩擦力,碰撞等;
++++在Unity中使用的是PhysicX物理引擎,该引擎可以在3D世界中模拟需要的效果,它渲染的游戏画面非常的逼真,可以给玩家身临其境的感觉;
++++在Unity中要使一个物体受物理引擎的控制,主要是通过刚体组件来实现的;
++++刚体的作用:重力、反作用力、阻力、外加力等;
++++[重力]:自由落体;
++++[反作用力]:例如,与其它物体碰撞;
++++[阻力]:受到阻力会慢慢停止运动;
++++[外加力]:可以给物体施加一个外力;
###4.3.2、常用属性 |
++++立钻哥哥:有了刚体组件(Rigidbody)就意味着有刚体类,手动的给物体添加力这就用到了刚体的一些属性和方法;
++++[velocity]:刚体的速度;
++++[angularVelocity]:刚体的角速度;
++++[drag]:物体的阻力;
++++[angularDrag]:物体的角阻力;
++++[mass]:刚体的质量;
++++[useGravity]:是否受重力影响;
++++[isKinematic]:是否使用动力学;
++++[freezeRotation]:是否冻结旋转;
++++[collisionDetectionMode]:碰撞检测模式;
++++[position]:刚体位置;
++++[rotation]:刚体旋转;
###4.3.3、常用方法 |
++++立钻哥哥:Rigidbody类常用方法:AddForce()、AddExplosionForce()、AddForceAtPosition()、AddRelativeForce()、AddRelativeForce()、AddRelativeTorque()、MovePosition();
++++[AddForce()]:给刚体添加一个力;
++++[AddExplosionForce()]:给刚体添加一个力,模拟爆炸效果;
++++[AddForceAtPosition()]:在指定的位置添加一个力;
++++[AddRelativeForce()]:添加相对力;
++++[AddRelativeTorque()]:添加相对力矩;
++++[MovePosition()]:使用刚体移动物体到指定位置;
##4.4、碰撞检测 |
++++4.4.1、碰撞的条件
++++4.4.2、碰撞分类
++++4.4.3、回调方法
###4.4.1、碰撞的条件 |
++++立钻哥哥:两个物体发生碰撞的时候会有一些炫酷的碰撞效果,像赛车游戏车辆相撞会有火花效果;
++++比如王者荣耀,玩家能不能穿过防御塔,都用到碰撞检测;
++++条件1:发生碰撞的两个物体都必须带有[Collider];
++++条件2:发生碰撞的两个物体至少有一个带有物体[Rigidbody];
++++条件3:发生碰撞的两个物体必须有相对运动;
###4.4.2、碰撞分类 |
++++立钻哥哥:碰撞分类:静态碰撞器[Static Collider]、刚体碰撞器[Rigidbody Collider]、运动学刚体碰撞器[isKinematic];
++++[静态碰撞器(Static Collider)]:只有碰撞器没有刚体的物体;现象:保持静止或者轻微移动,如平面、树木;
++++[刚体碰撞器(Rigidbody Collider)]:具有刚体和碰撞器的物体;现象:完全受物理引擎影响;
++++[运动学刚体碰撞器(IsKinematic)]:带刚体,且勾选“Is Kinematic”,此碰撞器不能添加力,只能通过transform移动;
###4.4.3、回调方法 |
++++立钻哥哥:获取两物体碰撞,Unity提供了回调方法:OnCollisionEnter()、OnCollisionStay()、OnCollisionExit();
++++[OnCollisionEnter(Collision other)]:碰撞开始一瞬间被调用;
++++[OnCollisionStay(Collision other)]:一直保持碰撞状态时被调用;
++++[OnCollisionExit(Collision other)]:碰撞分离的一瞬间被调用;
##4.5、触发事件 |
++++4.5.1、物体的空间检测
++++4.5.2、触发器
++++4.5.3、回调方法
###4.5.1、物体的空间检测 |
++++立钻哥哥:判断一个角色是否在某个空间区域,除了直接计算Transform组件的position值外,还可以利用触发检测;
###4.5.2、触发器 |
++++立钻哥哥:触发器事件执行的条件:两个物体上都要带碰撞器(Collider),至少带有一个刚体(Rigidbody),并且两物体至少有一个把触发器打开(IsTrigger);
###4.5.3、回调方法 |
++++立钻哥哥:触发器的回调方法:OnTriggerEnter()、OnTriggerStay()、OnTriggerExit();
++++[OnTriggerEnter(Collider other)]:进入触发器的时候调用一次;
++++[OnTriggerStay(Collider other)]:处于某个触发器之中的时候持续调用;
++++[OnTriggerExit(Collider other)]:退出触发器的时候调用一次;
++++立钻哥哥:事件传入参数[Collider other]中的Collider参数:attached、bounds、enabled、isTrigger、material、sharedMaterial;
##4.6、物理材质 |
++++4.6.1、物理材质的创建
++++4.6.2、物理材质属性设置
++++4.6.3、物理材质的使用
###4.6.1、物理材质的创建 |
++++立钻哥哥:在Project窗口中点击右键【Create => Physic Material】创建物理材质;
++++物理材质用于调整:摩擦力和反弹力;
###4.6.2、物理材质属性设置 |
++++立钻哥哥:物理材质属性:动态摩擦系数(Dynamic Friction)、静态摩擦系数(Static Friction)、反弹系数(Bounciness)、组合摩擦力(Friction Combine)、组合弹力(Bounce Combine);
++++[Friction Combine(组合摩擦力)]:Average、Minimun、Multiply、Maxinum;
###4.6.3、物理材质的使用 |
++++立钻哥哥:把创建好的物理材质拖到“Box Collider”的“Material”;
##4.7、射线 |
++++4.7.1、射线碰撞简介
++++4.7.2、射线的创建
++++4.7.3、射线碰撞的应用
###4.7.1、射线碰撞简介 |
++++立钻哥哥:思考如何实现物体移动到鼠标点击的位置;
++++立钻哥哥:Unity提供了射线机制,通过虚拟射线检测所碰撞到的物体;
###4.7.2、射线的创建 |
++++立钻哥哥:创建射线:Ray ray = new Ray();
public Ray(Vector3 orgin, Vector3 direction); |
++++[origin]:射线发射的原点;
++++[direction]:射线发射的方向;
Ray ray = new Ray(transform.position, transform.forward); |
###4.7.3、射线碰撞的应用 |
++++立钻哥哥:使用Physics类的Raycast()方法实现射线碰撞检测功能;
bool Raycast(Ray ray, out RaycastHit hitInfo); ++++[ray]:要发射的射线; ++++[hitInfo]:碰撞信息;
|
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); ++++立钻哥哥:从主摄像机到鼠标点击位置创建一条射线;
|
#第5讲:UGUI |
++++5.1、UGUI概述
++++5.2、UGUI画布
++++5.3、UGUI基本控件
++++5.4、Canvas三种模式
++++5.5、布局控件
++++5.6、拖动效果
++++5.7、回调事件
++++5.8、UGUI背包系统
##5.1、UGUI概述 |
++++5.1.1、Unity界面发展史
++++5.1.2、UGUI特点
++++5.1.3、UGUI优点
###5.1.1、Unity界面发展史 |
++++立钻哥哥:【onGUI】=>【GUI插件 NGUI】=>【新版本界面 UGUI】;
++++[GUI]:Graphical User Interface(图形用户界面):是指采用图形方式显示的计算机操作用户界面;
###5.1.2、UGUI特点 |
++++立钻哥哥:新的UI系统是从Unity4.6开始被集成到Unity编译器中的;
++++对于开发者而言的三个优点:效率高效果好;易于使用和扩展;与Unity的兼容性高;
++++新的UGUI系统具有的特点:
--1、引擎内置,结合更加紧密;
--2、运行稳定,操作方便;
###5.1.3、UGUI优点 |
++++立钻哥哥:UGUI与老版本的onGUI相比:
++++1、独立的坐标体系;
++++2、全新的事件机制;
++++3、更佳高效率的运转效率;
++++1、由 NGUI创始人参与开发;
++++2、与Unity结合更加密切;
++++3、自适应系统更加完善;
++++4、更方便的深度处理;
++++5、省去Altas,直接使用Sprite Packer;
##5.2、UGUI画布Canvas |
++++5.2.1、创建UGUI控件
++++5.2.2、Canvas画布
###5.2.1、创建UGUI控件 |
++++立钻哥哥:
++++[第一种方式]:在Hierarchy当中通过[右键]=>[UI]=>找到相应的UI控件;
++++[第二种方式]:通过工具栏[GameObject]=>[UI]=>找到相应的UI控件;
###5.2.2、Canvas画布 |
++++立钻哥哥:当创建任意一个UI控件的时候可以看到在层级视图当中,不但生成我们创建的控件,还会同时创建一个Canvas和EventSystem;
++++UGUI画布也称为Canvas,UGUI是所有控件的父类;所有UGUI控件都必须绘制在画布上面;
++++当创建UGUI控件时,工程当中没有Canvas的时候会自动创建Canvas与EventSystem;
++++立钻哥哥:Canvas是画布,是所有UI控件的根类,也可以看作所有UI控制的父物体,所有UI控件都必须在Canvas上面绘制;Canvas是一个带有Canvas组件的游戏物体;
++++立钻哥哥:EventSystem是事件系统,负责监听用户的输入;
++++创建UI控件时,当层级视图当中没有Canvas和EventSystem系统会帮我们自动创建;
##5.3、UGUI基本控件 |
++++5.3.1、Text控件
++++5.3.2、Image控件
++++5.3.3、RawImage控件
++++5.3.4、Button控件
++++5.3.5、Slider控件
++++5.3.6、ScrollBar控件
++++5.3.7、Toggle控件
++++5.3.8、InputField控件
++++5.3.9、Panel控件
++++5.3.10、RectTransform位置
++++5.3.11、Pivot中心点
++++5.3.12、Anchor锚点
###5.3.1、Text控件 |
++++立钻哥哥:Text控件是用来显示文本的文本控件,选中Text可以查看属性;
++++立钻哥哥:Text的属性可以在Inspector当中通过Text组件进行设置,也可以在代码当中进行动态设置;
Text myText;
void Start(){ myText = GetComponent<Text>();
myText = “立钻哥哥”; myText.alignment = TextAnchor.MiddleCenter; myText.fontSize = 20; myText.fontStyle = FontStyle.BoldAndItalic; myText.color = Color.red; } |
###5.3.2、Image控件 |
++++立钻哥哥:Image控件主要是用来显示图片,显示图片的格式是Sprite;
++++立钻哥哥:[Image Type]总共有四种选项:Simple、Tilled、Sliced、Filled;
++++[Simple]:显示单个会拉伸;
++++[Tilled]:平铺显示,图片按照原始显示;
++++[Sliced]:按照九宫格显示,拉伸区域只会在九宫格中间;
++++[Filled]:填充显示,可以根据不同的填充方式模拟技能冷却等效果;
++++立钻哥哥:[Image Type]的Filled填充模式常可以用来制作血条,冷却技能等;
Image myImage;
void Start(){ myImage = GetComponent<Image>();
myImage.filledMethod = Image.FillMethod.Radial180; }
bool isFilled = true; void Update(){ if(Input.GetKeyDown(KeyCode.Space)){ isFilled = false; }
if(!isFilled){ myImage.fillAmout += Time.deltaTime;
if(myImage.fillAmout >= 1){ myImage.fillAmount = 1; isFilled = true; } } } |
###5.3.3、RawImage控件 |
++++立钻哥哥:RawImage也是用来显示图片的控件;
++++跟Image控件的差别就是Image显示图片的格式为Sprite,RawImage显示图片的格式为Texture;
++++RawImage可以控制行列;
###5.3.4、Button控件 |
++++立钻哥哥:Button按钮控件,包含的Text控件用于显示按钮的文本;
++++当某个UGUI控件添加了Button组件:便拥有了按钮点击的功能;
++++立钻哥哥:Transition用于设置按钮在不同状态间的过渡效果,共有四种方式:None、Color Tint、Sprite Swap、Animation;
++++[None]:无过渡效果;
++++[Color Tint]:设置不同状态不同颜色来过渡;
++++[Sprite Swap]:设置不同图片来过渡不同状态;
++++[Animation]:设置不同动画过渡不同状态;
++++立钻哥哥:利用[onClick.AddListener()]添加监听事件;
Button myBtn;
void Start(){ myBtn = GetComponent<Button>(); myBtn.onClick.AddListener(MyBtnClick); }
void MyBtnClick(){ Debug.Log(“立钻哥哥:按钮被点击了”); } |
###5.3.5、Slider控件 |
++++立钻哥哥:Slider是滑动条;
++++立钻哥哥:可以利用[onValueChanged.AddListener()]添加监听事件;
Slider mySlider;
void Start(){ mySlider = GetComponent<Slider>(); mySlider.onValueChanged.AddListener(YanlzSliderValueChange); }
public void YanlzSliderValueChange(float value){ Debug.Log(“立钻哥哥:滑动条变化value = ” + value); } |
###5.3.6、ScrollBar控件 |
++++立钻哥哥:ScrollBar滑动条;Scrollbar层级视图中包含了滑块Handle;
###5.3.7、Toggle控件 |
++++立钻哥哥:Toggle单选框;可以用来创建开关按钮;层级视图中包含了显示背景的[Background]和显示文本的[Label];
++++立钻哥哥:Toggle属性:其中Group表示当前选中框是否属于某一组选中框,若是的话则所有选中框只能选中一个;
++++立钻哥哥:利用[onValueChanged.AddListener()]添加事件;
Toggle myToggle;
void Start(){ myToggle = GetComponent<Toggle>(); myToggle.onValueChanged.AddListener(YanlzToggleAction); }
void YanlzToggleAction(bool isOn){ Debug.Log(“立钻哥哥:单选框点击value: ” + isOn); } |
###5.3.8、InputField控件 |
++++立钻哥哥:InputFiled输入框;InputField层级视图中包含[Placeholder]和[Text];
++++[Placeholder]:用于显示占位符,即输入框没有输入文本时显示的文本;
++++[Text]:用于显示输入的内容;
++++立钻哥哥:
++++立钻哥哥:利用[onEndEdit.AddListener()]添加监听事件;
InputField myInputField;
void Start(){ myInputField = GetComponent<InputField>(); myInputField.onEndEdit.AddListener(YanlzInputFieldEndEdit); }
void YanlzInputFieldEndEdit(string text){ Debug.Log(“立钻哥哥:文本框当中的文本:” + text); } |
###5.3.9、Panel控件 |
++++立钻哥哥:Panel面板,功能相当于空间的容器,里面可以存放其他控件;
++++Panel面板的作用:使用Panel控件可以整体移动和处理一组控件;
++++[设计规范]:一个功能完备的UI界面会使用多个Panel控件;
###5.3.10、RectTransform位置 |
++++立钻哥哥:[RectTransform]的作用是用来计算UI的位置和大小;
++++[RectTransform]继承于Transform,具有Transform的所有特征,通过[RectTransform]能够实现基本的布局和层次控制;
++++立钻哥哥:[RectTransform]中专有属性:Pos X,Pos Y;Pivot;Anchor;Width&Height;Left,Right,Top,Botton;
++++[Pos X, Pos Y]:Pivot与Anchor的距离;
++++[Pivot]:中心点,中轴;
++++[Anchor]:锚点;
++++[Width & Height]:宽与高,相对于锚点;
++++[Left, Right, Top, Botton]:左右上下;
###5.3.11、Pivot中心点 |
++++立钻哥哥:Pivot中心点:按下[T键]选中某一个UI控件即可看到UI控件的中心点;
++++中心点也叫中心轴,当鼠标拖动UI控件进行旋转的时候会围绕中心点旋转;
++++中心点为矩形的一部分;
++++0对应左下角;1对应右上角;
###5.3.12、Anchor锚点 |
++++立钻哥哥:Anchor锚点表示的是相对于父级矩形的子矩形区域;
++++Anchor锚点有多种摆放方式:可以为矩形、点状、线状;
++++Anchor锚点移动范围仅限于父级视图当中;
++++[Anchor锚点呈点状]:当UI的锚点为中心点时,不管父控件的大小怎么改变,UI距离锚点的位置固定,大小固定;
++++[Anchor锚点与组件本身重合]:当UI的锚点为四方形或者与UI本身大小相同的时候,UI的大小与父控件的大小变换成正比;
++++[Anchor锚点与父物体重合]:当UI控件的锚点与父物体重合的时候,不管父物体怎么变化,UI控件四条边相对于锚点四条边的距离保持不变;
++++[Anchor锚点呈线状]:当UI控件的锚点呈线状并为竖直方向时,则UI控件竖直方向的大小与父物体竖直方向的大小成正比,水平方向大小不变;当锚点呈线状并且为水平方向时,则水平方向大小与父物体水平方向的大小成正比,竖直方向大小不变;
##5.4、Canvas三种模式 |
++++5.4.1、Canvas画布
++++5.4.2、Canvas渲染模式
###5.4.1、Canvas画布 |
++++立钻哥哥:Canvas画布是所有UGUI控件的根类,所有UGUI控件的绘制都必须在Canvas上;
++++创建Canvas有两种方式:
--方式1:直接添加Canvas;
--方式2:添加控件的时候由系统自动添加;
###5.4.2、Canvas渲染模式 |
++++立钻哥哥:在Canvas组件中可以通过[RenderMode]来设置Canvas的渲染模式;
++++官方参考:https://docs.unity3d.com/Manual/UICanvas.html
++++Canvas共有三种渲染模式:[Screen Space-Overlay]、[Screen Space-Camera]、[World Space];
++++[Screen Space-Overlay]:不需要UI摄像机,Canvas画布将会一直出现在摄像机的最前面;
++++[Screen Space-Camera]:需要一个UI Camera,支持UI前方显示3D模型和粒子系统;
++++[World Space]:UI控件成为3D场景当中一部分,VR中UI都是[World Space]模式;
++++立钻哥哥:[Screen Space-Overlay]模式的画布将呈现在摄像机最前面,其他所有物体都会被遮挡,即使没有主摄像机,画布也会显示出来;
++++立钻哥哥:[Screen Space-Camera]模式可以设置[Plane Distance]为Canvas与摄像机的距离,三维物体处于Canvas与摄像机之间的物体将会被显示出来,Canvas后面的将会被覆盖;
++++立钻哥哥:[World Space]模式下Canvas相对于三维世界中的一部分,相当于一个GameObject,可以对其进行平移,缩放,旋转;
++++VR中的Canvas都是这种模式([World Space]);
##5.5、布局控件 |
++++5.5.1、LayoutGroup组件
++++5.5.2、Horizontal Layout Group组件
++++5.5.3、Vertical Layout Group组件
++++5.5.4、Grid Layout Group组件
###5.5.1、LayoutGroup组件 |
++++立钻哥哥:Unity提供了布局组件,便于对子控件进行布局;一个控件上面只能有一种布局组件;
++++Layout布局组件有三种:
--1、水平布局:Horizontal Layout Group;
--2、垂直布局:Vertical Layout Group;
--3、网格布局:Grid Layout Group;
###5.5.2、Horizontal Layout Group组件 |
++++立钻哥哥:水平布局:Horizontal Layout Group;
++++[Padding]:上下左右的边距;
++++[Spacing]:子控件在水平方向上的间距;
++++[Child Alignment]:子控件在水平方向上的排列方式;
++++[Child Force Expand]:自适应宽高,是否强行扩大布局元素以填补额外可用的空间;
###5.5.3、Vertical Layout Group组件 |
++++立钻哥哥:垂直布局:Vertical Layout Group;
++++[Padding]:上下左右的边距;
++++[Spacing]:子控件在垂直方向上的间距;
++++[Child Alignment]:子控件在垂直方向上的排列方式;
++++[Child Force Expand]:自适应宽高,是否强行扩大布局元素以填补额外可用的空间;
###5.5.4、Grid Layout Group组件 |
++++立钻哥哥:网格布局:Grid Layout Group;
++++[Padding]:上下左右的边距;
++++[Cell Size]:单元格的大小;
++++[Spacing]:单元格在X与Y轴方向上的间距;
++++[Start Corner]:第一个元素开始的位置;
++++[Start Axis]:元素排列沿着哪一个方向轴;
++++[Child Alignment]:子元素对齐方式;
++++[Constraint]:填充方式,可以固定行和列;
##5.6、拖动效果 |
++++5.6.1、ScrollView滑动视图
++++5.6.2、ScrollRect组件
++++5.6.3、自定义滑动视图
###5.6.1、ScrollView滑动视图 |
++++立钻哥哥:使用ScrollView滑动视图制作的界面视图,可以上下滑动查看更多的选项;
++++[Viewport]为滑动视图显示的内容;
++++[Scrollbar Horizontal]:为横向滑动条;
++++[Scrollbar Vertical]:为纵向滑动条;
###5.6.2、ScrollRect组件 |
++++立钻哥哥:ScrollView滑动视图当中起滑动功能的组件是[ScrollRect],通过[ScrollRect]可以设置跟滑动相关的属性;
++++[Content]:可滑动的区域;
++++[Horizontal, Vertical]:水平,垂直方向是否可滑动;
++++[Movement Type]:滑动方式,包括:无限制滑动,弹力限制,无弹力限制;
++++[Elasticity]:回弹的弹力大小;
++++[Inertia]:惯性;
++++[Deceleration Rate]:减速的速率;
++++[Scroll Sensitivity]:滑动的灵敏度;
++++[Horizontal Scrollar]:横向滑动条;
++++[Vertical Scollbar]:垂直滑动条;
###5.6.3、自定义滑动视图 |
++++立钻哥哥:自定义滑动视图:[Scroll Rect]+[Vertical Layout Group]+[Mask];
++++[步骤一]:创建滑动视图“ScrollButton”,添加[Scroll Rect]组件;
++++[步骤二]:在ScrollButton下创建内容视图Content,将其赋值给[Scroll Rect]的[Content属性];
++++[步骤三]:给Content添加布局组件[Vertical Layout Group],让子视图能够垂直布局;
++++[步骤四]:给ScrollButton添加[Mask组件],超过ScrollButton本身大小的不显示;
##5.7、回调事件 |
++++5.7.1、EventSystem
++++5.7.2、UGUI的回调方法
++++5.7.3、事件使用示例
###5.7.1、EventSystem |
++++立钻哥哥:EventSystem对象下有三个组件:[EventSystem]、[Standalone Input Module]、[Touch Input Module];
++++[EventSystem]:主要用于负责处理输入、射线投射以及发送事件;
++++[StandaloneInputModule]:继承自BaseInputModule;
++++[TouchInputMoudle]:继承自BaseInputModule;
++++[BaseInputModule]:是一个基类模块,负责发送输入事件(点击,拖拽,选中)到具体对象;
++++一个场景当中只能有一个[EventSystem],并且需要[BaseInputModule]组件才能协助工作;
###5.7.2、UGUI的回调方法 |
++++立钻哥哥:输入模块[StandaloneModule]和[TouchInputModule]两个组件会检测到用户的一些输入事件,并且以事件的方式通知目标对象;实现这些回调方法需要实现相应的接口;
++++立钻哥哥:UGUI常用的回调事件:OnPointerEnter()、OnPointerExit()、OnPointerDown()、OnPointerUp()、OnPointerClick()、OnPointerDrag()、OnDrag()、OnEndDrag();
++++[void OnPointerEnter(PointerEventData eventData)]:IPointerEnterHandle:鼠标进入;
++++[void OnPointerExit(PointerEventData eventData)]:IPointerExitHandle:鼠标离开;
++++[void OnPointerDown(PointerEventData eventData)]:IPointerDownHandle:鼠标点下;
++++[void OnPointerUp(PointerEventData eventData)]:IPointerUpHandle:鼠标抬起;
++++[void OnPointerClick(PointerEventData eventData)]:IPointerClickHandle:鼠标点击;
++++[void OnPointerDrag(PointerEventData eventData)]:IBeginDragHandle:开始拖拽;
++++[void OnDrag(PointerEventData eventData)]:IDragHandle:拖拽中;
++++[void OnEndDrag(PointerEventData eventData)]:IEndDragHandle:结束拖拽;
###5.7.3、事件使用示例 |
++++立钻哥哥:以Button为例添加事件,有三种方式:
--(1)实现接口,触发回调事件;
--(2)在Unity引擎中绑定;
--(3)给按钮添加监听事件;
++++立钻哥哥:重写[IPointerClickHandler]接口中的[OnPointerClick()]方法;
using UnityEngine.UI; using UnityEngine.EventSystems;
public class YanlzButtonController : MonoBehaviour, IPointerClickHandler{ public void OnPointerClick(PointerEventData eventData){ Debug.Log(“立钻哥哥:按钮被点击了”); } } //立钻哥哥:继承IPointerClickHandlder接口 |
++++立钻哥哥:在Button组件中的[OnClick()]属性中绑定;
public class YanlzButtonController : MonoBehaviour{ public void ButtonClickListener(){ Debug.Log(“立钻哥哥:按钮点击响应事件”); } } |
++++立钻哥哥:利用[onClick.AddListener()]方式实现;
Button myBtn;
void Start(){ myBtn = GetComponent<Button>(); myBtn.onClick.AddListener(YanlzTestBtnClick); }
void YanlzTestBtnClick(){ Debug.Log(“立钻哥哥:测试按钮点击!”); } |
##5.8、UGUI背包系统 |
++++立钻哥哥:UGUI应用最多的地方就是背包系统了,其综合性比较强,背包系统做好了,其移植性和重用性都比较好;
++++背包里面最主要的功能是物品拖动应用到角色身上,以及物品与物品之间的交换;
++++UGUI在游戏中实现“商店”方面等应用也比较多;
#第6讲:Unity动画系统 |
++++【Unity开发基础】分类:https://blog.csdn.net/vrunsoftyanlz/category_7309057.html
++++【Linux系统编程】分类:https://blog.csdn.net/vrunsoftyanlz/category_9694767.html
++++【C++C铸就生存利器】分类:https://blog.csdn.net/vrunsoftyanlz/category_9325802.html
++++【人工智能AI2026】分类:https://blog.csdn.net/vrunsoftyanlz/category_9212024.html
++++【立钻哥哥CSDN空间】:https://blog.csdn.net/VRunSoftYanlz/
立钻哥哥推荐的拓展学习链接(Link_Url) |
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz/
++++虚拟现实VR资讯: https://blog.csdn.net/VRunSoftYanlz/article/details/89165846
++++HTC_VIVE开发基础:https://blog.csdn.net/VRunSoftYanlz/article/details/81989970
++++Oculus杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82469850
++++Oculus安装使用:https://blog.csdn.net/VRunSoftYanlz/article/details/82718982
++++Unity+SteamVR=>VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88809370
++++Unity减少VR晕眩症:https://blog.csdn.net/VRunSoftYanlz/article/details/89115518
++++SteamVR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86484254
++++SteamVR脚本功能分析:https://blog.csdn.net/VRunSoftYanlz/article/details/86531480
++++SteamVR2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/86618187
++++SteamVR2.2.0开发指南:https://blog.csdn.net/VRunSoftYanlz/article/details/88784527
++++SteamVR2.2.0快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/88833579
++++SteamVR2.2.0交互系统:https://blog.csdn.net/VRunSoftYanlz/article/details/89199778
++++SteamVR2.2.0传送机制:https://blog.csdn.net/VRunSoftYanlz/article/details/89390866
++++SteamVR2.2.0教程(一):https://blog.csdn.net/VRunSoftYanlz/article/details/89324067
++++SteamVR2.2.0教程(二):https://blog.csdn.net/VRunSoftYanlz/article/details/89894097
++++SteamVR_Skeleton_Poser:https://blog.csdn.net/VRunSoftYanlz/article/details/89931725
++++SteamVR实战之PMCore:https://blog.csdn.net/VRunSoftYanlz/article/details/89463658
++++SteamVR/Extras:https://blog.csdn.net/VRunSoftYanlz/article/details/86584108
++++SteamVR/Input:https://blog.csdn.net/VRunSoftYanlz/article/details/86601950
++++OpenXR简介:https://blog.csdn.net/VRunSoftYanlz/article/details/85726365
++++VRTK杂谈:https://blog.csdn.net/VRunSoftYanlz/article/details/82562993
++++VRTK快速入门(杂谈):https://blog.csdn.net/VRunSoftYanlz/article/details/82955267
++++VRTK官方示例(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82955410
++++VRTK代码结构(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82780085
++++VRTK(SceneResources):https://blog.csdn.net/VRunSoftYanlz/article/details/82795400
++++VRTK_ControllerEvents:https://blog.csdn.net/VRunSoftYanlz/article/details/83099512
++++VRTK_InteractTouch:https://blog.csdn.net/VRunSoftYanlz/article/details/83120220
++++虚拟现实行业应用:https://blog.csdn.net/VRunSoftYanlz/article/details/88360157
++++Steam平台上的VR:https://blog.csdn.net/VRunSoftYanlz/article/details/88960085
++++Steam平台热销VR:https://blog.csdn.net/VRunSoftYanlz/article/details/89007741
++++VR实验:以太网帧的构成:https://blog.csdn.net/VRunSoftYanlz/article/details/82598140
++++实验四:存储器扩展实验:https://blog.csdn.net/VRunSoftYanlz/article/details/87834434
++++FrameVR示例V0913:https://blog.csdn.net/VRunSoftYanlz/article/details/82808498
++++FrameVR示例V1003:https://blog.csdn.net/VRunSoftYanlz/article/details/83066516
++++SwitchMachineV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++PlaySceneManagerV1022:https://blog.csdn.net/VRunSoftYanlz/article/details/83280886
++++Unity5.x用户手册:https://blog.csdn.net/VRunSoftYanlz/article/details/81712741
++++Unity面试题ABC:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++Unity面试题D:https://blog.csdn.net/VRunSoftYanlz/article/details/78630838
++++Unity面试题E:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity面试题F:https://blog.csdn.net/VRunSoftYanlz/article/details/78630945
++++Cocos2dx面试题:https://blog.csdn.net/VRunSoftYanlz/article/details/78630967
++++禅道[zentao]:https://blog.csdn.net/VRunSoftYanlz/article/details/83964057
++++Lua快速入门篇(Xlua拓展):https://blog.csdn.net/VRunSoftYanlz/article/details/81173818
++++Lua快速入门篇(XLua教程):https://blog.csdn.net/VRunSoftYanlz/article/details/81141502
++++Lua快速入门篇(基础概述):https://blog.csdn.net/VRunSoftYanlz/article/details/81041359
++++框架知识点:https://blog.csdn.net/VRunSoftYanlz/article/details/80862879
++++游戏框架(UI框架夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80781140
++++游戏框架(初探篇):https://blog.csdn.net/VRunSoftYanlz/article/details/80630325
++++.Net框架设计:https://blog.csdn.net/VRunSoftYanlz/article/details/87401225
++++从零开始学架构:https://blog.csdn.net/VRunSoftYanlz/article/details/88095895
++++设计模式简单整理:https://blog.csdn.net/vrunsoftyanlz/article/details/79839641
++++专题:设计模式(精华篇):https://blog.csdn.net/VRunSoftYanlz/article/details/81322678
++++U3D小项目参考:https://blog.csdn.net/vrunsoftyanlz/article/details/80141811
++++Unity小游戏算法分析:https://blog.csdn.net/VRunSoftYanlz/article/details/87908365
++++Unity案例(Vehicle):https://blog.csdn.net/VRunSoftYanlz/article/details/82355876
++++UML类图:https://blog.csdn.net/vrunsoftyanlz/article/details/80289461
++++PowerDesigner简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86500084
++++Unity知识点0001:https://blog.csdn.net/vrunsoftyanlz/article/details/80302012
++++Unity知识点0008:https://blog.csdn.net/VRunSoftYanlz/article/details/81153606
++++U3D_Shader编程(第一篇:快速入门篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372071
++++U3D_Shader编程(第二篇:基础夯实篇):https://blog.csdn.net/vrunsoftyanlz/article/details/80372628
++++Unity引擎基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78881685
++++Unity面向组件开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78881752
++++Unity物理系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78881879
++++Unity2D平台开发:https://blog.csdn.net/vrunsoftyanlz/article/details/78882034
++++UGUI基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78884693
++++UGUI进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78884882
++++UGUI综合:https://blog.csdn.net/vrunsoftyanlz/article/details/78885013
++++Unity动画系统基础:https://blog.csdn.net/vrunsoftyanlz/article/details/78886068
++++Unity动画系统进阶:https://blog.csdn.net/vrunsoftyanlz/article/details/78886198
++++Navigation导航系统:https://blog.csdn.net/vrunsoftyanlz/article/details/78886281
++++Unity特效渲染:https://blog.csdn.net/vrunsoftyanlz/article/details/78886403
++++Unity数据存储:https://blog.csdn.net/vrunsoftyanlz/article/details/79251273
++++Unity中Sqlite数据库:https://blog.csdn.net/vrunsoftyanlz/article/details/79254162
++++WWW类和协程:https://blog.csdn.net/vrunsoftyanlz/article/details/79254559
++++Unity网络:https://blog.csdn.net/vrunsoftyanlz/article/details/79254902
++++Unity资源加密:https://blog.csdn.net/VRunSoftYanlz/article/details/87644514
++++PhotonServer简介:https://blog.csdn.net/VRunSoftYanlz/article/details/86652770
++++编写Photon游戏服务器:https://blog.csdn.net/VRunSoftYanlz/article/details/86682935
++++C#事件:https://blog.csdn.net/vrunsoftyanlz/article/details/78631267
++++C#委托:https://blog.csdn.net/vrunsoftyanlz/article/details/78631183
++++C#集合:https://blog.csdn.net/vrunsoftyanlz/article/details/78631175
++++C#泛型:https://blog.csdn.net/vrunsoftyanlz/article/details/78631141
++++C#接口:https://blog.csdn.net/vrunsoftyanlz/article/details/78631122
++++C#静态类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630979
++++C#中System.String类:https://blog.csdn.net/vrunsoftyanlz/article/details/78630945
++++C#数据类型:https://blog.csdn.net/vrunsoftyanlz/article/details/78630913
++++Unity3D默认的快捷键:https://blog.csdn.net/vrunsoftyanlz/article/details/78630838
++++游戏相关缩写:https://blog.csdn.net/vrunsoftyanlz/article/details/78630687
++++UnityAPI.Rigidbody刚体:https://blog.csdn.net/VRunSoftYanlz/article/details/81784053
++++UnityAPI.Material材质:https://blog.csdn.net/VRunSoftYanlz/article/details/81814303
++++UnityAPI.Android安卓:https://blog.csdn.net/VRunSoftYanlz/article/details/81843193
++++UnityAPI.AndroidJNI安卓JNI:https://blog.csdn.net/VRunSoftYanlz/article/details/81879345
++++UnityAPI.Transform变换:https://blog.csdn.net/VRunSoftYanlz/article/details/81916293
++++UnityAPI.WheelCollider轮碰撞器:https://blog.csdn.net/VRunSoftYanlz/article/details/82356217
++++UnityAPI.Resources资源:https://blog.csdn.net/VRunSoftYanlz/article/details/83155518
++++JSON数据结构:https://blog.csdn.net/VRunSoftYanlz/article/details/82026644
++++CocosStudio快速入门:https://blog.csdn.net/VRunSoftYanlz/article/details/82356839
++++Unity企业内训(目录):https://blog.csdn.net/VRunSoftYanlz/article/details/82634668
++++Unity企业内训(第1讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82634733
++++Unity企业内训(第2讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82861180
++++Unity企业内训(第3讲):https://blog.csdn.net/VRunSoftYanlz/article/details/82927699
++++Unity企业内训(第4讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83479776
++++Unity企业内训(第5讲):https://blog.csdn.net/VRunSoftYanlz/article/details/83963811
++++Unity企业内训(第6讲):https://blog.csdn.net/VRunSoftYanlz/article/details/84207696
++++钻哥带您了解产品原型:https://blog.csdn.net/VRunSoftYanlz/article/details/87303828
++++插件
++++计算机组成原理(教材篇):https://blog.csdn.net/VRunSoftYanlz/article/details/82719129
++++5G接入:云计算和雾计算:https://blog.csdn.net/VRunSoftYanlz/article/details/88372718
++++云计算通俗讲义:https://blog.csdn.net/VRunSoftYanlz/article/details/88652803
++++立钻哥哥Unity 学习空间: http://blog.csdn.net/VRunSoftYanlz
--_--VRunSoft:lovezuanzuan--_--