2017-01-19 10 views
0

UnityでIDragHandlerを実装しています。私はそれをタッチしたときにオブジェクトをドラッグするだけでなく、ダウン。私のコードの中核:Unityオブジェクトの外側をクリックして、上にドラッグし始めます

public class Draggable : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler, IPointerEnterHandler 
{ 
    public void OnBeginDrag(PointerEventData eventData) 
    { 
     ... 
    } 

    public void OnDrag(PointerEventData eventData) 
    { 
     ... 
    } 

    public void OnEndDrag(PointerEventData eventData) 
    { 
     ... 
    } 

    public void OnPointerEnter(PointerEventData eventData) 
    { 
     // TODO: Don't just check mouse, take touch into account! 
     if (Input.GetMouseButton(0)) 
     { 
      this.OnBeginDrag(eventData); 
     } 
    } 
} 

だから、基本的には、ポインタがオブジェクトに入るときにポインタがダウンしていたら、私はそれをドラッグしたい。しかし、このコードは、このコードが実行されても何も起こらず、私は突然オブジェクトを通常はもはやドラッグすることができないため、そのオブジェクトのEventSystemにバグがあるようです。

私は行方不明のC#スクリプトから "OnBeginDrag"を手動でトリガーする方法はありますか?

答えて

0

カスタムカメラを作成する前にこの問題が発生しました。問題は、マウスボタンがイベントがトリガーされる前に押されていた場合、あなたのステートメント "if(Input.GetMouseButton(0))"がtrueを返さないということです。私が考えているのは論理的ですが、 "if(Input.GetMouseButton(0))"は、マウスボタンが押されていると意味しません。マウスボタンをクリックして{stuff}、{more stuff}をクリックした場合のようになります。

"Input.GetButtonDown()"の代わりに "Input.GetButton()"を使用する必要があります。 Input.GetButtonDown()は、ボタンが押されたフレームに対してのみtrueを返します。

http://answers.unity3d.com/questions/412117/do-something-while-key-is-pressed-and-held-down.html

あなたの質問は少し不明です。任意の点で全く動作するようにコードを取得しましたか、またはマウスボタンが押されている間にカーソルが外に出てしまったときにオブジェクトをドラッグするだけですか?

+0

ありがとうございました! 私は "GetMouseButton"を "GetButton"と解釈しますが、特に "GetMouseButtonDown"関数があるので、 "GetButtonDown"に対応するので、特にマウスボタンを使用しています。 不明な点をおかけして申し訳ありません。私のドラッグを開始し、ドラッグしてドラッグは、まったく問題なく動作します。ポインタダウンイベントがオブジェクトの外側で発生したとしても、私の実装されたドラッグ動作を開始するためにBeginDragへの手動呼び出しでチェーンをトリガーしたいだけです。 – Helena

+0

hmmm。私はそれでは分かりません。私はあなたの右ボタンのことについてすでに処理されていると思う。私の間違い。あなたは今何がすべきかを見るためにdebug.logを使用します。例えば、if文の中にdebug.logを置くことができます。例えば、debug.log( "this part works");それが発射されているかどうかを調べる。メッセージがコンソールに表示されます。これは、何がうまくいかないのか、どこで修正するのかを理解するのに役立ちます。 –

+0

私は、debug.logを使って決して考え出さなかった理由で、あらゆる種類のスクリプトが動作しないことを知っています。たとえば、私はかつて、270度から360度まで90度単位で回転するはずのプラットフォームを作成しました。そして、それは決して解雇されず、私はなぜ、地獄ではないのか理解できませんでした。最終的には、度が360度回転する場合にif文を使用していたためでしたが、私が使用していた方法は360度解釈されて0度なので、270は0以上ではない私はそれを359.9に変更しました。だから、debug.logはあなたの友人です。 –

関連する問題