2017-08-09 4 views

Antwort

2

Hoffnung verwenden können, das funktioniert:

using System.Collections; 
using System.Collections.Generic; 
using UnityEngine; 
using UnityEngine.EventSystems; 
using UnityEngine.Events; 

[ExecuteInEditMode] 
[RequireComponent (typeof (AudioSource))] 
public class SceneAnimationEvent : MonoBehaviour { 
    public AudioSource audioSrc; 
    [SerializeField] 
    public UnityEvent events; 
    UnityAction methodDelegate; 
    bool eventAdded = false; 

    void OnEnable(){ 
     UpdateInspector(); 
    } 
    void UpdateInspector(){ 
     if (!eventAdded) { 
      audioSrc = GetComponent<AudioSource>(); 
      events = new UnityEvent(); 
      methodDelegate = System.Delegate.CreateDelegate (typeof(UnityAction), audioSrc, "Play") as UnityAction; 
      UnityEditor.Events.UnityEventTools.AddPersistentListener (events, methodDelegate); 
      eventAdded = true; 
     } 
    } 
} 
+0

Es funktioniert, ich werde meinen vollständigen Code veröffentlichen, wenn jemand anderes das gleiche Problem auftritt. –

0

Sie unityEvent.AddListener

public class EventRunner : MonoBehaviour { 

    public AudioSource audioSource; 
    public UnityEvent ev; 

    IEnumerator Start() { 

     //you won't see an entry comes up in the inspector 
     ev.AddListener(audioSource.Play); 

     while (true) 
     { 
      ev.Invoke(); //you will hear the sound 
      yield return new WaitForSeconds(0.5f); 
     } 

    } 
} 
+0

Ich muss den Listener im Editor hinzufügen, ohne in den Wiedergabemodus zu wechseln. –

0

Dank @zayedupal, ist diese vollständige Antwort auf Gameobject automatisch erstellt, Komponenten für die Objekt und fügt automatisch UnityEvent im Editor hinzu.

[MenuItem("GameObject/Create Animation/With SFX", false, -1)] 
static void CreateAnimationWithSFX() 
{ 
    GameObject go = new GameObject("animationWithSFX"); 
    go.transform.SetParent(Selection.activeTransform); 

    AudioSource audioSource = go.AddComponent<AudioSource>(); 
    audioSource.playOnAwake = false; 
    // Automate-add the right channel for audio source 
    AudioMixer mixer = Resources.Load("Master") as AudioMixer; 
    audioSource.outputAudioMixerGroup = mixer.FindMatchingGroups("SFX")[0]; 

    SceneAnimationEvent script = go.AddComponent<SceneAnimationEvent>(); 
    // Automate-add the unity built-in function into UnityEvent 
    script.Events = new UnityEvent(); 
    UnityAction methodDelegate = System.Delegate.CreateDelegate (typeof(UnityAction), audioSource, "Play") as UnityAction; 
    UnityEventTools.AddPersistentListener (script.Events, methodDelegate); 

    Undo.RegisterCreatedObjectUndo(go, "Create " + go.name); 
    Selection.activeObject = go; 
} 
Verwandte Themen