Unity——ParticleSystem(粒子系統)與Animator(影片狀態機)批量管理器
該腳本可以在Unity運行時同時播放多個粒子與影片,方便美工、特效師反復查看特效和影片細節,
(注:該腳本只做了簡單的回圈播放控制與單次播放控制,如有其他需求可自行擴展,)
using UnityEngine;
using System.Collections;
using UnityEditor;
public class ParticleAndAnimation : MonoBehaviour
{
void Start() {
PlayOnce();
}
[ContextMenu("Play Loop")]
public void PlayLoop() {
ParticleSystem[] pss = this.GetComponentsInChildren<ParticleSystem> (true);
foreach (ParticleSystem ps in pss) {
ps.loop = true;
ps.Play();
}
print("粒子系統開啟回圈成功");
Animator[] anis = this.GetComponentsInChildren<Animator>(true);
foreach (Animator an in anis)
{
//string animString = an.GetCurrentAnimatorClipInfo(0)[0].clip.name;
string animString = an.runtimeAnimatorController.animationClips[0].name;
AnimationClip clip = an.runtimeAnimatorController.animationClips[0];// an.GetCurrentAnimatorClipInfo(0)[0].clip;
AnimationClipSettings clipsetting = AnimationUtility.GetAnimationClipSettings(clip);
clipsetting.loopTime = true;
AnimationUtility.SetAnimationClipSettings(clip, clipsetting);
an.Play(animString, 0,0f);
}
print("影片系統開啟回圈成功");
}
[ContextMenu("Play Once")]
public void PlayOnce() {
ParticleSystem[] pss = this.GetComponentsInChildren< ParticleSystem> (true);
foreach (ParticleSystem ps in pss)
{
ps.loop = false;
ps.Play();
}
Animator[] anis = this.GetComponentsInChildren<Animator>(true);
foreach (Animator an in anis)
{
// string animString = an.GetCurrentAnimatorClipInfo(0)[0].clip.name;
string animString = an.runtimeAnimatorController.animationClips[0].name;
AnimationClip clip = an.runtimeAnimatorController.animationClips[0];//an.GetCurrentAnimatorClipInfo(0)[0].clip;
AnimationClipSettings clipsetting = AnimationUtility.GetAnimationClipSettings(clip);
clipsetting.loopTime = false;
AnimationUtility.SetAnimationClipSettings(clip, clipsetting);
an.Play(animString, 0, 0f);
}
}
}
下面是在該代碼模塊下生成可視化按鈕方便操作,
(注意:需要添加按鈕的腳本,在該創建代碼中的名稱、方法名都需要確保一致才能正確生成與呼叫)
using UnityEngine;
using UnityEditor;
[CustomEditor(typeof(ParticleAndAnimation))]//需要添加按鈕的腳本
public class AnimatorPlayEditor : Editor {
public override void OnInspectorGUI(){
DrawDefaultInspector();
ParticleAndAnimation myScript = (ParticleAndAnimation)target;//獲取要添加按鈕的腳本
if (GUILayout.Button("播放一次"))
{
myScript.PlayOnce();//呼叫添加按鈕腳本中的方法
}
if (GUILayout.Button("回圈播放"))
{
myScript.PlayLoop();
}
}
}
完成效果圖如下

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/298736.html
標籤:其他
上一篇:一個青年的初識
下一篇:螢屏后處理效果
