void RandomlySpread() { // 初始化各粒子位置 // 随机每个粒子距离中心的半径,同时希望粒子集中在平均半径附近 for (int i = 0; i < pCount; ++i) { float midRadius = (maxRadius + minRadius) / 2; float minRate = Random.Range(1.0f, midRadius / minRadius); float maxRate = Random.Range(midRadius / maxRadius, 1.0f); float radius = Random.Range(minRadius * minRate, maxRadius * maxRate); // 随机每个粒子的角度 float angle = Random.Range(0.0f, 360.0f); float theta = angle / 180 * Mathf.PI; // 随机每个粒子的游离起始时间 float time = Random.Range(0.0f, 360.0f); circle[i] = new CirclePosition(radius, angle, time); before[i] = radius; after[i] = 0.7f * radius; if (after[i] < minRadius * 1.1f) { after[i] = Random.Range(Random.Range(minRadius, midRadius), (minRadius * 1.1f)); } particleArr[i].position = new Vector3(circle[i].radius * Mathf.Cos(theta), 0f, circle[i].radius * Mathf.Sin(theta)); } particleSys.SetParticles(particleArr, particleArr.Length); }
void Start() { particlesArray = new ParticleSystem.Particle[count]; circles = new CirclePosition[count]; particleSystem = gameObject.GetComponent <ParticleSystem>(); particleSystem.maxParticles = count; particleSystem.startSize = size; particleSystem.Emit(count); particleSystem.GetParticles(particlesArray); float midRadius = (maxRadius + minRadius) / 2; float minRate = Random.Range(1.0f, midRadius / minRadius); float maxRate = Random.Range(midRadius / maxRadius, 1.0f); for (int i = 0; i < count; i++) { //设置半径 float radius = Random.Range(minRadius * minRate, maxRadius * maxRate); //设置角度 float angle = (float)i / count * 360f; float theta = angle / 180 * Mathf.PI; //保存粒子初位置 circles[i] = new CirclePosition(radius, angle, (float)i / count * 360f, radius); //设置粒子初位置 particlesArray[i].position = new Vector3(radius * Mathf.Cos(theta), radius * Mathf.Sin(theta), 0); } particleSystem.SetParticles(particlesArray, particlesArray.Length); }
void Start() { particleAngle = new float[particleNum]; particleR = new float[particleNum]; before = new float[particleNum]; after = new float[particleNum]; particles = new ParticleSystem.Particle[particleNum]; particleSystem.maxParticles = particleNum; particleSystem.Emit(particleNum); particleSystem.GetParticles(particles); CirclePosition cp = new CirclePosition(); // 每个粒子在初始化的时候都设定好收缩前和收缩后的粒子半径 for (int i = 0; i < particleNum; i++) { float r = (float)cp.getNormalDistribution((minRadius + maxRadius) * 0.5f, 1); float angle = UnityEngine.Random.Range(0.0f, 360.0f); particleAngle[i] = angle; particleR[i] = r; before[i] = r; after[i] = 0.7f * r; if (after[i] < minRadius * 1.1f) { float midRadius = minRadius * 1.05f; after[i] = UnityEngine.Random.Range(UnityEngine.Random.Range(minRadius, midRadius), (minRadius * 1.1f)); } } }
void RandomlySpread() { for (int i = 0; i < count; ++i) { // 随机每个粒子距离中心的半径,同时希望粒子集中在平均半径附近 float midRadius = (maxRadius + minRadius) / 2; float minRate = Random.Range(1.0f, midRadius / minRadius); float maxRate = Random.Range(midRadius / maxRadius, 1.0f); float radius = Random.Range(minRadius * minRate, maxRadius * maxRate); // float radius = (float)i / count * 10f; // if (radius == 0) radius = 0.0001f; // 随机每个粒子的角度 //float angle = Random.Range(0.0f, 360.0f); float angle = (float)i / count * 360.0f; //Debug.Log(angle); float theta = angle / 180 * Mathf.PI; // 随机每个粒子的游离起始时间 float time = Random.Range(0.0f, 360.0f); circle[i] = new CirclePosition(radius, angle, time, radius); particleArr[i].position = new Vector3(circle[i].radius * Mathf.Cos(theta), circle[i].radius * Mathf.Sin(theta), 0f); } particleSys.SetParticles(particleArr, particleArr.Length); }
//随机分布 void RandomlySpread() { for (int i = 0; i < count; ++i) { //修改:随机每个粒子距离中心的半径,希望粒子靠近两遍 float midRadius = (maxRadius + minRadius) / 2; float one_four_Radius = minRadius + (maxRadius - minRadius) / 4; float three_four_Radius = minRadius + (maxRadius - minRadius) * 3 / 4; float minRate = Random.Range(1.0f, one_four_Radius / minRadius); float maxRate = Random.Range(three_four_Radius / maxRadius, 1.0f); float radius = Random.Range(minRadius * minRate, maxRadius * maxRate); // 随机每个粒子的角度 ,实现缺口 float minAngle = Random.Range(-90f, 0.0f); float maxAngle = Random.Range(0.0f, 90f); float randomangle = Random.Range(minAngle, maxAngle); float angle = i % 2 == 0 ? randomangle : randomangle - 180; // float angle = Random.Range(0.0f, 360.0f); float theta = angle / 180 * Mathf.PI;//真正的theta角度 // 随机每个粒子的游离起始时间 float time = Random.Range(0.0f, 360.0f); circle[i] = new CirclePosition(radius, angle, time); particleArr[i].position = new Vector3(circle[i].radius * Mathf.Cos(theta), 0f, circle[i].radius * Mathf.Sin(theta)); //更新透明度 //particleArr[i].color = colorGradient.Evaluate(circle[i].angle / 360.0f); } particleSys.SetParticles(particleArr, particleArr.Length); }
void RandomlySpread() { for (int i = 0; i < count; ++i) { float minRate = Random.Range(Random.Range( Random.Range(1.0f, 1.8f), 1.8f), 1.8f); float maxRate = Random.Range(0.5f, Random.Range( 0.5f, Random.Range(0.5f, 1.0f))); float radius = Random.Range(minradius * minRate, maxradius * maxRate); float angle = Random.Range(0.0f, 360.0f); float time = Random.Range(0.0f, 360.0f); circle[i] = new CirclePosition(radius, angle, time); particleArr[i].color = colorGradient.Evaluate(circle[i].angle / 360.0f); } particles.SetParticles(particleArr, particleArr.Length); }
void RandomlySpread() { for (int i = 0; i < count; ++i) { // 使用高斯分布生成半径, 均值为midRadius,标准差为0.7 float midRadius = (maxRadius + minRadius) / 2; float radius = (float)normalGenerator.NextGaussian(midRadius, 0.7); float angle = Random.Range(0.0f, 360.0f); float theta = angle / 180 * Mathf.PI; float time = Random.Range(0.0f, 360.0f); // 给粒子生成一个随机的初始进度 float radiusChange = Random.Range(0.0f, maxRadiusChange); // 随机生成一个轨道变化大小 circle[i] = new CirclePosition(radius, angle, time); particleArr[i].position = new Vector3(circle[i].radius * Mathf.Cos(theta), 0f, circle[i].radius * Mathf.Sin(theta)); } particleSys.SetParticles(particleArr, particleArr.Length); }
// Use this for initialization void Start() { // 初始化粒子数组 particleArr = new ParticleSystem.Particle[count]; circle = new CirclePosition[count]; particleSys = this.GetComponent <ParticleSystem>(); particleSys.startSpeed = 0; particleSys.startSize = size; particleSys.loop = false; particleSys.maxParticles = count; particleSys.Emit(count); particleSys.GetParticles(particleArr); GradientAlphaKey[] alphaKeys = new GradientAlphaKey[5]; alphaKeys[0].time = 0.0f; alphaKeys[0].alpha = 1.0f; alphaKeys[1].time = 0.4f; alphaKeys[1].alpha = 0.4f; alphaKeys[2].time = 0.6f; alphaKeys[2].alpha = 1.0f; alphaKeys[3].time = 0.9f; alphaKeys[3].alpha = 0.4f; alphaKeys[4].time = 1.0f; alphaKeys[4].alpha = 0.9f; GradientColorKey[] colorKeys = new GradientColorKey[2]; colorKeys[0].time = 0.0f; colorKeys[0].color = Color.white; colorKeys[1].time = 1.0f; colorKeys[1].color = Color.white; colorGradient.SetKeys(colorKeys, alphaKeys); for (int i = 0; i < count; ++i) { float midRadius = (maxRadius + minRadius) / 2; float minRate = Random.Range(1.0f, midRadius / minRadius); float maxRate = Random.Range(midRadius / maxRadius, 1.0f); float radius = Random.Range(minRadius * minRate, maxRadius * maxRate); float angle = Random.Range(0.0f, 360.0f); float theta = angle / 180 * Mathf.PI; float time = Random.Range(0.0f, 360.0f); circle[i] = new CirclePosition(radius, angle, time); particleArr[i].position = new Vector3(circle[i].radius * Mathf.Cos(theta), 0f, circle[i].radius * Mathf.Sin(theta)); } particleSys.SetParticles(particleArr, particleArr.Length); }
void RandomlySpread() { for (int i = 0; i < count; ++i) { float midRadius = (maxRadius + minRadius) / 2; float minRate = Random.Range(1.0f, midRadius / minRadius); float maxRate = Random.Range(midRadius / maxRadius, 1.0f); float radius = Random.Range(minRadius * minRate, maxRadius * maxRate); float angle = Random.Range(0.0f, 360.0f); float theta = angle / 180 * Mathf.PI; float time = Random.Range(0.0f, 360.0f); circle[i] = new CirclePosition(radius, angle, time); particles[i].position = new Vector3(circle[i].radius * Mathf.Cos(theta), 0f, circle[i].radius * Mathf.Sin(theta)); } particleSystem.SetParticles(particles, particles.Length); }
void RandomlySpread() { for (int i = 0; i < count; ++i) { // 随机每个粒子距离中心的半径,同时希望粒子集中在平均半径附近 float midRadius = (maxRadius + minRadius) / 2; float minRate = Random.Range(1.0f, midRadius / minRadius); float maxRate = Random.Range(midRadius / maxRadius, 1.0f); float radius = Random.Range(minRadius * minRate, maxRadius * maxRate); // 随机每个粒子的角度 float angle = Random.Range(0.0f, 360.0f); float theta = angle / 180 * Mathf.PI; // 随机每个粒子的游离起始时间 float time = Random.Range(0.0f, 360.0f); cirPosition[i] = new CirclePosition(radius, angle, time); parArray[i].position = new Vector3(cirPosition[i].radius * Mathf.Cos(theta), 0f, cirPosition[i].radius * Mathf.Sin(theta)); } parSystem.SetParticles(parArray, parArray.Length); }