粒子_粒子群算法 - CSDN
  • Unity3d特效粒子 光束效果 FXlight pack 特效包 Unity3d特效粒子 火焰刀光特效包 Strike Effects 1.0 Unity3d特效粒子 角色扮演类特效技能 RPG-FPS Fx Pack 特效包 Unity3d特效粒子 蓝色闪电特效包 Electro ...
  • Unity粒子系统

    千次阅读 2018-10-11 17:24:04
    一、粒子系统主界面: 二、粒子系统下各个子模块: Main module//主要模块 Emission//发射 Shape//形状 Velocity Over Lifetime//粒子在生命周期内的速度 Limit Velocity Over Lifetime//粒子在生命周期内的...

    一、粒子系统主界面:

    二、粒子系统下各个子模块:

     1、Particle System 初始化模块:

    • 持续时间(Duration):粒子系统发射粒子的持续时间

    • 循环(Looping):粒子系统是否循环

    • 预热(Prewarm):当looping开启时,才能启动预热(Prewarm),游戏开始时粒子已经发射了一个周期。

    • 初始延迟(Start Delay):粒子系统发射粒子之前的延迟。注意在prewarm(预热)启用下不能使用此项。

    • 初始生命(Start Lifetime)以秒为单位,粒子存活数量。

    • 初始速度(Start Speed):粒子发射时的速度。如果为0,粒子将不在移动。在本地完成动画。

    • 3DStartSize:这个属性是当你需要把粒子在某一个方向上扩大的时候使用。

    • 初始大小(Start Size):粒子发射时的大小

    • 3DStartRotation:需要在一个方向旋转了子的时候可以使用。

    • 初始旋转(Start Rotation):粒子发射时的旋转值。

    • RandomizeRotation:随机旋转粒子方向,感觉在3D粒子的情况下,尤其是圆形的没什么用。

    • 初始颜色(Start Color):粒子发射时的颜色

    • 重力修改器(Gravity Modifier):粒子在发射时受到的重力影响。

    • 继承速度(Inherit Velocity):---控制粒子速率的因素将继承自粒子系统的移动(对于移动中的粒子系统)。

    • 模拟空间(Simulation Space):粒子系统在自身坐标系还是世界坐标系。如果是粒子之间的互动,用局部空间。如果是物体来影响粒子,用世界空间。

    • SimulationSpeed:根据Update模拟的速度。

    • Scaling Mode:缩放比例,三个选项:Hierarachy:当前粒子大小会受到上一级对象的缩放影响、Local:只跟自身大小有关、Shape:跟发射器有关系

    • 唤醒时播放(Play On Awake):如果启用粒子系统当在创建时,自动开始播放。

    • 最大粒子数(Max Particles):粒子发射的最大数量

    • AutonRandomSeed:随机种子,粒子系统每次播放时都是不同的。当设置为false时,系统每次播放时都是相同的。

    • Random Seed:当禁用自动随机种子时,这个值被用来创建一个惟一的可重复的效果。

    • Stop Action:当所有属于系统的粒子都完成后,就有可能使系统执行一个动作。

    1. Disable:GameObject是禁用的。

    2. Destroy:GameObject被销毁。.

    3. Callback:OnParticleSystemStopped 回调被发送到GameObject的任何脚本上

     2、Emission发射模块:

    • RateOverTime:随单位时间生成粒子的数量。
    • RateOverDistance:随着移动距离产生的粒子数量。只有当粒子系统移动时,才发射粒子。
    • Bursts:特定时间粒子数量,可以设置在特定时间发射大量的粒子;
      • Time:从第几秒开始。
      • Min:最小粒子数量。
      • Max:最大的粒子数量,粒子的数量会在Min和Max之间随机。
      • Cycles:在一个周期中循环的次数。
      • Interval:两次两次Cycles的间隔时间。

     3、Shape发射器形状模块,主要定义粒子的发射器的形状,控制发射方向位置等;

    • Shape:发射器的形状。
    • Radius:发射半径。
    • Emit from Shell:从表面发射粒子,还是从内部发射。
    • Radius Thicknes:半径厚度,值为0将从形状的外表面发出。值为1将使用整个卷。之间的值将使用一定比例的体积。
    • Align to Direction:方向对齐,使用这个复选框来确定粒子的初始方向。例如要实现,在碰撞时,汽车的车身油漆脱落效果。
    • Randomize Direction:随机方向,将粒子方向与随机方向混合。当这个设置为0时,这个设置没有效果。当它被设为1时,粒子的方向是完全随机的。
    • Spherize Direction:球面化方向,将粒子方向朝向球形方向,从它们的变换中心向外传播。值为0时无效。当它被设置为1时,粒子方向从中心向外指向(与形状设置为球体时的行为相同)。
    • Randomize Position:随机位置,设置一个值随机移动粒子至此值的位置,值为0时无效,大于1的值都是有效值。

    发射器主要形状:

    •  Sphere:球体发射器
    •  HemiSphere:半球体发射器
    •  Cone:锥体发射器
    •  Box:正方体发射器
    •  Mesh:网格发射器
    •  Circle:圆形发射器
    •  Edge:水平线发射器

    以上不同的发射器形状会有一些不同的属性,可以去调节这些属性预览相应的效果。

    4、Velocity over Lifetime:生命周期速度模块:控制每一个粒子的速度。

    设置粒子不同方向的速度。

    5、Limit Velocity over Lifetime:生命周期速度限制模块

    • Separate Axis:是否启用限制每一个轴。
    • Speed:限制的速度。
    • Dampen:阻尼。阻尼为1的时候表示在生命周期结束的时候,速度降到限定的速度。

    6、Force Over Lifetime生命周期作用力模块,控制每一个粒子在生命周期内受到力的情况。

    • Randomize 随机,每帧作用在粒子上面的力都是随机的(只有在Random Between Two Constants或Random Between Two Curves时才会生效。)

    7、Color Over Lifetime生命周期颜色模块,控制粒子在生命周期内颜色的变化。

    8、Color By Speed颜色变化控制模块,根据设置速度的范围和粒子的速度来改变粒子的颜色

    9、Size Over Lifetime生命周期粒子大小模块:控制每个粒子在生命周期内,大小的变化。

    • Separate Axes 分离轴:用于控制每个坐标轴。

    10、Size By Speed 速度范围粒子大小变化控制模块:根据速度的变化改变粒子的大小。

    11、Rotation Over Lifetime 生命周期粒子旋转速度模块,控制粒子在其生命周期内的旋转速度。

    12、Rotation By Speed 生命周期粒子的旋转速度

    •  Angular Velocity:角速度变化区间

    13、External Forces:外部作用力倍增数:调整风对粒子的影响情况。

    此参数是设置风力对粒子的影响。在场景中添加Wind Zone组件时,粒子会受到风力的影响,往风力的方向发射。

    14、Noise 噪声模块:采用噪声的算法来改变粒子的运动轨迹,使用此模块设置粒子类似跳动的效果,可以制作像火的余烬这种运动不规则的粒子。

    • Strength强度:定义了noise效应对粒子一生的影响。数值越高粒子移动得越来越快。
    • Frequency频率:低值会产生柔和平滑的noise,高值会产生快速变化的noise。这就控制了粒子改变它们行进方向的频率,以及这些方向的改变是多么的突然。
    • Scroll Speed滚动速度:随着时间的推移,移动noise,导致更难以预测和不稳定的粒子运动。
    • Damping减震:启用时,强度与频率成正比。将这些值捆绑在一起意味着可以在保持相同的行为的同时缩放噪声场,但是具有不同的尺寸。
    • Octaves倍频:指定有多少层重叠的噪音被组合在一起产生最终的噪音值。不建议使用,过多的使用会影响性能。
    • Octave Multiplier倍频乘法器:按此比例降低强度。
    • Octave Scale八度音阶:通过该乘法器调整频率。
    • Quality质量:质量越低性能消耗越低,noise外观质量也越低,反之性能消耗高,外观质量也越高。
    • Remap重映射:将最终的噪音值重新映射到不同的范围。
    • Remap Curve重新映射曲线:描述最终噪声值如何转换的曲线。例如,您可以使用此选项来选取噪声字段的较低范围,并通过创建一个从高到低结束于零的曲线来忽略较高范围。
    • Position Amount职位数量:控制噪声影响粒子位置的乘法器。
    • Rotation Amount旋转量:控制噪声影响粒子旋转量的乘法器,以度/秒为单位。
    • Size Amount数量大小:控制噪声影响粒子大小的乘法器。

    15、Collision碰撞模块:为粒子创建碰撞效果,分为Planes(平面模式) 和World(世界模式)

    • Planes:一个可扩展的定义碰撞平面的变换列表。
    • Visualization(可视化)选择碰撞平面Gizmos是否以场景视图显示为线框网格或实体平面。
    • Scale Plane(比例平面)用于可视化的平面尺寸。
    • Dampen(挫伤)碰撞后丢失的粒子速度的一小部分。
    • Bounce(弹跳)碰撞后从表面反弹的粒子速度的一部分。
    • Lifetime Loss(终身损失)它碰撞时丢失的粒子总寿命的一部分。
    • Min Kill Speed(最小死亡速度)碰撞后低于此速度的粒子将从系统中移除。
    • Max Kill Speed(最大死亡速度)碰撞后超过这个速度的粒子将从系统中移除。
    • Radius Scale(半径比例)允许您调整粒子碰撞球体的半径,使其更贴近粒子图形的视觉边缘。
    • Send Collision Messages(发送碰撞消息)如果启用,则可以通过OnParticleCollision函数从脚本中检测粒子碰撞。
    • Visualize Bounds(可视化边界)在“scene”视图中将每个粒子的碰撞范围渲染为线框形状。
    • Collision Mode(碰撞模式)3D or 2D.
    • Collision Quality(碰撞质量)使用下拉菜单来设置粒子碰撞的质量。这影响有多少粒子可以通过对撞机。在质量较低的水平上,粒子有时会穿过对撞机,但资源密集度较低。
    • Collides With(碰撞)粒子只会碰撞选定图层上的物体。
    • Max Collision Shapes(最大碰撞形状)粒子碰撞可以考虑多少个碰撞形状。过多的形状被忽略,地形优先。
    • Enable Dynamic Colliders(启用动态碰撞器)允许粒子也与动态对象碰撞(否则仅使用静态对象)。
    • Voxel Size(体素大小)体素表示三维空间中规则网格上的值。当使用中等或低质量冲突时,Unity会缓存网格结构中的冲突。此设置控制网格大小。较小的值会提供更高的准确性,但会花费更多的内存,效率也会降低。
      注意:只有在“Collision Quality (碰撞质量)”设置为“中”或“ 低”时才能访问此属性。
    • Collider Force(对撞机的力量)在粒子碰撞后对物理碰撞体施加一个力。这对于将碰撞体推向粒子很有用。
    • Multiply by Collision Angle(乘以碰撞角度)当对碰撞体施加力时,根据粒子和碰撞体之间的碰撞角度来缩放力的强度。掠射角比正面碰撞产生的力更小。
    • Multiply by Particle Speed(乘以粒子速度)当对碰撞体施加力时,根据粒子的速度来缩放力的强度。快速移动的粒子比慢速粒子产生更多的力量。
    • Multiply by Particle Size(乘以粒度)当对碰撞器施加力时,根据粒子的大小来缩放力的强度。较大的粒子会比较小的粒子产生更多的力。
    • Visualize Bounds(可视化边界)在“Scene”视图中预览每个粒子的碰撞球体。

        16、Triggers触发器模块:粒子能在场景中与一个或多个碰撞器交互时触发回调。当一个粒子进入或离开一个对撞机,或者在粒子处于内部或外部的时候,这个Callback可以被触发。

    要使用该模块,首先需要添加希望创建Colliders (触发器)的triggers (碰撞器),然后选择要使用的事件。

    • Inside:Callback粒子事件在对撞机内时触发。Ignore 当粒子在对撞机内部时,则不会触发事件。kill 杀死对撞机内的粒子
    • Outside:Callback粒子事件在对撞机外时触发。Ignore 当粒子在对撞机外部时,则不会触发事件。kill 杀死对撞机外的粒子
    • Enter:Callback粒子事件在进入对撞机时触发。Ignore 当粒子在进入对撞机时,则不会触发事件。kill 杀死对撞机进入的粒子
    • Exit:Callback粒子事件在离开对撞机时触发。Ignore 当粒子在离开对撞机时,则不会触发事件。kill 杀死对撞机离开的粒子
    • Radius Scale半径比例: 此参数设置粒子的碰撞边界,允许在碰撞碰撞物之前或之后发生事件。输入1,表示粒子碰撞碰撞器时发生的事件;输入小于1,触发器在粒子穿透碰撞器前出现;输入大于1,使触发器在粒子穿透碰撞器后出现
    • Visualize Bounds可视化边界:是否在编辑器窗口中显示粒子的碰撞边界。
    using UnityEngine;
    using System.Collections;
    using System.Collections.Generic;
     
    [ExecuteInEditMode]
    public class TriggerScript : MonoBehaviour
    {
        ParticleSystem ps;
        //这些列表被用来包含匹配的粒子
        //触发条件每个帧。
        List<ParticleSystem.Particle> enter = new List<ParticleSystem.Particle>();
        List<ParticleSystem.Particle> exit = new List<ParticleSystem.Particle>();
     
        void OnEnable()
        {
            ps = GetComponent<ParticleSystem>();
        }
     
        void OnParticleTrigger()
        {
            //得到与触发条件匹配的粒子这一帧
            int numEnter = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
            int numExit = ps.GetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
     
            //遍历进入触发器的粒子并使其为红色
            for (int i = 0; i < numEnter; i++)
            {
                ParticleSystem.Particle p = enter[i];
                p.startColor = new Color32(255, 0, 0, 255);
                enter[i] = p;
            }
            //遍历那些从触发器中退出的粒子并使它们变绿
            for (int i = 0; i < numExit; i++)
            {
                ParticleSystem.Particle p = exit[i];
                p.startColor = new Color32(0, 255, 0, 255);
                exit[i] = p;
            }
            //将被修改的粒子重新分配到粒子系统中
            ps.SetTriggerParticles(ParticleSystemTriggerEventType.Enter, enter);
            ps.SetTriggerParticles(ParticleSystemTriggerEventType.Exit, exit);
        }
    }

    将脚本挂到粒子上,且需要使用上碰撞模块,同时需要勾上碰撞器的允许碰撞

    粒子在进入对撞机时变成红色,在离开对撞机的界限时变成绿色。

    17、Inherit Velocity继承速率模块:控制粒子速度随着时间的推移如何对父对象移动。

    • Mode:指定发射器速度如何应用于粒子,Initial当每个粒子诞生时,发射器的速度将被施加一次。Current发射器的当前速度将被应用于每一帧的所有粒子。
    • Multiplier:粒子应该继承的发射器速度的比例。

    18、Sub Emitter子粒子发射模块:在粒子出生,碰撞,消灭时可以调用其他粒子。

    Birth 出生,Death 死亡,Collision 碰撞(碰撞需要建立碰撞模块)

    19、Texture Sheet Animation序列帧动画纹理模块:在其生命周期内动画化粒子的UV坐标,分为网格模式和精灵模式。

    • Tiles:纹理分为X(水平)和Y(垂直)两个方向。
    • Animation动画:动画模式可以设置为“Whole Sheet(整体)”或“ Single Row(单行)”(单行:表单的每一行代表一个单独的动画序列)。
    • Random Row随机行:从表格中随机选择一行以产生动画。此选项仅在选择Single Row(单行)作为Animation模式时可用。.
    • Row行:选择工作表中的特定行以生成动画此选项仅在选择“ Single Row(单行)”模式并禁用“ Random Row(随机行)”时可用。
    • Frame over Time随着时间的推移:指定动画框架随着时间的推移而增加的曲线。
    • Start Frame开始帧:允许指定粒子动画应该在哪个帧上开始(对每个粒子随机调整动画有用)
    • Cycles:动画序列在粒子寿命期间重复的次数。
    • Flip U翻转U:在一定比例的粒子上水平镜像纹理。较高的值翻转更多的粒子。
    • Flip V翻转V:在一定比例的粒子上垂直镜像纹理。较高的值翻转更多的粒子。
    • Enabled UV Channels启用UV通道:允许您精确指定哪些UV流受到粒子系统的影响。

    20、Lights灯光模式:使用此模块将实时灯光添加到粒子中,是一种快速添加实时灯光效果的方法。

    • Light灯光:指定一个Light Prefab来描述你的粒子灯应该如何显示。
    • Ratio比例:介于0和1之间的值,描述将接收光的粒子的比例。
    • Random Distribution随机分配:选择灯光是否随机或定期分配。勾选此设置每个粒子有一个随机的机会接受一个基于比例的光。较高的值会增加粒子发光的概率。取消勾选Ratio控制新创建的粒子接收光的频率(例如,每个第N个粒子将接收光)。
    • Use Particle Color使用粒子颜色:勾选此设置,光线的最终颜色将被其附着的粒子的颜色调制。取消勾选,则使用Light颜色而不进行任何修改。
    • Size Affects Range大小影响范围:启用时,Light中指定的Range(范围)将乘以粒子的大小。
    • Alpha Affects IntensityAlpha影响强度:启用时,光的Intensity(强度)乘以粒子阿尔法值。
    • Range Multiplier范围乘数:使用此曲线将自定义乘数应用于粒子生命周期中的光强度。
    • Intensity Multiplier强度乘数:使用此曲线将自定义乘数应用于粒子生命周期中的光强度。
    • Maximum Lights最大灯光:使用此设置可避免意外创建大量灯光,这可能会导致编辑器无响应或使您的应用程序运行速度非常缓慢。

    21、Trails足迹模块:使用此模块为粒子添加轨迹。(Particles(粒子)模式、Ribbon(飘带)模式)

    • Mode模式:Particle (粒子)模式、Ribbon (飘带)模式
    • Ratio比例:介于0和1之间的值,描述具体分配给它们的Trail的粒子的比例。
    • Lifetime生命周期:取值介于0和1之间的值。轨迹中每个顶点的生命周期,表示为它所属粒子生命周期的乘数。当 每个新的顶点被添加到轨迹中时,它在存在之后消失的时间比其总寿命长。
    • Minimum Vertex Distance最小顶点距离:定义粒子在其Trail接收新顶点之前必须行进的距离。
    • World Space世界空间:当启用时,即使使用Local Simulation Space(本地模拟空间),轨迹顶点也不会相对于粒子系统的游戏对象移动。相反,轨迹顶点在世界中被放弃,并且忽略粒子系统的任何移动。
    • Die With Particles粒子死亡:如果选中此复选框,则当它们的粒子死亡时,迹线立即消失。如果未选中此框,则剩余的路径将根据其剩余的生命期自然消失。
    • Ribbon Count丝带计数:选择在整个粒子系统中渲染多少个Ribbon(丝带)。值为1将创建一个连接每个粒子的单个功能区。但是,高于1的值会创建连接每个第N个粒子的色带。例如,当使用值2时,将有一个带连接颗粒1,3,5,另一个带连接颗粒2,4,6等。粒子的排序是根据它们的年龄决定的。
    • Split Sub Emitter Ribbons拆分子发射器丝带:当在用作子发射器的系统上启用时,从同一父系统粒子派生的粒子共享一个条带。
    • Texture Mode纹理模式:选择应用于轨迹的纹理是沿着其整个长度延伸,还是以每N个距离单位重复。重复率是根据Tiling (材料中)的Material(物质)参数来控制的。
    • Size affects Width大小影响宽度:如果启用(该框被选中),Trail宽度乘以粒度。
    • Size affects Lifetime大小影响生命周期:如果启用(该框被选中),轨迹寿命乘以粒度。
    • Inherit Particle Color继承粒子颜色:如果启用(该框被选中),Trail颜色将被粒子颜色调制。
    • Color over Lifetime足迹的颜色:一条曲线来控制路径在其长度上的颜色。
    • Width over Trail足迹的宽度:控制Trail在其长度上的宽度的曲线。
    • Color over Trail足迹的颜色:一条曲线来控制路径在其长度上的颜色。
    • Generate Lighting Data建立包含法线和切线的Trail几何:这允许他们使用使用场景照明的材质,例如通过标准着色器,或使用自定义着色器。

    22、Custom Data自定义数据模块:自定义数据模块允许在编辑器中定义自定义数据格式以附加到粒子。也可以在脚本中设置。

    数据可以采用Vector的形式,或者Color的形式。

    23、Renderer渲染器模块:渲染模块显示粒子系统渲染组件的属性,渲染器模块的设置决定了粒子的图像或网格如何被其他粒子转换,着色和透支。

    • Render Mode如何从图形图像(或网格)生成渲染图像。
    1. Billboard( 广告牌)粒子总是面向相机。    
    2. Stretched Billboard(拉伸的广告牌)粒子面向相机,但应用了各种缩放(见下文)。   
    3. Camera Scale(相机比例)根据相机移动拉伸粒子。将其设置为0可禁用相机移动拉伸。   
    4. Velocity Scale(速度比例)沿着它们速度的方向按比例地将粒子拉伸到当前的大小。将其设置为0有效长度为0,使得粒子消失。   
    5. Length Scale  (长度比例)   沿着它们速度的方向按比例地将粒子拉伸到当前的大小。将其设置为0使得粒子消失,具有有效的0长度。    
    6. Horizontal Billboard(水平广告牌) 粒子平面平行于XZ“底”平面。   
    7. Vertical Billboard( 垂直广告牌)粒子在Y轴上是直立的,但是面向相机。    
    8. Mesh(网孔)粒子是从3D网格而不是纹理渲染的。    
    9. None(无)如果您只想渲染路径并隐藏默认渲染,则在使用Trails模块时,这可能很有用。
    • Normal Direction(正常方向)用于粒子图形的照明法线偏移。相机的法线值为1.0,0.0值指向屏幕中心(仅限广告牌模式)。
    • Material(材料)用于渲染粒子的材质。
    • Trail Material(足迹材质)用于渲染粒子轨迹的材质。该选项仅在Trails模块启用时可用。
    • Sort Mode(排序模式)粒子被抽取的顺序(因此被重叠)。可能的值是By Distance (from the Camera),Oldest in Front和Youngest in Front。系统中的每个粒子将根据此设置进行排序。
    • Sorting Fudge                    粒子系统排序的偏差。较低的值会增加粒子系统相对于其他透明GameObjects(包括其他粒子系统)的相对机会。此设置仅影响整个系统出现在场景中的位置 - 它不会对系统中的单个粒子进行排序。
    • Min Particle Size(最小粒径)最小的颗粒大小(不管其他设置),表示为视口大小的一部分。请注意,此设置仅适用于“Rendering Mode(渲染模式)”设置为“Billboard(广告牌)”时。
    • Max Particle Size(最大粒径)最大粒径(不管其他设置),以视口尺寸的一部分表示。请注意,此设置仅适用于“Rendering Mode(渲染模式)”设置为“ Billboard(广告牌)”时。
    • Billboard Alignment(广告牌队列)使用下拉菜单选择粒子广告牌面对的方向。   
    1.  View粒子面向摄像机。   
    2. World粒子与世界轴线对齐。    
    3. Local粒子与其GameObject的Transform组件对齐。    
    4. Facing粒子面对Camera GameObject的直接位置。
    • Pivot(中心点)修改用作旋转粒子中心的中心点。
    • Visualize Pivot(可视化中心点)在场景视图中预览粒子中心点。
    • Custom Vertex Streams(自定义定点流)在您的材质的顶点着色器中配置哪些粒子属性可用。
    • Cast Shadows(投射阴影)如果启用,粒子系统在阴影投射光照时创建阴影。    
    1. On选择On(开)可启用阴影。    
    2. Off选择Off (关)可禁用阴影。    
    3. Two-Sided(双面)选择Two Sided(双面)可以从网格的任何一边投射阴影(意思是不考虑背面剔除)。    
    4. Shadows Only(仅阴影)择 Shadows Only(仅阴影)为了使阴影可见,但是网格本身不是。
    • Receive Shadows(接收阴影)指示是否可以将阴影投射到粒子上。只有不透明的材料可以获得阴影。
    • Sorting Layer(排序图层)渲染器的排序图层的名称。
    • Order in Layer(在图层中订购)此渲染器在排序图层中的顺序。
    • Light Probes(光探针)基于interpolation (探头)的照明插值模式。
    • Reflection Probes(反射探针)如果启用并且场景中存在反射探针,则会为此GameObject选取反射纹理,并将其设置为内置Shader统一变量。
    • Anchor Override(锚覆盖)用于确定使用Light Probe(光探针)或Reflection Probe(反射探针)系统时的插值位置的变换。

    根据网上的博客及官网的资料做个归纳,方便以后查找。

    https://docs.unity3d.com/Manual/PartSysMainModule.html

    这是总结的很好的博客地址

    https://blog.csdn.net/huangruqi888/article/details/79286592

    展开全文
  • canvas 粒子效果

    2020-01-15 20:44:47
    用到了underscore.js框架 通过类来生成和改变球的位置 通过定时器来清屏后添加球 <html> <head> <meta charset="utf-8"> <title></title> <script src='js/......

    用到了underscore.js框架
    鼠标移动事件
    通过类来生成和改变球的位置
    通过定时器来清屏后添加球

    <html>
    <head>
    	<meta charset="utf-8">
    	<title></title>
    	<script src='js/underscore.js'></script>
    
    	<style>
    		.canvas{
    			border:solid 2px black;
    			background-color: black;
    		}
    	
    	
    	</style>
    </head>
    <body>
    
    	<canvas width="1390px" height="700px" class='canvas'>您的浏览器不支持canvas标签,请变更支持canvas的浏览器</canvas>
    	<script>
    			var	canvas=document.querySelector(".canvas");
    			var bi=canvas.getContext('2d');
    			var ballArr=[]; //小球数组
    
    			//小球类
    				function Ball(x,y)
    				{
    					this.x=x;
    					this.y=y;
    					this.r=_.random(5,10);
    					this.color=_.sample(['red','orange','yellow','green','cyan','blue','purple']);
    					//坐标的增减量
    					this.dx=_.random(-4,4);
    					this.dy=_.random(-4,4);
    
    					//每有一个小球就放进数组里,为后面多个小球同时操作铺垫
    					ballArr.push(this);
    				}
    				//给所有对象提供共有的画小球原型方法
    				Ball.prototype.draw=function()
    				{
    					//如果小球半径减小到0,就消失不生成
    					if(this.r<=0)
    					{
    						return;
    					}
    					//画小球
    					bi.beginPath();
    					bi.arc(this.x,this.y,this.r,0*Math.PI,2*Math.PI,false);
    					bi.fillStyle=this.color;
    					bi.fill();
    
    					bi.closePath();
    				}
    				//使鼠标移动时小球位置也改变
    				Ball.prototype.update=function()
    				{
    					this.x+=this.dx;
    					this.y+=this.dy;
    					this.r-=0.5;
    					//如果当前小球半径小于0,则移除
    					if(this.r<=0)
    					{
    						_.without(ballArr,this);
    					}
    				}
    			//鼠标移动时间创建小球
    			
    			canvas.onmousemove=function(){
    				new Ball(event.offsetX,event.offsetY);
    			};
    			//fps=50;
    			setInterval(function(){
    				//清屏
    				bi.clearRect(0,0,1390,700);
    				//划上所有的小球
    				_.each(ballArr,function(ele){
    					//使鼠标停住时改变小球位置
    					ele.update();
    					ele.draw();
    
    				})
    			},25);
    
    	</script>
    	
    </body>
    
    </html>
    
    展开全文
  • 粒子动画

    千次阅读 2019-05-17 10:27:12
    比起不做而后悔,不如做了再后悔 ——《游戏人生》平常咱们常见的特效: 诸如此类。今天将学习一种特殊的特效——“粒子...粒子系统粒子系统是众多粒子的集合。一般具有具有粒子的更新,显示,销毁及其创建粒子

    ***比起不做而后悔,不如做了再后悔 ——《游戏人生》***


    平常咱们常见的特效:
    这里写图片描述

    这里写图片描述

    这里写图片描述
    诸如此类。

    今天将学习一种特殊的特效——“粒子特效”。

    粒子特效

    粒子是什么?粒子是一种微小的物体,比如像我们周边环境中的雪花,火星等物体。因此在游戏中一般都用粒子特效来模拟咱们现实生活中的许多自然现象。
    

    粒子系统

    粒子系统是众多粒子的集合。一般具有具有粒子的更新,显示,销毁及其创建粒子等性质。不同的粒子系统具有不同的粒子行为,所以所具有的性质会略有区别。
    

    使用粒子技术

    1、从基础开始
    2、使用四边形来绘制粒子
    3、使用点精灵来进行绘制


    • 从基础开始
      粒子通常是一个四边形,用一小组纹理渲染,因此绘制一个粒子只需要使用两个三角形(构成一个四边形)。但必须根据公告板(billboarding)的渲染来确保多边形总是面向观察者。所谓公告板(billboarding)就是一个四边形,通过对其自身世界变换矩阵的控制,使其总是面向摄像机。
      如图:
      两个三角形
      两个三角形组合在一起构成一个四方形,从上往下看,公告板确保多边形总是面向观察者的。

      最初,一个公告板(billboarding)对象被创建出来指向的是Z轴负向,但随着观察者的移动,公告板对象旋转以使它总是面向观察者。
      如图:
      这里写图片描述
      位于左边的四边形初始时指向Z轴负向,当绘制时不断发生旋转,使它面向观察者。
      因此使用公告板技术,主要可以节省存储器并加快渲染的速度,不过显示的粒子有点让人大跌眼镜。


    • 使用四边形绘制粒子
      绘制粒子就如同绘制多边形一样,使用两个三角形组合创建一个粒子。
      如图创建了一个10单位大小的粒子:
      这里写图片描述
      一个10单位大小的粒子,它在原点上沿着x轴和y轴分别延伸5个单位。(由于做粒子动画,公告板技术(billboarding)的效果不如后面所介绍的***点精灵***好,所以没仔细了解,下次补充)

    • 使用点精灵
      什么是点精灵?
      点精灵就是增加了渲染的公告板(billboarding),点精灵中,每个粒子被表示为一个单一的三维坐标(粒子的中心)和粒子的尺寸值,因此存储和处理的时候只需要处理一个顶点而非4个,这相比上面的公告板(billboarding)技术就节省了内存和大量的时间。

      结构格式

    struct Particle
    {
    	D3DXVECTOR3 position;  //粒子的位置
    	D3DCOLOR _color;       //粒子的颜色,可选可不选,看个人需求
    	float x,y;             //纹理映射坐标
    	static const DWORD FVF;    //灵活顶点格式
    };
    const DWORD Particle::D3DFVF_POINTVERTEX = D3DFVF_XYZ | D3DFVF_DIFFUSE | D3DFVF_TEX1;  //每一个顶点格式和该结构体中的每一类信息一一对应
    

    点精灵的绘制状态

    Status bool describe
    D3DRS_POINTSPRITEENABLE true 规定整个当前纹理被映射到点精灵上
    false 规定点精灵的纹理坐标根据所指定的纹理单元被映射到点精灵上
    D3DRS_POINTSCALEENABLE true 规定点的尺寸将用观察坐标系的单位来度量(点精灵的尺寸将根据近大远小的原则进行相应的比例变换)
    false 规定点的尺寸将用屏幕坐标系的单位(像素)来度量
    Status type describe
    D3DRS_POINTSIZE D3DRENDERSTATETYPE 用于指定点精灵的尺寸
    D3DRS_POINTSIZE_MIN D3DRENDERSTATETYPE 指定点精灵可取的最小尺寸
    D3DRS_POINTSIZE_MAX D3DRENDERSTATETYPE 规定点精灵可取的最大尺寸

    使用样例:

    //当前纹理映射到点精灵上
    IDirect3DDevice9	*g_Device=NULL;
    g_Device->SetRenderState(D3DRS_POINTSPRITEENABLE, true);
    
    //点的尺寸用观察坐标系的单位来度量
    g_Device->SetRenderState(D3DRS_POINTSCALEENABLE, true);
    
    //指定点精灵的尺寸
    g_Device->SetRenderState(D3DRS_POINTSIZE,FloatoD(1.0f));
    //因为SetRenderState函数要求传入的类型必须是DWORD类型而不是float类型的
    DWORD FloatoD(float f)
    {
    	return *((DWORD*)&f);   //采取强制转换
    }
    
    //指定最小 OR 最大尺寸,也和指定点精灵的尺寸类似,不过是将第一个参数进行修改
    
    

    粒子所具备的属性:

    粒子除了位置和其颜色之外应该还具有其他属性,比如粒子应该具有一定的速度或者加速度,某些特别的粒子还应具有旋转速度,生存周期等属性。
    因此我们可以定义如下粒子类
    
    //Demo 粒子基类
    class Particle
    {
    public:
    	D3DXVECTOR3					m_Pos;				//粒子的位置
    	D3DXVECTOR3					m_velocity;			//粒子的速度
    	FLOAT						m_RotationX;		//X轴旋转速度
    	FLOAT						m_RotationY;		//Y轴旋转速度
    	FLOAT						m_FallSpeed;		//下降速度
    	FLOAT						m_RotationSpeed;	//旋转速度
    	INT							m_TextureIndex;		//纹理索引
    	FLOAT						m_size;				//粒子的大小
    
    	DWORD						m_vbSize;			//顶点缓存中存储顶点的个数
    	DWORD						m_vbOffset;			//偏移量
    	DWORD						m_vbBatchSize;		//每批粒子的数目
    
    	IDirect3DDevice9			*m_d3dDevice;		//设备对象
    	LPDIRECT3DVERTEXBUFFER9		m_pVertexBuffer;      //粒子顶点缓存
    
    public:
    	
    	Particle() {}
    	virtual ~Particle() {}
    };
    

    有了这个粒子类,我们还需要定义某个具体的粒子系统类,该类的任务是操作粒子,完成粒子的产生,更新,渲染,消失再到生成的过程。
    定义如下:

    //继承粒子类,形成新的雪花粒子类
    class SNOW :public Particle
    {
    public:
    	SNOW(IDirect3DDevice9* _d3dDevice);                
    	SNOW(){}
    	virtual ~SNOW();
    	HRESULT InitSnowParticle();							//粒子系统初始化函数
    	HRESULT UpdateSnowParticle(float fElapsedTime);    //粒子系统更新函数
    	VOID PreRenderSnowParticle();					//粒子系统渲染准备
    	HRESULT RenderSnowParticle();						//粒子系统渲染函数		
    														
    	LPDIRECT3DTEXTURE9			m_pTexture[6];		//雪花纹理数组//
    };
    

    看看各个成员函数之间的内容

    雪花粒子初始化:(Initialize)

    HRESULT SNOW::InitSnowParticle()
    {
    	//利用随机数函数,给雪花粒子的坐标位置,旋转速度,下降速度,及其纹理赋予初值
    	srand(GetTickCount());
    	for (int i=0;i<PARTICLE_MAXNUM;i++)
    	{
    		FLOAT X = (FLOAT)(rand() % SNOW_LENGTH_X-SNOW_LENGTH_X/3);
    		FLOAT Y = (FLOAT)(rand() % SNOW_WIDTH_Z-SNOW_WIDTH_Z/3);
    		FLOAT Z = (FLOAT)(rand() % SNOW_HEIGHT_Y-SNOW_HEIGHT_Y/3);
    		snows[i].m_Pos = D3DXVECTOR3(X, Y, Z);
    		snows[i].m_RotationX = (rand() % 180)*0.020f*D3DX_PI;
    		snows[i].m_RotationY = (rand() % 180)*0.020f*D3DX_PI;
    		snows[i].m_FallSpeed = (rand() % 300) + 100.0F;
    		snows[i].m_RotationSpeed = 3.0f + rand() % 10 * 0.1f;
    		snows[i].m_TextureIndex = rand() % 6;
    	}
    
    	//创建雪花粒子顶点缓存
    	m_d3dDevice->CreateVertexBuffer(4 * sizeof(_POINT), 0,
    		_POINT::D3DFVF_POINTVERTEX, D3DPOOL_MANAGED, &m_pVertexBuffer, NULL);
    
    	//填充雪花粒子顶点缓存
    	_POINT vertices[] =
    	{
    		{D3DXVECTOR3(-30.0F,0.0F,0.0F),0.0F,1.0F,},
    		{D3DXVECTOR3(-30.0F,60.0F,0.0F),0.0F,0.0F,},
    		{D3DXVECTOR3(30.0F,0.0F,0.0F),1.0F,1.0F},
    		{D3DXVECTOR3(30.0F,60.0F,0.0F),1.0F,0.0F}
    	};
    
    	//加锁
    	VOID* pVertices;
    	m_pVertexBuffer->Lock(0, sizeof(vertices), (void**)&pVertices, 0);
    	//访问
    	memcpy(pVertices, vertices, sizeof(vertices));
    	//解锁
    	m_pVertexBuffer->Unlock();
    
    	//创建6种雪花纹理
    	D3DXCreateTextureFromFile(m_d3dDevice, L"snow1.jpg", &m_pTexture[0]);
    	D3DXCreateTextureFromFile(m_d3dDevice, L"snow2.jpg", &m_pTexture[1]);
    	D3DXCreateTextureFromFile(m_d3dDevice, L"snow3.jpg", &m_pTexture[2]);
    	D3DXCreateTextureFromFile(m_d3dDevice, L"snow4.jpg", &m_pTexture[3]);
    	D3DXCreateTextureFromFile(m_d3dDevice, L"snow5.jpg", &m_pTexture[4]);
    	D3DXCreateTextureFromFile(m_d3dDevice, L"snow6.jpg", &m_pTexture[5]);
    
    	return S_OK;
    }
    

    雪花粒子的属性更新,形成动画效果:(Update)

    HRESULT SNOW::UpdateSnowParticle(float fElapsedTime)
    {
    	//一个for循环,更新每个雪花粒子的当前位置和角度
    	for (int i = 0; i < PARTICLE_MAXNUM; i++)
    	{
    		FLOAT Y = snows[i].m_FallSpeed*fElapsedTime;
    		D3DXVECTOR3 temp = D3DXVECTOR3(0, Y, 0);
    		snows[i].m_Pos -= temp;
    
    		//如果雪花粒子落到地面, 重新将其高度设置为最大
    		if (snows[i].m_Pos.y <=-1000)
    		{
    			snows[i].m_Pos.y = SNOW_HEIGHT_Y;
    		}
    	
    		//更改自旋角度
    		snows[i].m_RotationX += snows[i].m_RotationSpeed * fElapsedTime;
    		snows[i].m_RotationY += snows[i].m_RotationSpeed * fElapsedTime;
    	}
    
    	return S_OK;
    }
    

    雪花粒子渲染前准备:(Previous Render)

    //设置好各种状态
    VOID SNOW::PreRenderSnowParticle()
    {
    	//禁用照明效果
    	m_d3dDevice->SetRenderState(D3DRS_LIGHTING, false);
    
    	//设置纹理状态
    	m_d3dDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_SELECTARG1);   //将纹理颜色混合的第一个参数的颜色值用于输出
    	m_d3dDevice->SetTextureStageState(0, D3DTSS_COLORARG1, D3DTA_TEXTURE);   //纹理颜色混合的第一个参数的值就取纹理颜色值
    	m_d3dDevice->SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR);  //缩小过滤状态采用线性纹理过滤
    	m_d3dDevice->SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR); //放大过滤状态采用线性纹理过滤
    
    																		 //设置Alpha混合系数
    	m_d3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, true);   //打开Alpha混合
    	m_d3dDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_ONE);   //源混合系数设为1
    	m_d3dDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);  //目标混合系数设为1
    
    	m_d3dDevice->SetRenderState(D3DRS_ZENABLE, false);		    //关闭深度缓存
    
    	//设置剔出模式为不剔除任何面
    	m_d3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_NONE);
    }
    

    最后开始渲染粒子:(Render Particles)

    HRESULT SNOW::RenderSnowParticle()
    {
    	PreRenderSnowParticle();
    
    	//渲染雪花
    	for (int i = 0; i < PARTICLE_MAXNUM; i++)
    	{
    		//构造并设置当前雪花粒子的世界矩阵
    		static D3DXMATRIX matYaw, matPitch, matTrans, matWorld;
    		D3DXMatrixRotationY(&matYaw, snows[i].m_RotationY);
    		D3DXMatrixRotationX(&matPitch, snows[i].m_RotationX);
    		D3DXMatrixTranslation(&matTrans, snows[i].m_Pos.x, snows[i].m_Pos.y, snows[i].m_Pos.z);
    		matWorld = matYaw * matPitch * matTrans;
    		m_d3dDevice->SetTransform(D3DTS_WORLD, &matWorld);
    
    		//渲染当前雪花粒子
    		m_d3dDevice->SetTexture(0, m_pTexture[snows[i].m_TextureIndex]);    //设置纹理
    		m_d3dDevice->SetStreamSource(0, m_pVertexBuffer, 0, sizeof(_POINT));  //把包含的几何体信息的顶点缓存和渲染流水线相关联  
    		m_d3dDevice->SetFVF(_POINT::D3DFVF_POINTVERTEX);    //设置FVF灵活顶点格式
    		m_d3dDevice->DrawPrimitive(D3DPT_TRIANGLESTRIP, 0, 2);   //绘制
    
    	}
    
    	//恢复相关渲染状态:Alpha混合 、剔除状态、光照
    	m_d3dDevice->SetRenderState(D3DRS_ALPHABLENDENABLE, false);
    	m_d3dDevice->SetRenderState(D3DRS_CULLMODE, D3DCULL_CCW);
    	m_d3dDevice->SetRenderState(D3DRS_LIGHTING, true);
    
    	return S_OK;
    }
    

    好了,基本粒子的核心部分算是完了。

    运行效果图:

    这里写图片描述

    代码下载链接:

    http://download.csdn.net/download/qq_33248019/10133773

    码云源代码:

    https://gitee.com/lengya/codes/3nvc2hsaq1lbf67jdprkm73

    展开全文
  • 粒子背景登录页面

    2020-07-30 23:31:53
    网页制作、静态页面,带粒子背景的登录页面。炫酷页面。
  • 3d学习笔记(七)——粒子系统

    千次阅读 2018-05-29 09:46:28
    粒子系统 作业要求 这周的作业是在已有的资源的基础上,根据上课所了解的粒子系统,制作自己的粒子系统,并通过代码控制,实现自定义的粒子在不同场景中的效果。 作业资源 话不多说,先上传一下作业最终的版本...

    粒子系统

    作业要求

    这周的作业是在已有的资源的基础上,根据上课所了解的粒子系统,制作自己的粒子系统,并通过代码控制,实现自定义的粒子在不同场景中的效果。

    作业资源

    话不多说,先上传一下作业最终的版本跟效果视频

    理解粒子系统

    尽管该次作业有老师提供的博客参考,不过由于unity版本的不同,粒子系统上的参数设置也是很不一样,最后还是需要自己学习理解每一个参数究竟是干嘛的,最终才能实现自定义的粒子

    particle主控

    这里写图片描述

    • Duration:粒子发射周期,如图的意思就是在发射3.32秒以后进入下一个粒子发射周期。如果没有勾选looping的话,0.6秒之后粒子会停止发射。
    • Looping:粒子按照周期循环发射。
    • Prewarm:预热系统,比如说我有一个空间大小的粒子系统,但是粒子发射速度有限,我想在最开始的时候让粒子充满空间,此时就应该勾选Prewarm。
    • StartDelay:粒子延时发射,勾选后,延长一段时间才开始发射。
    • StartLifeTime:粒子从发生到消失的时间长短。
    • StartSpeed:粒子初始发生时候的速度。
    • 3DStartSize:这个属性是当你需要把粒子在某一个方向上扩大的时候使用。
    • StartSize:粒子初始的大小。
    • 3DStartRotation:需要在一个方向旋转了子的时候可以使用。
    • StartRotation:粒子初始旋转。
    • RandomizeRotation:随机旋转粒子方向,感觉在3D粒子的情况下,尤其是圆形的没什么用。
    • StartColor:粒子初始颜色,可以调整加上渐变色。
    • GravityModifier:重力修正。
    • SimulationSpace:a.Local,此时粒子会跟随父级物体移动。b.World,此时粒子不会跟随父级移动。c.Custom,粒子会跟着指定的物体移动。
    • SimulationSpeed:根据Update模拟的速度。
    • DeltaTime:一版的DeltaTime都是1,如果需要用到Sacled是在游戏需要暂停的时候,根据TimeManager来定。如果选择UnScale的话,就会忽略时间的影响。
    • ScalingMode:Local:粒子系统的缩放和自己Transform的一样会忽略父级的缩放。Hierarchy:粒子缩放跟随父级。Shape:将粒子系统跟随初始位置,但是不会影响粒子系统的大小。
    • EmitterVelocity:
    • MaxParticles:粒子系统可以同时存在的最大粒子数量。如果粒子书数量超过最大值粒子系统会销毁一部分粒子。
    • AutonRandomSeed:随机种子,如果勾选会生成完全不同不重复的粒子效果,如果勾选即为可重复。

    Emission

    这里写图片描述

    • RateOverTime:随单位时间生成粒子的数量。
    • RateOverDistance:随着移动距离产生的粒子数量。只有当粒子系统移动时,才发射粒子。
    • Bursts:
      • Time:从第几秒开始。
      • Min:最小粒子数量。
      • Max:最大的粒子数量,粒子的数量会在Min和Max之间随机。
      • Cycles:在一个周期中循环的次数。
      • Interval:两次两次Cycles的间隔时间。

    Shape

    这里写图片描述

    • Shape:规定了粒子初始位置的形状
    • 下面就是调整一下该形状的参数

    Color over Lifetime

    这里写图片描述
    这里写图片描述

    • 颜色渐变器:即粒子从产生到消失的颜色变化,左边是开始,右边是消失,中间是存在时的颜色

    Textures Sheet Animation

    这里写图片描述

    • Mode:
      • Grid:用网格来实现。
      • Sprite:通过相同尺寸的Sprite实现粒子动画。
    • Tiles:网格的行列数。
    • Animation:
      • WholeSheet:动画作用于整个表格。
      • SingleRow:动画只用于单独一行。有一个随机的选项可以选择或者是选择单独的一行来做动画。
    • FrameOverTime:根据时间来播放帧,横坐标是1s,纵坐标是帧数。
    • StartFrame:开始的帧是哪一帧。
    • Cycles:在1秒之内循环播放的次数。
    • FlipU:翻转U。
    • FlipV:翻转V。
    • EnabledUVChannels:

    Renderer

    这里写图片描述

    • RenderMode:
      • Billboard:粒子总是面对相机。
      • StretchedBillboard:伸展板,可以根据相机,速度,长度来调节粒子的缩放。
      • HorizontalBillboard:粒子平面平行于Floor平面。
      • VerticalBillboard:粒子平面平行于世界坐标的Y轴,但是面向相机。
      • Mesh:将粒子渲染到网格上去。
    • TrailMaterial:需要使用拖尾效果的时候,才附材质。
    • Material:用于渲染粒子的材质。
    • SortMode:
      • ByDistance:根据粒子离相机的距离渲染。
      • OldestInFront:先渲染出来的在最上层。
      • YoungestInFront:后渲染出来的在最上层。
    • SortingFudge:排序容差,仅影响整个系统在场景中出现的位置。Sorting值越小,就越容易粒子系统在其它透明的GameObjects上绘制的机会。
    • Pivot:修改粒子渲染的轴点。
    • VisualizePivot:可视化轴点。
    • Masking:
    • CustomVertexStreams:在材质的顶点着色器中配置哪些粒子属性可用。
    • CastShadows:使用阴影。
    • ReceiveShadows:规定阴影是否可以投射到粒子上,只有Opaque(不透明)的材质可以接受阴影。
    • MotionVectors:

    作业实践

    未控制的粒子

    粒子包括三个部分:

    • 中间光的模拟
    • 光晕的模拟
    • 周围星光的模拟

    具体设置的参数如下:

    • 中间光的模拟
      这里写图片描述
      这里写图片描述

    • 光晕的模拟
      这里写图片描述
      这里写图片描述

    • 周围星光的模拟
      这里写图片描述
      这里写图片描述

    • 注意的是三者都是创建在空对象的下面

    代码控制的粒子

    模拟下矿洞,或者调入深渊中,头上的太阳模拟

    • 控制光的代码
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class change2 : MonoBehaviour
    {
    
        ParticleSystem exhaust;
        float size = 1.7f;
    
        // Use this for initialization
        void Start()
        {
            exhaust = GetComponent<ParticleSystem>();
        }
    
        // Update is called once per frame
        void Update()
        {
            size = size * 0.999f;
            var main = exhaust.main;
            main.startSize = size;
        }
    }
    • 控制光晕的代码
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class change : MonoBehaviour {
    
        ParticleSystem exhaust;
        float size = 5f;
    
        // Use this for initialization
        void Start () {
            exhaust = GetComponent<ParticleSystem>();
        }
    
        // Update is called once per frame
        void Update () {
            size = size * 0.999f;
            var main = exhaust.main;
            main.startSize  = size;
        }
    }
    
    • PS:由于不知道怎么把startsize的属性赋值到float上,所以只能笨拙的在代码中先行输入了大小

    遇到的问题

    主要是在texture模块中,关于一个有多个帧的图片,怎么去切割,以及怎么去规定从哪一帧开始,一秒多少帧的问题。这个大概花去了我做这个作业的一半时间。具体也不多说了,还是得自己去理解,上面有参数的说明,可以尝试自己理解后制作。

    展开全文
  • 粒子群优化算法(PSO)

    万次阅读 多人点赞 2019-07-22 09:51:31
    粒子群优化算法(Partical Swarm Optimization PSO),粒子群中的每一个粒子都代表一个问题的可能解,通过粒子个体的简单行为,群体内的信息交互实现问题求解的智能性。由于PSO操作简单、收敛速度快,...
  • 粒子群算法详解

    万次阅读 多人点赞 2019-05-22 12:14:14
    粒子群算法(particle swarm optimization,PSO)是计算智能领域中的一种生物启发式方法,属于群体智能优化算法的一种,常见的群体智能优化算法主要有如下几类:  (1)蚁群算法(Ant Colony Optimization,简称ACO...
  • 从鸟群觅食行为到粒子群算法 粒子群算法的核心 例 : 求解函数最小值 粒子群算法的驱动因素 从鸟群觅食行为到粒子群算法 鸟群寻找食物的过程中,鸟与鸟之间存在着信息的交换,每只鸟搜索目前离食物最近...
  • Particle Filter Tutorial 粒子滤波:从推导到应用(一)

    万次阅读 多人点赞 2017-12-28 15:58:49
     博主在自主学习粒子滤波的过程中,看了很多文献或博客,不知道是看文献时粗心大意还是悟性太低,看着那么多公式,总是无法把握住粒子滤波的思路,也无法将理论和实践对应起来。比如:理论推导过程中那么多概率公式...
  • 粒子群算法的matlab实现(一)

    万次阅读 多人点赞 2017-07-04 16:32:34
    粒子群算法(Particle Swarm Optimization,PSO)是20世纪90年代兴起的一门学科,因其概念简明、实现方便、收敛速度快而为人所知。粒子群算法的基本思想是模拟鸟群随机搜寻食物的捕食行为,鸟群通过自身经验和种群...
  • Android制作粒子爆炸特效

    万次阅读 多人点赞 2015-12-27 12:50:42
    简介最近在闲逛的时候,发现了一款粒子爆炸特效的控件,觉得比较有意思,效果也不错。 但是代码不好扩展,也就是说如果要提供不同的爆炸效果,需要修改的地方比较多。于是我对源代码进行了一些重构,将爆炸流程和...
  • MATLAB 粒子群算法,例题与常用模版

    万次阅读 多人点赞 2020-08-03 11:16:31
    MATLAB 粒子群算法 本文学习自:Particle Swarm Optimization in MATLAB - Yarpiz Video Tutorial 与《精通MATLAB智能算法》 1. 简介: Particle Swarm Optimization ,粒子群优化算法,常用来找到方程...
  • 粒子群算法(1)----粒子群算法简介

    万次阅读 多人点赞 2007-04-24 20:46:00
    粒子群算法简介一、粒子群算法的历史 粒子群算法源于复杂适应系统(Complex Adaptive System,CAS)。CAS理论于1994年正式提出,CAS中的成员称为主体。比如研究鸟群系统,每个鸟在这个系统中就称为主体。主体有适应...
  • 粒子滤波(Particle filter)算法简介及MATLAB实现

    万次阅读 多人点赞 2018-11-12 10:56:05
    重要性采样呢,其实就是根据对粒子的信任程度添加不同的权重,添加权重的规则就是:对于我们信任度高的粒子,给它们添加的权重就相对大一些;否则,就加的权重小一些。根据权重的分布形式,实际上就是它与目标的相似...
  • Particle Filter Tutorial 粒子滤波:从推导到应用(三)

    万次阅读 多人点赞 2015-03-11 16:40:22
    就是经过几次迭代以后,很多粒子的权重都变得很小,可以忽略了,只有少数粒子的权重比较大。并且粒子权值的方差随着时间增大,状态空间中的有效粒子数较少。随着无效采样粒子数目的增加,使得大量的计算浪费在对估计...
  • threejs粒子粒子系统

    2020-05-07 15:49:18
    粒子粒子系统1. 粒子的创建2. 粒子系统3. 用HTML5画布格式化粒子(1) 在CanvasRenderer类里使用HTML5画布(2) 在WebGLRenderer中使用HTML5画布4. 使用纹理格式化粒子(1) 单个材质(雨滴为例)(2) 多个材质...
  • Particle Filter Tutorial 粒子滤波:从推导到应用(四)

    万次阅读 多人点赞 2018-12-26 14:44:49
     SIR滤波器很容易由前面的基本粒子滤波推导出来,只要对粒子的重要性概率密度函数做出特定的选择即可。在SIR中,选取:   p( x(k)|x(k-1) )这是先验概率,在第一章贝叶斯滤波预测部分已经说过怎么用状态方程来...
  • OpenGL--粒子系统

    万次阅读 2015-08-08 14:37:51
    1,粒子系统的基本思想是用许多形状简单且赋予生命的微小粒子作为基本元素来表示物体(一般由点或很小的多边形通过纹理贴图表示),侧重于物体的总体形态和特征的动态变化。把物体定义为许多不规则,随机分布的粒子,...
  • 最优化算法之粒子群算法(PSO)

    万次阅读 多人点赞 2018-08-03 10:26:45
    一、粒子群算法的概念   粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的...
1 2 3 4 5 ... 20
收藏数 58,109
精华内容 23,243
关键字:

粒子