Unity 编辑器下控制播放粒子
2015-04-24 20:09
309 查看
在Unity编辑器的Scene视图进行控制播放粒子ParticleSystem,可以借助方法Simulate,具体可以参照以下例子:
创建一个空对象ParticleAll,在这个对象下添加一个粒子(要添加多个粒子的话,添加到这个粒子之下),此时选中粒子,可以看到Scene视图预览播放粒子效果。附上新脚本EditParticleSystem,此为空脚本,如下:
C# Code
创建一个这个脚本的编辑器类EditParticleSystemInspector,代码如下:
C# Code
检视器效果如下:
拖动滑杆,即可播放当前时间的那一帧,如下所示:
点击"Play",即可以自动播放整个粒子,如下所示:
创建一个空对象ParticleAll,在这个对象下添加一个粒子(要添加多个粒子的话,添加到这个粒子之下),此时选中粒子,可以看到Scene视图预览播放粒子效果。附上新脚本EditParticleSystem,此为空脚本,如下:
C# Code
1 2 3 4 5 6 | using UnityEngine; public class EditParticleSystem : MonoBehaviour { } |
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 编辑器下控制粒子播放跟随位移
- Unity 编辑器下控制播放粒子
- 【Unity】编辑器下同时播放多个粒子特效
- Unity 编辑器下控制播放Animator
- Unity 编辑器下控制播放Animator
- Unity编辑器 - 编辑器控制特效播放
- Unity_DOTween动画的学习(十一)_DOTweenPath路径编辑器的使用补充_结合按钮触发不同点击事件控制播放状态_Waypoints
- Vuforia+Unity AR场景播放音频控制
- unity基础开发----控制播放动画片段、动画倒播
- Unity5.3.2f1 粒子系统有Bug,粒子不能重新激活播放,在Android平台粒子会出现不播放的情况
- unity 长按按钮控制播放animator播放速度
- (分屏)控制Unity发布后播放的屏幕
- unity粒子特效附上贴图后播放动画
- unity 滑动条控制动画播放代码
- [Unity基础]游戏暂停下播放角色与粒子动画
- Unity实现RawImage图片显示视频 、灵活配置控制视频播放
- unity 粒子特效播放状态停止在最后一帧
- Unity手动控制动画播放
- unity粒子编辑器详解
- Unity中控制声音的播放