Unity3d⼊门之路-粒⼦系统粒⼦系统
本次作业基本要求是三选⼀,我选择了简单粒⼦制作
1、简单粒⼦制作
按参考资源要求,制作⼀个粒⼦系统,参考资源
使⽤ 3.3 节介绍,⽤代码控制使之在不同场景下效果不⼀样
实现过程
粒⼦制作
这⼀步是按照进⾏的,⽽且课堂上也学习了粒⼦的制作,所以就⽐较简单。
这次的粒⼦,不只有⼀个Particle System,⽽是有光晕和星光两种Particle System结合。
1. ⾸先,是光晕的制作,先新建⼀个Particle System,然后设置如下:
2. 接着是星光的制作,也新建⼀个Particle System,然后设置如下:
3. 最后将星光加⼊到光晕为其⼦游戏对象,并保存为预制。
代码控制
我的想法是是⼀个简单的变换,初始时游戏画⾯中间会有⼀个发光粒⼦,然后点击它⼀下会⾃动下降然后变化为⼀⽚星海。那么代码怎么实现呢?分为两个部分,⼀个是星海的实现代码,⼀个是与⽤户交互并控制粒⼦变化的代码。
ParticleSea:实现星海
按照课堂上的教程,使⽤柏林噪声模拟星海。
public class ParticleSea : MonoBehaviour
{
public ParticleSystem particleSystem;
private ParticleSystem.Particle[] particlesArray;
public int seaResolution = 50;
public float spacing = 0.5f;
public float noiseScale = 0.2f;
public float heightScale = 3f;
private float perlinNoiseAnimX = 0.01f;
private float perlinNoiseAnimY = 0.01f;
/
/ Start is called before the first frame update
void Start()
{
particleSystem = ParticleSystem.Instantiate<ParticleSystem>(Resources.Load<ParticleSystem>("Prefabs/Halo"));
particlesArray = new ParticleSystem.Particle[seaResolution * seaResolution];
particleSystem.maxParticles = seaResolution * seaResolution;
particleSystem.Emit(seaResolution * seaResolution);
particleSystem.GetParticles(particlesArray);
}
// Update is called once per frame
void Update()
{
for (int i = 0; i < seaResolution; i++)
{
for (int j = 0; j < seaResolution; j++)
{
float zPos = Mathf.PerlinNoise(i * noiseScale + perlinNoiseAnimX, j * noiseScale + perlinNoiseAnimY) * heightScale;                particlesArray[i * seaResolution + j].position = new Vector3(i * spacing, zPos, j * spacing);
}
}
perlinNoiseAnimX += 0.01f;
perlinNoiseAnimY += 0.01f;
particleSystem.SetParticles(particlesArray, particlesArray.Length);
unity3d入门}
}
ClickHandle:⽤户交互与控制
为粒⼦设置⼀个碰撞器,当点击粒⼦时,会将粒⼦变化为⼀⽚星海,在Update中实现。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。