本文主要是介绍3D游戏作业8:仿制“奥苏安大漩涡”(粒子系统),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
作业8:仿制“奥苏安大漩涡”(粒子系统)
灵感来源
粒子效果,就是从一个点发送许多粒子,粒子在经过材质的装修后,扩散开来形成密密麻麻的一篇,给人视觉上的美感(如烟花,汽车尾气)。
但是光靠系统提供的几种粒子扩散方法显然不够,因此我开始学习怎么自己定义粒子的运动轨迹。
我需要找不规则的形状。
作为XXXX,我不自觉地想到了这个:
这是中古战锤世界里,位于世界中心的“大漩涡”,守护他们的正是“奥苏安”的精灵们。
我觉得这种螺旋升天的水,就是一种不规则的运动。
因此我开始用粒子效果仿制一个“奥苏安大漩涡”。
效果
截图如下:
(肯定比原本的丑一点)
动态的生成过程请看视频:blibli
制作原理
大体思路
(1)在粒子系统组件ParticleSystem中,有一个选项叫Start Speed。这是粒子的速度,一般情况下,粒子会按照这个速度匀速运动。但是unity自带的粒子效果中,粒子总是走直线,不能运行曲线。运行曲线需要其他算法。
(2)在ParticleSystem组件中有函数GetParticles。作用是得到所有的particle(具体用法可以在后面的代码中查看)。得到了所有的particle粒子后,就可以对其位置进行更改,从而完成自定义的运动轨迹。
综上两点,可以通过Start Speed调整初始速度,使粒子匀速上升,自动完成垂直方向的运动。
通过GetParticled函数,更改每一个粒子的位置,对粒子水平方向的运动进行操作。
最后,增加生成频率,大规模生产粒子,从而达到连续的效果。
在unity中对ParticleSystem组件操作
通过不断调试,调节关于粒子的速度,生成频率,存在周期等参数,这个只能一遍遍试,才能有较好的视觉体验。
我的部分参数如下:
接下来制作材质:
由于漩涡并不是光滑的,波涛汹涌的水纹看起来粗糙,残缺,所以我自己画了如下的粒子材质:
将材质导入后直接拖到粒子组件上,就会自动应用。这样看起来才更有斑斓的质感。
在代码中对ParticleSystem进行操作
SController.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;public class SController : MonoBehaviour
{public ParticleSystem ps;public ParticleSystem.Particle[] particles;public int speed=5;public float k=0.05f;public float b=1;public Transform tr;void Start(){ps=gameObject.GetComponent<ParticleSystem>();particles=new ParticleSystem.Particle[ps.maxParticles];tr.position=new Vector3(0,0,0);}// Update is called once per framevoid FixedUpdate(){int num=ps.GetParticles(particles);float x,y,z;float r,nowr,rate;for (int i=0;i<num;++i){Vector3 v=particles[i].position;x=v.x;y=v.y;z=v.z;nowr=(new Vector3(0,y,0)-particles[i].position).magnitude;r=y*y*k+b;if (nowr<=0.5){x=1;z=0;}else{rate=r/nowr;x=x*rate;z=z*rate;}tr.position=new Vector3(x,y,z);tr.RotateAround(new Vector3(0,y,0),Vector3.up,speed);particles[i].position=tr.position;}ps.SetParticles(particles,num);}
}
主要步骤是:
通过
int num=ps.GetParticles(particles);
将所有粒子的信息储存在数组particles中,返回值num是总共的粒子数,然后遍历数组,就可以了。
其他的就是很基本的操作了,比如Transform.RotateAround(),还有每一个高度上的半径,这些都可以自定义。
最后,别忘了
ps.SetParticles(particles,num);
使用粒子系统的SetParticles函数对粒子系统进行覆盖,否则,之前更改的位置信息,全都无效。
至此,完成制作原理的解释。
项目亮点
(1)采用了自定义粒子轨迹,使应用更加灵活多变。
(2)自定义了粒子的材质,了解了材质中黑,白,灰在unity中的作用。
(3)通过调节渐变色,使漩涡底部粒子集中区不会过于明亮。较为美观 (至少我认为挺好看)
项目链接
如果想看代码,这里是代码链接:代码链接
想要下载项目,在这里:项目下载
下载后使用方法:
新建项目,用我的Assets覆盖你的Assets,刷新unity。双击打开一个名叫“u”的Scene,就可以运行了(这个名字是随便起的,反正也只有一个Scene)。
这篇关于3D游戏作业8:仿制“奥苏安大漩涡”(粒子系统)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!