3D游戏编程与设计 作业八

本文介绍3D游戏编程与设计的作业八,重点讲解如何创建粒子光环。通过粒子系统模拟动态视觉效果,如光环,并提供了一个参考链接以帮助理解。详细步骤包括新建ParticleCycle对象,调整Particle System组件属性,编写ParticleCycle脚本,设置粒子的极坐标位置和颜色等,以实现粒子的循环扩散动作。
摘要由CSDN通过智能技术生成

3D游戏编程与设计 作业八

粒子系统是模拟一些不确定、流动现象的技术。它采用许多形状简单且赋予生命的微小粒子作为基本元素来表示物体(一般由点或很小的多边形通过纹理贴图表示),表达物体的总体形态和特征的动态变化。人们经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等。

创建粒子光环

参考 http://i-remember.fr/en ,使用粒子流编程控制制作一些效果, 如“粒子光环”

效果图:
在这里插入图片描述
创建粒子系统
新建一个空对象并命名为ParticleCycle,修改Particle System组件的属性如下:
在这里插入图片描述
创建 ParticleCycle脚本,在其中设置Particle System的基础状态:

public ParticleSystem particleSystem;
private ParticleSystem.Particle[] particlesArray;
public int seaResolution = 50;

void Start()
{
    int number = seaResolution * seaResolution;
    particlesArray = new ParticleSystem.Particle[number];
    GetParticles();
    var main = particleSystem.main;
    main.maxParticles = seaResolution * seaResolution;
    particleSystem.Emit(seaResolution * seaResolution);
    particleSystem.GetParticles(particlesArray);
}

为粒子添加极坐标位置属性

private float[] motion;
private float[] radiuses;

粒子的其他属性:

void GetParticles()
{
    for (int i = 0; i < seaResolution; i++)
    {
        for (int j = 0; j < seaResolution; j++)
        {
            float radius = Random.Range(minRadius, maxRadius);
            float zPos = Mathf.PerlinNoise(i * noiseScale, j * noiseScale) * heightScale;
            float athta = Random.Range(0.0f, 360.0f) / 180f * Mathf.PI;
            int k = i * seaResolution + j;
            athtas[k] = motion;
            radiuses[k] = radius;
            particlesArray[k].color = colorGradient.Evaluate(zPos);
            particlesArray[k].position = new Vector3(radius * Mathf.Cos(motion),radius * Mathf.Sin(motion),zPos);
        }
    }
}

实现粒子的循环扩散动作:

void Update()
{
    for (int i = 0; i < seaResolution; i++)
    {
        for (int j = 0; j < seaResolution; j++)
        {
            int k = i * seaResolution + j;
            float zPos = Mathf.PerlinNoise(i * noiseScale + perlinNoiseAnimX, j * noiseScale + perlinNoiseAnimY) * heightScale;
            motion[k] += 0.1f * Mathf.PI * Time.deltaTime;
            motion[k] = athtas[k] > 2 * Mathf.PI ? athtas[k] - 2 * Mathf.PI : motion[k];
            particlesArray[k].position = new Vector3(radiuses[k] * Mathf.Cos(motion[k]),radiuses[k] * Mathf.Sin(motion[k]),zPos);
        }
    }

    perlinNoiseAnimX += 0.01f;
    perlinNoiseAnimY += 0.01f;

    particleSystem.SetParticles(particlesArray, particlesArray.Length);
}

声明Gradient类,用来设置粒子的颜色

public Gradient colorGradient;
particlesArray[k].color = colorGradient.Evaluate(zPos);
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值