2017-01-17 5 views
2

私は自分のコンポーネントをUnityで作成しました。これはIBeginDragHandler、IDragHandler、IDropHandlerを実装しています。 UnityEngine.UIに付属しているEventTriggerコンポーネントを追加したいのですが、追加するときにコンポーネント上でOnDropへの呼び出しを停止します。 OnBeginDragとOnDragは通常どおり呼び出されます。Unity EventTriggerはOnDragをスチールしますが、OnDragを盗みません

マイ部品コード:

public class MyComponent : MonoBehaviour, IBeginDragHandler, IDragHandler, IDropHandler 
{ 
    public void OnBeginDrag(PointerEventData eventData) 
    { 
     Debug.Log("OnBeginDrag!"); 
    } 

    public void OnDrag(PointerEventData eventData) 
    { 
     Debug.Log("OnDrag!"); 
    } 

    public void OnDrop(PointerEventData eventData) 
    { 
     Debug.Log("OnDrop!"); 
    } 
} 

私は添付このコンポーネントをゲームオブジェクトに私のシーンを開始し、予想されるログ出力は次のとおりです。

OnBeginDrag! 
OnDrag! 
... 
OnDrag! 
OnDrop! 

これは私限りケースですデフォルトのコンポーネントと私のコンポーネントだけを持っています。私はイベントを追加した場合でも、 - >イベントトリガーコンポーネントは、同じゲームオブジェクトにして、再度実行します(でも、それには何も指定せずに)、出力は次のようになります。

OnBeginDrag! 
OnDrag! 
... 
OnDrag! 

OnDropが呼び出されることはありません。コンポーネントの順序は何にも影響しません。

EventTriggerがOnDrop呼び出しを使い果たしてしまうのを防ぐ方法はありますか?

答えて

1

まあ、これは回避策が、それはいつもだとしてOnEndDragイベントを使用することです...(私は、少なくとも1.5〜2年前、私はあまりにもそれを見つけたときに思い出すことはできませんが)長い時間のためにここに

てきました呼び出されます(EventTriggerコンポーネントなしでは、OnDropの直後に呼び出されます)。また、両方のイベントが全く同じことを象徴していることを感知します。アイテムがあらかじめドラッグされていなければアイテムはドロップされません。

そうしない可能性OnDropがそのように呼ばれたときに呼び出されますゲームオブジェクト方法(とさえパラメータ)を割り当てられる可能性があることを使用して独自のスクリプトで「コピー」EventTriggerクラスの振る舞いEventTriggerコンポーネントを追加する必要はありません。

希望します。

+0

代わりにEndDragを使用して問題を解決しました。ありがとうございます! Unity開発チームにこれについて通知されているかどうかは分かりますか? – Helena

+0

@Helena 100%は確かではありませんが、デベロッパがこれについて回答したUnityフォーラムのスレッドを見たので、彼らはこれを認識していると思います。しかし、バグ報告がすでに満たされているかどうかはわかりません。 – Kardux