2017-05-04 4 views
2

おはよう、Unity3D EventManager:インタフェースから派生した汎用タイプのイベントを持つ辞書

現在、私はUnity PorjectのEventSystemに取り組んでいます。 したがってUnityEvent(私が聞いたように昨年改善された)を利用したいと思います。

EventManagerは可能な限り一般的なものでなければならず、イベントをEventTypeで登録しなければなりません。したがって、UnityEventから派生した汎用のBaseEventを作成しました。型はEventDataオブジェクトを定義するためのインタフェースであるIEventDataでなければならない。

public class BaseEvent<T> : UnityEvent<T> where T : IEventData {} 

public interface IEventData {} 

public struct SomeEventData : IEventData 
{ 
    public readonly float someFloat; 
    public readonly bool someBool; 

    public SomeEventData(float param1, bool param2) 
    { 
     someFloat = param1; 
     someBool = param2; 
    } 
} 

ここで私はEventmanagerに次の問題があります。 EventManagerはBaseEventで辞書を保持しているので、AddListenerのような汎用メソッドからアクセスしようとするとエラーが発生します。

public class EventManager { 
private Dictionary<System.Type, BaseEvent<IEventData>> m_events; 

private static EventManager m_instance; 

public static EventManager Instance { 
    get { 
     if (m_instance == null) { 
      m_instance = new EventManager(); 
     } 
     return m_instance; 
    } 
} 

public static void AddListener<T>(BaseEvent<T> listener) where T : IEventData {    
    BaseEvent<T> tempEvent;  

    if (Instance.m_events.TryGetValue(typeof(T), out tempEvent)) { 
     tempEvent.AddListener(listener); 
    } 
    else { 
     tempEvent = new BaseEvent<T>(); 
     tempEvent.AddListener(listener); 
     Instance.m_events.Add(typeof(T), tempEvent); 
    } 
} 

エラーは明らかです。 TのBaseEventからIEventDataのBaseEventを変換することはできません。しかし、私はそれを動作させるためにコードをどのように変更しなければならないのか分かりません。私は "T:IEventData"が問題を修正すると思ったが、Tは派生クラスであるかもしれないので、そうは思わない。

私の質問は 一般的なBaseEventを追加することは可能ですか?

事前に感謝します。

答えて

0

私は、Visual Studioでコードをコピーしたとエラーがある:私はしたいあなたの場所に、しかし、あなたの質問

を投稿時の隣のエラーメッセージのこの種を含めてください

Argument 2: can not covert from 'out BaseEvent<T>' to 'out BaseEvent<IEventData>' 

BaseEvent<IEventData> tempEvent;BaseEvent<T> tempEvent;の宣言を変更し、それはあなたが直面している問題は、現在、ユニティで利用可能なネットの一部ではサポートされていない共分散、である

1

を軌道に乗る必要があります。

はあなたの問題はよくhere

+0

も参照[この質問と回答](http://stackoverflow.com/questions/31572956/understanding-generics-and-func-arguments)で説明されています – Draco18s

関連する問題