3D游戏第八次作业_getcomponent<particlesystem>().emit-程序员宅基地

3D游戏第八次作业

一、简单粒子制作

  • 按参考资源要求,制作一个粒子系统,参考资源
  • 使用 3.3 节介绍,用代码控制使之在不同场景下效果不一样

1. 模拟烟花发射

效果展示:

实现:

给空对象挂载一个名为moveup的粒子系统模拟烟花发射

Emission控制粒子上升

设置Size over Lifetime上升过程中闪光

2. 模拟爆炸

效果展示 :

实现:

在一个对象上挂载一个粒子系统名为explosion,将形状设置为Sphere,然后设置Radius设置为0.01,Radius Thickness设置为0

设置Size over Lifetime模拟爆炸后效果,开始显示颜色后颜色逐渐变浅直至消失

3. 粒子光环

效果展示:

实现:

添加粒子系统

 public ParticleSystem particleSystem; 	//粒子系统对象
    public int particleNumber = 5000;       //最大粒子数
    public float pingPong = 0.05f;
    public float size = 0.05f;             //大小
    public float maxRadius = 10f;          //旋转半径
    public float minRadius = 4.0f;
    public float speed = 0.05f;             //运动速度
    private float[] particleAngle;
    private float[] particleRadius;
 
    private float time = 0;
    private ParticleSystem.Particle[] particlesArray;
 
    private Color[] changeColor = { new Color(255, 255, 255), new Color(255, 0, 0), new Color(255, 255, 0), new Color(0, 255, 0), new Color(0, 0, 255) };
    private float colorTimeOut = 0;

对粒子系统进行初始化位置:

void Start()
    {
        particleSystem = GetComponent<ParticleSystem>();
 
        particlesArray = new ParticleSystem.Particle[particleNumber];
        particleSystem.maxParticles = particleNumber;
        particleAngle = new float[particleNumber];
        particleRadius = new float[particleNumber];
 
        particleSystem.Emit(particleNumber);
        particleSystem.GetParticles(particlesArray);
 
        init();
 
        particleSystem.SetParticles(particlesArray, particlesArray.Length);
    }
 
void init()
    {
 
        for (int i = 0; i < particleNumber; i++)
        {
         
            float angle = Random.Range(0.0f, 360.0f);
        
            float rad = angle / 180 * Mathf.PI;
           
            float midRadius = (maxRadius + minRadius) / 2;
            float rate1 = Random.Range(1.0f, midRadius / minRadius);
            float rate2 = Random.Range(midRadius / maxRadius, 1.0f);
            float r = Random.Range(minRadius * rate1, maxRadius * rate2);
      
            particlesArray[i].size = size;
 
            particleAngle[i] = angle;
            particleRadius[i] = r;
      
            particlesArray[i].position = new Vector3(r * Mathf.Cos(rad), r * Mathf.Sin(rad), 0.0f);
        }
    }

控制粒子运动:

每一次Update的 colorTimeOut中都定义了一个循环。首先粒子会不断扩大,当粒子扩大到设置的相应的阈值后就会缩小,并且缩小的速度会大于放大的速度

void Update()
    {
        //每一个colorTimeOut实现一次缩放
        colorTimeOut += Time.deltaTime;
        for (int i = 0; i < particleNumber; i++)
        {
            time += Time.deltaTime;
            particlesArray[i].color = changeColor[(int)(colorTimeOut % 5)];
            particleRadius[i] += (Mathf.PingPong(time / minRadius / maxRadius, pingPong) - pingPong / 2.0f);
            if (i % 2 == 0)//放大
            {
                particleAngle[i] += speed * (i % 10 + 1);
            }
            else//缩小
            {
                particleAngle[i] -= speed * (i % 10 + 1);
            }
            particleAngle[i] = (particleAngle[i] + 360) % 360;
            float rad = particleAngle[i] / 180 * Mathf.PI;
 
            particlesArray[i].position = new Vector3(particleRadius[i] * Mathf.Cos(rad), particleRadius[i] * Mathf.Sin(rad), 0f);
        }
        particleSystem.SetParticles(particlesArray, particleNumber);
    }

 

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/choitempo/article/details/112493160

智能推荐

ffmpeg音视频处理流程核心技术_视频效果演示系统的核心技术-程序员宅基地

文章浏览阅读712次。视频播放器原理 什么是ffmpeg? ffmpeg 音视频编/解码 流程图 ffmpeg 常用 struct AVFormatContext AVStream AVCodecContext AVCodec AVPacket AVFrame ffmpeg 常用Api av_register_all() avformat_alloc_output_context2() avio_open()..._视频效果演示系统的核心技术

Java List集合多种情况处理方法_java list reduce-程序员宅基地

文章浏览阅读449次。Java List集合多种情况处理方法:List集合交集、并集、差集、去重、与数组互转、删除、排序等操作_java list reduce

【UML】软件需求说明书_uml需求文档访客管家-程序员宅基地

文章浏览阅读2.3k次,点赞77次,收藏80次。需求:指人对客观事务需要的表现,体现为愿望、意向和兴趣,因而成为行动的一种直接原因。软件需求(IEEE软件工程标准词汇表):(1)用户解决问题或达到目标所需的条件或能力。(2)系统或系统部件要满足合同、标准、规范或者其他正式规定文档所需具有条 件或能力。(3)对(1)或(2)中的一个条件或一种能力的一种文档化表述。用例:定义 1 用例是对一个活动者使用一个系统的一项功能时进行交互过程中的一个文字描述序列。_uml需求文档访客管家

linux笔记-根文件系统及文件管理命令详解_根文件系统文本登陆-程序员宅基地

文章浏览阅读574次。第三章、Linux根文件系统及文件管理命令详解02_03_Linux根文件系统详解文件系统:rootfs: 根文件系统 FHS:Filesystem Hierarchy Standard(文件系统目录标准)的缩写,多数Linux版本采用这种文件组织形式,类似于Windows操作系统中c盘的文件目录,FHS采用树形结构组织文件。FHS定_根文件系统文本登陆

马克 · 扎克伯格期望的元宇宙到底会是什么样子?_马克扎克伯格博客-程序员宅基地

文章浏览阅读358次。马克 · 扎克伯格期望的元宇宙到底会是什么样子?_马克扎克伯格博客

使用Python开发游戏运行脚本(二)实现模拟点击_大漠窗口绑定成功按键-程序员宅基地

文章浏览阅读1.4w次,点赞8次,收藏78次。本文接上一篇文章 使用Python开发游戏运行脚本(一)成功调用大漠插件上一篇我们已经简单实现了python调用大漠插件并输出版本号的功能,接下来我们要做的就是通过大漠插件模拟鼠标点击和键盘文字输入。 由于近年来最热门的游戏基本都是手游,所以我们也会以手游为例来进行游戏脚本的开发。大漠插件是一款针对Windows平台的鼠标键盘模拟+图文查找库,这样我们要想实现手游脚本开发的第一步,就是下载Android模拟器,然后在对安卓模拟器进行鼠标和键盘的模拟,以此来实现自动化游戏脚本。一、Android模拟器的_大漠窗口绑定成功按键

随便推点

Canvas实现黑客帝国字符雨_canvas画字符雨-程序员宅基地

文章浏览阅读1k次。 利用Canvas的fillText(),隔一定时间在画布上作画&lt;!DOCTYPE html&gt;&lt;head&gt; &lt;meta charset="utf-8"&gt; &lt;meta name="viewport" content="width=device-width,initial-scale=1.0"&gt; &_canvas画字符雨

微信公众号跳转微信小程序,自定义微信跳转标签_opentaglist-程序员宅基地

文章浏览阅读1.1k次。微信公众号跳转微信小程序,自定义微信跳转标签_opentaglist

数据恢复技术与LVM数据恢复方法_vgreduce --removemissing恢复-程序员宅基地

文章浏览阅读4.3k次。数据恢复技术与LVM数据恢复方法 1摘要 随着计算机网络应用的发展,数据存储的安全性变的越来越重要。在常见的基于RAID和LVM的环境下面,当出现硬盘故障或者错误操作导致数据丢失的情况下,采用适当的数据恢复策略可以在很大程度上提供数据恢复的成功概率。本文研究了几种情况下的数据恢复技术和方法,为数据恢复和数据安全的预防提供了指导。 2数据恢复需求 2.1Linux IO存储栈 图(1)Linux IO 存储..._vgreduce --removemissing恢复

程序员如何年薪百万?深度学习必读书籍!_年薪百万的程序员看什么书-程序员宅基地

文章浏览阅读307次。深度学习程序员想年薪百万,基础必须打牢,所以推荐重点书籍Deep Learning花书Deep Learning with PythonDeep Learning for Computer Vision with PythonScikit-Learn与TensorFLow机器学习实用指南深度学习实践Tensorflow机器学习指南..._年薪百万的程序员看什么书

Window系统下C/C++程序毫秒和微秒级程序运行时间的获取方法_large_integer nfreq, t1, t2;-程序员宅基地

文章浏览阅读1.3k次。一、使用clock()函数,获取毫秒级(ms)时间[1]#include &lt;time.h&gt;//clock()头文件clock_t start = clock();{statement section}//测试代码段clock_t end = clock();printf("the running time is :%fs\n", (double)(end -s..._large_integer nfreq, t1, t2;

IntelliJ IDEA 使用教程-- 从入门到上瘾(配套视频教程)_idea使用视频教程-程序员宅基地

文章浏览阅读6.8k次,点赞3次,收藏31次。 前言: 至于用哪个开发工具本文暂且不做任何讨论, 今天着重讲解IntelliJ IDEA这款开发工具的使用 前言:IntelliJ IDEA如果说IntelliJ IDEA是一款现代化智能开发工具的话,Eclipse则称得上是石器时代的东西了。其实笔者也是一枚从Eclipse转IDEA的探索者,随着近期的不断开发实践和调试,逐步..._idea使用视频教程

推荐文章

热门文章

相关标签