一、 概要介绍:
粒子系统主要是用来模拟游戏场景中的固定变化的液体或气体类实体,例如大雨、烟雾、薄雾、火焰等。粒子系统主要由三部分组成:
1、粒子(Particle),指我们所看见的真实物体。
2、粒子发射器(Particle Emitter),指使粒子成为存在实体的东西。
3、粒子发射器节点(Particle Emitter Node),指粒子发射器所依附的对象,当粒子作为独立粒子时,必须要用到粒子发射器节点,例如游戏中的火焰等就必须当作是独立粒子。如果粒子是依附粒子,比如水枪喷射的水、火焰上冒出的烟等依附在游戏玩家、武器、交通工具的粒子就叫做依附粒子,这种类型的粒子只需要粒子和粒子发射器来定义。
二、 属性参数:
粒子编辑器主要是用来在场景中动态设置粒子以及粒子发射器的各种属性,所以在使用粒子编辑器之前必须首先熟悉它们各种属性参数所代表的意思。下面是一个简单例子:
//消防员水枪粒子属性
datablock ParticleData(fireManWaterGunParticle)
{
canSaveDynamicFields = "1"; // 能否动态保存参数设置
dragCoefficient = "0"; // 阻力系数(沿发射方向的减速度)
windCoefficient = "0"; // 风力系数(值越大,受风力影响越大)
gravityCoefficient = "0.559219"; // 重力系数
inheritedVelFactor = "0.908023"; // 继承速度
constantAcceleration = "0"; // 沿发射方向的加速度
lifetimeMS = "3616"; // 粒子寿命(最小值为100MS)
lifetimeVarianceMS = "0"; // 随机性粒子寿命(必须小于lifetimeMS)
spinSpeed = "0.01"; // 图片旋转速度
spinRandomMin = "-100"; // 图片最大允许旋转角度
spinRandomMax = "0"; // 图片最小允许旋转角度
useInvAlpha = "1"; // 透明区域颜色切换
animateTexture = "0"; // 为1时,允许使用动画粒子图片纹理
framesPerSec = "0"; // 动画帧速度
textureName = "starter.fps/data/shapes/particles/dustParticle.png"; // 粒子图片路径
animTexName[0] = "starter.fps/data/shapes/particles/dustParticle.png"; // 动画帧
colors[0] = "1 1 1 1"; // 粒子颜色(各个寿命阶段)
colors[1] = "1 1 1 1";
colors[2] = "1 1 1 1";
colors[3] = "1 1 1 1";
sizes[0] = "0.2"; // 粒子大小(各个寿命阶段)
sizes[1] = "0.38";
sizes[2] = "0.33";
sizes[3] = "0.16";
times[0] = "0"; // 粒子寿命的各个阶段
times[1] = "0.5";
times[2] = "0.75";
times[3] = "1";
};
粒子发射器和粒子节点发射器的各项属性说明不在这里作详细介绍,具体参数详细介绍参见开发大全P520~522页。
三、 函数接口
粒子:ParticleData. reload() // 重新载入粒子数据块
粒子发射器:ParticleEmitterData. reload() // 重新载入粒子发射器数据块
粒子发射器节点:ParticleEmitterNode. setEmitterDataBlock(“data”) // 设置粒子发射器datablock,可以用来变换不同的粒子发射器。
四、 爆炸特效
Tge支持爆炸特效,有一个专门的explosion类用来模拟场景中的爆炸效果。下面以一个简单例子介绍一下ExplosionData各属性的意义。
datablock ExplosionData(CrossbowExplosion)
{
soundProfile = CrossbowExplosionSound; // 爆炸声音
lifeTimeMS = 1200; // 爆炸持续时间
// 爆炸火焰粒子效果
particleEmitter = CrossbowExplosionFireEmitter; // 粒子发射器
particleDensity = 75; // 粒子密度
particleRadius = 2; // 粒子范围
// 爆炸烟雾粒子效果
emitter[0] = CrossbowExplosionSmokeEmitter;
emitter[1] = CrossbowExplosionSparkEmitter;
// 摄像机振动效果
shakeCamera = true; // 摄像机是否振动
camShakeFreq = "10.0 11.0 10.0"; // 摄像机振动频率
camShakeAmp = "1.0 1.0 1.0"; // 摄像机振幅
camShakeDuration = 0.5; // 摄像机振动持续时间
camShakeRadius = 10.0; // 摄像机振动范围
// 爆炸碎片效果
debris = CrossbowExplosionDebris; // 碎片data定义
debrisThetaMin = 0; // 碎片最小旋转角度(围绕X轴)
debrisThetaMax = 60; // 碎片最大旋转角度(围绕X轴)
debrisPhiMin = 0; // 碎片最小旋转角度(围绕Z轴)
debrisPhiMax = 360; // 碎片最大旋转角度(围绕Z轴)
debrisNum = 6; // 碎片数量
debrisNumVariance = 2; // 碎片随机数量
debrisVelocity = 1; // 碎片发散速度
debrisVelocityVariance = 0.5; //碎片随机发散速度
// 爆炸冲击力
impulseRadius = 10; // 爆炸冲击波影响范围
impulseForce = 15; // 爆炸冲击力系数
// 爆炸光热效果
lightStartRadius = 6; // 光在爆炸开始时辐射范围
lightEndRadius = 3; // 光在爆炸结束时辐射范围
lightStartColor = "0.5 0.5 0"; // 光在爆炸开始时颜色
lightEndColor = "0 0 0"; // 光在爆炸结束时颜色
};