[unity 2D] マウスイベントについて [第22回]
閉じる
閉じる

新しい記事を投稿しました。シェアして読者に伝えましょう

×

[unity 2D] マウスイベントについて [第22回]

2015-02-04 12:26
    これ、めっちゃハマったので先に書いておきます。

    OnMouseで始まるイベントの使い方について、
    ざっと拾ってきた以下のイベントトリガーの一覧。
    ・OnMouseEnter
    ・OnMouseExit
    ・OnMouseDown
    ・OnMouseDrag
    ・OnMouseOver
    ・OnMouseUp
    ・OnMouseUpAsButton


    これらですが、ちゃんと動かなくてハマりました。

    まず結論から書いてしまいましょう。

    1.各種Colliderがアタッチされていないと発行されない
    2.範囲が被っているColliderはイベント発行されない(Z軸基準)


    特に2.にハマりました。
    ざっと調べてみた限り、これ書いてくれている情報は無かったので、
    マジで気をつけてください。

    で、1.はまあ分りやすいでしょう。

    http://docs-jp.unity3d.com/Documentation/ScriptReference/MonoBehaviour.OnMouseEnter.html

    などに記載されていますが、MonoBehaviourのメソッドで、
    マウスが、GUIElementCollider オブジェクトに○された時に呼び出される。」
    と言う事なので、これはOkでしょう。


    問題は2.です。
    これなんですが、Z軸基準に処理される様なのですね。
    文字通り一番前にいるColliderのみイベント発行されます。

    なので、完全に同じ軸にいる場合は、Colliderが後から張られた順番に前にいる訳で、
    同じZ軸にいある場合は、殆ど制御不能と言ってよいでしょう。

    更に、最も前にいるColliderのみがイベント発行する仕様の為、
    当然親子関係が関係ありません。
    子のGameObjectにそれぞれColliderを持たせる場合は、
    Z軸をいじらない限り、まともに動かないので注意です。

    3Dエンジンを流用しているっぽいので、まあ納得はする仕様ではある。
    (多分2Dで作っている人だけ困るでしょうねw)

    そして、SpriteRendererのSorting Layerは無視されます。
    あくまでZ軸基準のようです。

    なので、マウスイベント取りたい場合は、
    わずかにZ軸を前に出す必要があるのですね。

    まあ確かに、一番前にいる奴のイベント発行されるのは直感的というか。
    しかし、Sorting Layerが無視されるので、ちゃんと整理しないといけません。

    Sprite自身のZ軸を変化させるとベクトルが狂いそうなので、
    私はクリックイベント専用の子オブジェクトを作成して、
    そいつの軸をずらしてやる方法でやってみようかと思います。


    以下のブロマガでは、OverlapPointを使っていて、
    一般的にはこちらが主流のように思いますので、
    この方の方法も参考にしてみてはいかがかなと思います。(勝手に紹介します)

    http://ch.nicovideo.jp/max_eipi/blomaga/ar659234

    とりあえず情報展開までに。

    間違い・便利な方法などありましたら教えてください(`・ω・)



    広告
    コメントを書く
    コメントをするには、
    ログインして下さい。