Unity_粒子特效
来源:互联网 发布:c语言程序实例大全pdf 编辑:程序博客网 时间:2024/05/16 23:48
简单的将Particle System 的参数在Inspector上进行修改就能实现,火焰,爆炸,等这种于一中心点进行线性播放的粒子特效,效果图和参数图如下:
爆炸:
火焰(因为没有太匹配的火焰材质这里用心形图片来代替实现火焰颜色的上升大小的变化):
对于一些需要粒子进行特殊排布的粒子特效我们就需要进行代码编写来进行规律排布了。
例如:圆形彩光圈的实现流程。
首先创建Particle System,进行一些必要设置(例如:是否循环播放之类的),
粒子的产生就用代码控制,控制的本质就是位置(也就是旋转角度和旋转半径)
代码直接奉上:
using UnityEngine;using System.Collections;public class particleSettings{ public float angle { get; set; } public float radius { get; set; } public float speed { get; set; } public particleSettings(float r) { this.radius = r; this.angle = Random.value * 2 * Mathf.PI; this.speed = Random.value * Mathf.Sqrt(radius); } public Vector3 getPosition() { return radius * new Vector3(Mathf.Cos(angle), 0, Mathf.Sin(angle)); } public void rotate() { this.angle += Time.deltaTime * speed / 10; if (this.angle > 2 * Mathf.PI) this.angle -= 2 * Mathf.PI; this.radius += Random.value * 0.2f - 0.1f; if (this.radius > ParticleSea.MaxRadius) this.radius = ParticleSea.MaxRadius; if (this.radius < ParticleSea.MinRadius) this.radius = ParticleSea.MinRadius; }}
using UnityEngine;using System.Collections;public class ParticleSea : MonoBehaviour{ public new ParticleSystem particleSystem; private ParticleSystem.Particle[] particlesArray; private particleSettings[] psetting; public int seaResolution = 25; public static float MaxRadius = 120f; public static float MinRadius = 50f; public float radius = 100.0f; public Gradient colorGradient; void Start() { particlesArray = new ParticleSystem.Particle[seaResolution * seaResolution]; psetting = new particleSettings[seaResolution * seaResolution]; particleSystem.maxParticles = seaResolution * seaResolution; particleSystem.Emit(seaResolution * seaResolution); particleSystem.GetParticles(particlesArray); setInitialPosition(); } void Update() { RotateParticles(); changeColor(); particleSystem.SetParticles(particlesArray, particlesArray.Length); } //控制粒子旋转 void RotateParticles() { for (int i = 0; i < seaResolution; i++) { for (int j = 0; j < seaResolution; j++) { psetting[i * seaResolution + j].rotate(); particlesArray[i * seaResolution + j].position = psetting[i * seaResolution + j].getPosition(); } } } void setInitialPosition() { for (int i = 0; i < seaResolution; i++) { for (int j = 0; j < seaResolution; j++) { psetting[i * seaResolution + j] = new particleSettings(radius); particlesArray[i * seaResolution + j].position = psetting[i * seaResolution + j].getPosition(); } } particleSystem.SetParticles(particlesArray, particlesArray.Length); } void changeColor() { for (int i = 0; i < seaResolution; i++) { for (int j = 0; j < seaResolution; j++) { float value = (Time.realtimeSinceStartup - Mathf.Floor(Time.realtimeSinceStartup)); value += psetting[i * seaResolution + j].angle / 2 / Mathf.PI; while (value > 1) value--; particlesArray[i * seaResolution + j].color = colorGradient.Evaluate(value); //particlesArray [i * seaResolution + j].color = colorGradient.Evaluate (Random.value); } } }}
效果图如下:
阅读全文
0 0
- Unity_粒子特效
- Unity_粒子系统特效制作_051
- Unity_新版粒子系统_018
- 粒子特效
- 粒子特效
- 粒子特效
- 粒子特效
- 粒子特效
- 粒子特效
- threeJS中粒子特效
- libgdx之粒子特效
- Unity3D下雪粒子特效
- cocos2d_粒子特效二
- cocos2dx-粒子特效
- cocos2dx-粒子特效
- cocos2d-x 粒子特效
- Cocos2d-x_粒子特效
- cocos2dx-粒子特效
- 多个邮箱,多个手机号的验证
- 写一些“北京中新委互联网传媒”的黑历史吧!
- 栈与队列
- 【NOI题解】 3.1数据结构之结构
- SCSI指令使用之弹带和加载磁带指令使用(实例演示)
- Unity_粒子特效
- Androidstudio+ffmpeg+camke打造ffmpeg播放器
- 差分信号解释
- makefile 使用
- Python资料之print()函数
- 网络回路问题
- LeetCode-6-ZigZag Conversion(C语言实现)
- LOG4J日志使用记录
- linux制作win7启动u盘