LoginSignup
7
8

More than 5 years have passed since last update.

Unity 4.6.1でGraphic RaycasterでタッチのPriorityを有効にする

Last updated at Posted at 2015-01-23

悲報。Unity 4.6.1から、Graphic RaycasterからPriorityが消えました。
スクリーンショット 2015-01-23 午後10.50.38.png

これによって、タップしたときに、目に見えているものよりさらに奥に有る物が反応してしまう、なんて事が起きるようになりました。

ということで、

表示されていないPriorityを表示する

using UnityEngine.UI;

public class CustomGraphicRaycaster : GraphicRaycaster
{
    public int priority;

    public override int sortOrderPriority {
        get {
            return priority;
        }
    }
}

以上。


・・・
蛇足を。

タップイベントが発行されるまでの雑な解説

Unity 4.6系で導入されたuGUIでは、ユーザの操作を検出するためのBaseInputModuleクラスが用意されています。
タップイベントをサポートするためのコンポーネントとして、
BaseInputModuleクラスを何層か子のTouchInputModuleクラスが作られています。
TouchInputModuleがタップを検出すると、EventSystemのRaycastAllメソッドを呼び出します。
EventSystemのRaycastAllメソッドは、シーン中のBaseRaycasterを継承しているクラス(GraphicRaycasterとか)のコンポーネントに対して、Raycastを要求し、
各RaycasterのRaycast結果をRaycastResultのリストとして収集します。
このとき、EventSystemは収集したRaycastResultのリストを次の2点でソートしてからRaycastAllメソッドの呼び出し元に処理を返します。

  • Raycasterに設定されているCameraのdepthで比較する
  • Cameraのdepthが同一ならば、RaycasterのsortOrderPriorityで比較する

ソートされたリストをEventSystemから受け取ったTouchInputModuleが、リストの先頭のオブジェクトに対して、ユーザの行った操作のイベントを発行します。

7
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
8