1.粒子系统
类:ParticleSystem
认识粒子系统的界面
基本属性:
粒子系统模块:
(1)发射器发射模块(Emission)
(2)发射器形状模块(Shape)
Shape属性:Sphere球形、HermiSphere半球形、Cone锥体形、Box立方体形、Mesh网格形、Circle圆形、Edge刀锋形
(3)在整个生命周期的速度(Velocity over Lifetime)
(4)速度限制模块(Limit Velocity over Lifetime)
(5)继承速度
(6)在生命周期内对粒子系统施加力的限制
(7)在生命周期内对粒子系统的颜色进行控制模块
(8)粒子颜色随速度改变模块
(9)在生命周期内控制粒子尺寸
(10)粒子系统的碰撞模块
(15)粒子系统贴图动画
(16)粒子系统的渲染模块
2.线渲染器
3.拖尾渲染器
学习如何给游戏对象添加拖尾渲染器,以及添加拖尾脚本,还需要网格渲染器
4.音频
两个类:AudioSource音频源、AudioClip音频剪辑
(1)播放音频源:音频源名.Play();
(2)播放音频剪辑:音频源名.PlayOneShot(音频剪辑名);
播放音频方法:
方法一:声明一个音频源对象,然后在需要播放的地方.出Play()方法;
方法二:声明一个音频源对象、一个音频剪辑对象,然后在需要播放的地方.出PlayOneShot(音频剪辑对象);
注意:实例化的时候,需要把音频文件分别放到空游戏对象中,然后把那些游戏对象拖给需要的脚本,
音频剪辑不能拖,但是可以在后面的设定按钮菜单中选中需要的音频剪辑文件
AudioManager脚本:
声明一个音频剪辑数组;
声明一个字典;
声明一个音频源表示背景音乐;
声明一个单例模式:这里定义可以理解为是挂载了此脚本的游戏对象;
形式:private static
GameObject游戏对象名;
唤醒方法:Awake()
游戏对象名=this.gameObject;//单例模式
创建字典;
遍历音频剪辑数组,把音频剪辑名字和音频剪辑添加到字典的key和value中;
给挂载了脚本的游戏对象添加音频源组件并把音频源组件指定给背景音乐。
播放背景音乐的两个方法:PlayBGM()
重载方法一:通过音频库(音频字典),可以通过key查找音频。判断音频库中是否有这个音频剪辑的名字并且名字不为空或者0,
有则通过名字找到音频剪辑,赋值,循环,播放;
重载方法二:可以通过value查找音频。判断是否有音频剪辑,有则直接给这个音频赋值,循环,播放。
播放声音特效:PlayEffectAu()
重载方法一:可以通过key查找音频。判断音频库中是否有这个音频剪辑的名字并且名字不为空或者0,有则赋值,播放;
重载方法二:可以通过value查找音频。判断是否有音频剪辑,有则得到这个挂载脚本的游戏对象的音频源组件,
并创建一个音频源类型的数组用来储存挂载了脚本的游戏对象身上的所有音频组件;
遍历整个音频源类型的数组(也就是遍历挂载脚本的游戏对象身上的所有音频源),
判断是否有音频源在播放,没则使用它(赋值,不循环,播放,return);
如果遍历了所有的音频源都在被使用,则需要创建一个新的音频源,使用它(赋值,不循环,播放)
注意:实例化的时候,先创建一个空的游戏对象,用作音频管理,把AudioManager脚本挂载到其身上,然后按下检视窗口右上角的小锁定格在AudioManager脚本的界面(方便把音频剪辑拖动到脚本当中),
并将需要的音频剪辑拖到AudioManager脚本的音频剪辑数组的英文上(其他地方无法拖动添加到数组中)。
5.视频
using UnityEngine.Video;//视频播放命名空间
类:VideoPlayer
播放:VideoPlayer名.Play();
6.GUI
类:Texture2D (2D文本)、GUISkin (GUI皮肤)、GUI(自定义UI布局)、GUILayout(自动排列UI布局)
系统的回调方法:OnGUI()
画图:GUI.DrawTexture(new Rect(坐标x,坐标y,图片width,图片height),图片对象)
文本框:GUILayout.Label(文本内容,皮肤.GetStyle(名字));
按钮:GUILayout.Button(文字)
//GUI是按照像素定的坐标,并且坐标从左上角(0,0)开始
7.缓冲池
PoolManager脚本:
声明一个GameObject对象;//池子中的对象
声明一个int整数1;//初始容量
//池子
//字典,把序号和游戏对象挂钩
声明一个字典Dictionary对象;
//可用的ID集合
//这里为什么不用数组而用集合呢?
//因为集合可以动态的扩充容量,而数组不可以
声明一个集合List对象;
声明一个int整数2;//用来往集合里放序号
void Start()
{
//分别实例化字典、集合
//刚开始的时候需要调用扩容方法InitPool();//要给缓冲池一个初始容量
}
//取出功能
通过int的值使用GameObject的游戏对象
创建一个KeyValuePair PickObj()
{
//判断是否需要扩容
//当可用ID没有的时候调用InitPool()方法,重新初始化池子、扩容
//把集合中第一个的值先给整数2,然后移除掉集合第一个的值,但集合容量没变,索引为1的元素移到了索引为0的位置
//集合名.Remove(通过元素本身删除元素,顺序:从索引0开始递增)
//集合名.RemoveAt(通过索引删除元素)
//用字典将池子中对应ID的对象显示出来,代表从池子中取出了对象
//把字典中的值赋值给键值对并实例化
//return这个键值对的对象
}
//回收功能
//根据id回收对象到池子中
创建一个RecycleObj(int id)
{
//通过字典把池子中的对象隐藏起来,表示回收到池子
//回收到池子后,可用id也要添加
//判断该id的游戏对象是否有刚体
//有则将炮弹的速度变为0
}
//扩容功能
void InitPool()
{
//int整数3(扩容后的id个数)=int整数2(扩容前的id个数)+int整数1(初始id的容量);
//遍历从扩容前id的序号,到扩容后id的序号,
//克隆一个新的子弹;
//序号添加到集合里;
//添加到字典中。
}
8.UGUI控件:
UGUI控件只有在Canvas中才能看到;
Text:
Text脚本:字体:修改字体、字体样式、大小、字体类型、控制行间距、富文本(可以在Text中通过<字母>调节字体各种属性);文本框:对齐方式、横向以及竖向是否溢出显示、拉伸可以保持的最小尺寸和最大尺寸;整体填充颜色;材质;是否射线能检测
Shadow脚本:影子颜色、影子方向和尺寸
Outline脚本
Image:
Image脚本:图片源、颜色、材质、是否射线检测、
图片类型:(1)简单:此时可以设为原始大小;
(2)九宫格:这种类型必须要先编辑图片,把图片分为九个区域(4个角不变,4个边采用平铺的方式,中间的;采用拉伸),可以避免图片边缘拉伸失真;
(3)平铺;(4)填充:填充方式(横向、竖向、90°旋转、180°旋转、360°旋转)、填充起点、填充数量(归一值,取值范围[0,1])、聪明的时针(用来选择旋转的顺逆时针)、是否保存设置、设定原始大小;
类:Text;
显示输入文本:文本对象.text=输入文本内容;
文本颜色:文本对象.color=Color.颜色枚举成员;
Button:
Image脚本:同上;
Button脚本:
Interactable:是否支持交互。
Transition:三种模式:Color
Tine,通过颜色来使Button呈现不同颜色;
Sprite swap通过图片切换呈现不同状态;
Animation,通过动画不同来展示不同状态。
Button状态:
Normal Colr:正常态时颜色,
Highlighted Color:高亮态时颜色,
Pressed Color:鼠标按下时颜色,
Disable Color:鼠标被禁用的状态时颜色。
Target
Graphics,目标图像,按钮自身。
Color
Multiple:对不同状态颜色的显示系数。
Fade
Duration:过渡时间,即不同状态颜色切换的过渡时间。
太多了。。有时间可以好好总结下。
UGUI中UI控件简介:http://blog.csdn.net/qq_37601496/article/details/77646348(写的很详细)
9.UGUI事件
using UnityEngine.UI;//引用UI(用户接口)命名空间
类:Button
注册观察者:按钮对象.onClick.AddListener(被调用的方法名称);
销毁观察者:按钮对象.onClick.RemoveListener(被调用的方法名称);
系统的回调方法:Awake()//当给游戏对象挂载脚本的时候就开始执行了
OnEnable()//用于注册事件,比Start执行早,在某些情况下可以执行多次
OnDisable()//用于注销事件,在某些情况下可以执行多次,一般在游戏结束之前调用
using UnityEngine.EventSystems;//引用事件系统命名空间
接口:IPointerClickHandler、IPointerEnterHandler
接口中的方法:OnPointerClick(PointerEventDataeventData)
OnPointerEnter(PointerEventData eventData)
Using UnityEngine.Events;//引用事件命名空间
类:UnityEvent
注册观察者:Unity事件对象.AddListener(被调用的方法名称);
销毁观察者:Unity事件对象.RemoveListener(被调用的方法名称);
执行Unity事件:Unity事件对象.Invoke();
10.Canvas
渲染优先级:通过Hierarchy(层级视图)调整在画布中的上下位置进行渲染排序,越靠下的越最后渲染。
Render Mode:三种模式:( 1)只显示画布内容,3D内容就算在画布前面,在Game视图也不会看到3D内容;
(2)使用摄像机视口显示屏幕,画布不会受到远近影响,画布前面可以放物体被看到;
(3)把画布当成了一个游戏对象。
Sorting Layer:在不同层的优先级,层级越靠后越最后渲染。
Order in Layer:在同一层的优先级,值越大越最后渲染,当有层级优先级的时候,先进行层级优先级再进行同层优先级的比较。
UI ScaleMode:三种模式:(1)根据像素尺寸调整UI缩放;
(2)根据屏幕尺寸调整UI缩放;
(3)根据物理尺寸调整UI缩放。
ReferenceResolution(参考分辨率)
Screen MatchMode:三种模式:(1)匹配宽度或者高度;
(2)扩张;
(3)缩放;
Match:最左边根据宽度匹配(高度跟随宽度按照一定比例变化);
最右边根据高度匹配(宽度跟随高度按照一定比例变化);
不左不右根据高度和宽度共同匹配??
Ignore ReversedGraphic Raycaster:是否忽略画布射线检测
屏蔽对象:无、2D对象、3D对象、所有对象
屏蔽遮罩:无、所有层以及单独每一层的名字。
如果屏蔽对象选了2D对象,而屏蔽遮罩选了UI层,意思就是屏蔽2D游戏对象中的UI层的游戏对象,其他层的2D游戏对象可以被画布射线检测。
11.综合练习(建一个UI游戏界面)
屏幕自适应(多分辨率适配):
这里我写了一个关于屏幕自适应的文章:www.jianshu.com/p/ca46228e5133(如果存在什么有问题的地方,希望大家指正)
技能CD倒计时(需要用到Time.deltaTime(每帧的时间)、图片填充fillAmount)
开关商店(滚动视图、按钮事件)