在Unity编辑器的Scene视图进行控制播放粒子ParticleSystem,可以借助方法Simulate,具体可以参照以下例子:

创建一个空对象ParticleAll,在这个对象下添加一个粒子(要添加多个粒子的话,添加到这个粒子之下),此时选中粒子,可以看到Scene视图预览播放粒子效果。附上新脚本EditParticleSystem,此为空脚本,如下:
C# Code 
1
2
3
4
5
6
using UnityEngine;

public class EditParticleSystem : MonoBehaviour
{
}

创建一个这个脚本的编辑器类EditParticleSystemInspector,代码如下:
C# Code 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
using UnityEditor;
using UnityEngine;

[CustomEditor(typeof(EditParticleSystem))]
public class EditParticleSystemInspector : Editor
{
    /// <summary>
    /// 滑动杆的当前时间
    /// </summary>
    private float m_CurTime;
    
    /// <summary>
    /// 当前是否是预览播放状态
    /// </summary>
    private bool m_Playing;

/// <summary>
    /// 当前运行时间
    /// </summary>
    private float m_RunningTime;
    
    /// <summary>
    /// 上一次系统时间
    /// </summary>
    private double m_PreviousTime;

/// <summary>
    /// 滑动杆总长度
    /// </summary>
    private const float kDuration = 30f;

private ParticleSystem m_ParticleSystem;

private EditParticleSystem editAnimator { get { return target as EditParticleSystem; } }

private ParticleSystem particleSystem
    {
        get { return m_ParticleSystem ?? (m_ParticleSystem = editAnimator.GetComponentInChildren<ParticleSystem>()); }
    }

void OnEnable()
    {
        m_PreviousTime = EditorApplication.timeSinceStartup;
        EditorApplication.update += inspectorUpdate;
    }

void OnDisable()
    {
        EditorApplication.update -= inspectorUpdate;
    }

public override void OnInspectorGUI()
    {
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Play"))
        {
            play();
        }
        if (GUILayout.Button("Stop"))
        {
            stop();
        }
        EditorGUILayout.EndHorizontal();
        m_CurTime = EditorGUILayout.Slider("Time:", m_CurTime, 0f, kDuration);
        manualUpdate();
    }

/// <summary>
    /// 进行预览播放
    /// </summary>
    private void play()
    {
        if (Application.isPlaying || particleSystem == null)
        {
            return;
        }

m_RunningTime = 0f;
        m_Playing = true;
    }

/// <summary>
    /// 停止预览播放
    /// </summary>
    private void stop()
    {
        if (Application.isPlaying || particleSystem == null)
        {
            return;
        }

m_Playing = false;
        m_CurTime = 0f;
    }

/// <summary>
    /// 预览播放状态下的更新
    /// </summary>
    private void update()
    {
        if (Application.isPlaying || particleSystem == null)
        {
            return;
        }

if (m_RunningTime >= kDuration)
        {
            m_Playing = false;
            return;
        }

particleSystem.Simulate(m_RunningTime, true);
        SceneView.RepaintAll();
        Repaint();

m_CurTime = m_RunningTime;
    }

/// <summary>
    /// 非预览播放状态下,通过滑杆来播放当前动画帧
    /// </summary>
    private void manualUpdate()
    {
        if (particleSystem && !m_Playing)
        {
            particleSystem.Simulate(m_CurTime, true);
            SceneView.RepaintAll();
        }
    }

private void inspectorUpdate()
    {
        var delta = EditorApplication.timeSinceStartup - m_PreviousTime;
        m_PreviousTime = EditorApplication.timeSinceStartup;

if (!Application.isPlaying && m_Playing)
        {
            m_RunningTime = Mathf.Clamp(m_RunningTime + (float)delta, 0f, kDuration);
            update();
        }
    }
}

检视器效果如下:
拖动滑杆,即可播放当前时间的那一帧,如下所示:
点击"Play",即可以自动播放整个粒子,如下所示:

Unity 编辑器下控制播放粒子相关推荐

  1. Unity 编辑器下运行没有声音

    Unity 编辑器下运行没有声音 一.环境 Mac 二.问题 游戏场景中导入一个音频文件运行时没有声音 三.原因 按下去运行时就没有声音了 四.解题过程 1.Mac本身似乎没有能够单独控制某个软件的音 ...

  2. Unity3D中项目在Unity编辑器下正常运行打包成功exe后无法正常运行

    Unity3D中项目在Unity编辑器下正常运行打包成功exe后无法正常运行 一.遇到的情况描述: 项目中涉及到了文件读取的相关操作 项目在Unity下能够正常获取到文件信息并且不报错 项目能够成功打 ...

  3. Unity编辑器下Console面板查看完整打印日志

    最近在做客户端遇到这样一个问题,对于Console面板上的打印日志,每条打印的内容是有上限的,比如我有一个包含100个国王信息的消息打印日志 往下拖动 划到底也只是显示了63条国王信息. 解决方法: ...

  4. Unity编辑器下红点树实现方案

    背景 开发过程中,经常会对装备,背包,邮件等按钮设置红点状态,内部的查看状态,影响外部红点状态,这时候加入红点树方案,会方便,快捷,易于管理.上篇文章的方案不是最佳,刚好发现一种比较不错的方案. 操作 ...

  5. Unity编辑器下添加圆锥模型

    网上资料已经有了,生成圆锥的模型的代码,但是没有保存生成的Mesh,运行会看不到圆锥的,所以这里将代码改了一下将生成的圆锥保存到工程的一个路径里,下面是生成圆锥的代码Mesh的代码. using Sy ...

  6. 实现Unity编辑器模式下的旋转

    最近在做一个模型展示的项目,我的想法是根据滑动屏幕的x方向差值和Y方向的差值,来根据世界坐标下的X轴和Y轴进行旋转,但是实习时候总是有一些卡顿.在观察unity编辑器下的旋转之后,发现编辑器下的旋转非 ...

  7. unity 手机端和编辑器下播放带有透明通道的视频详解

    unity 手机端和编辑器下播放带有透明通道的视频详解 在项目开发中,可能会涉及到视频的播放,普通的视频播放如果大家不会的请自行百度,今天主要讲解带有透明通道的视频的播放问题,尤其是在手机端的处理,下 ...

  8. Unity环境下RTMP推流+RTMP播放低延迟解决方案

    在本文之前,我们发布了Unity环境下的RTMP推流(Windows平台+Android平台)和RTMP|RTSP拉流(Windows平台+Android平台+iOS平台)低延迟的解决方案,今天做个整 ...

  9. Unity 视屏播放插件AvProVideo-鼠标控制播放、暂停和更换视频!

    Unity学习 - 视屏播放插件AvProVideo-鼠标控制播放.暂停和更换视频! 一:前言 二:效果图 三:插件资源下载 四:资源导入程序 五:手机上在线播放视频 六:Demo下载 七:关注公主号 ...

  10. UNITY编辑器模式下static变量的坑

    UNITY编辑器模式下static变量的坑 在unity中写编辑器扩展工具,如在编辑器中加个菜单,点击这个菜单项时执行打包功能. 类如下,其中的静态变量,如果每次进来不清空,则LIST会越来越大,打包 ...

最新文章

  1. 为什么分布式一定要有一致性方案?
  2. java 操作uart串口_【tty】应用程序调用write写串口调用流程
  3. 这篇长达165页的论文,用一个里程碑式的证明同时解决了量子物理学和理论数学的难题...
  4. 浅谈积性函数求前缀和
  5. JVM007_运行时栈帧结构
  6. 【算法】剑指 Offer 53 - I. 在排序数组中查找数字 I
  7. img 显示默认图片,及动态赋值
  8. [Regionals 2012 :: Asia - Tokyo ]
  9. android 编译 libjpeg-turbo,编译Android环境的libjpeg-turbo
  10. 发现美,欣赏美,美之我见
  11. Flash CS6 专业版破解教程、Flash CS6 激活序列号、破解补丁
  12. 嘘——2021还没对象?你的虚拟女友已上线。
  13. 《动态壁纸 : 手机壁纸大全》EULA条款协议
  14. 聚焦Java性能优化 打造亿级流量秒杀系统【学习笔记】03_分布式扩展
  15. 织梦php开发tags功能开发,织梦全网最新联动筛选功能的实现(单选和多选)可显示分类的文章...
  16. MYSQL数据库备份导出
  17. PixiJS学习(8)预加载
  18. group 与 groups的区别
  19. feawfwefwf
  20. 搞怪独特的520文案表情包分享来啦

热门文章

  1. SpringCloud从入门到精通——微服务注册中心
  2. IOS 蓝牙开发(一)蓝牙协议基础知识
  3. 表面肌电信号处理流程——基于肌电信号分类的特征抽取的设计
  4. LaTeX tabular表格环境与命令
  5. sitemesh框架的简单使用(springboot+maven+jsp+sitemesh)
  6. C语言函数大全 chm含示例
  7. 企业信息化建设的重要意义及注重方向
  8. Android四大组件之广播
  9. 怎么删除映射网络里的计算机,W7怎么样删除映射上网网络驱动器
  10. 有限差分法解NS方程原理