Unity 编辑器下控制播放粒子
生活随笔
收集整理的這篇文章主要介紹了
Unity 编辑器下控制播放粒子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ?在Unity編輯器的Scene視圖進行控制播放粒子ParticleSystem,可以借助方法Simulate,具體可以參照以下例子:
| 1 2 3 4 5 6 | using?UnityEngine; public?class?EditParticleSystem?:?MonoBehaviour { } |
| 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 编辑器下控制播放粒子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 广数系统加工中心编程_加工中心宏程序编程
- 下一篇: “恩智浦”杯智能车竞赛总结