この文書の現在のバージョンと選択したバージョンの差分を表示します。
次のリビジョン | 前のリビジョン | ||
wiki:unity:tips:097 [2015/02/03 14:17] step 作成 |
wiki:unity:tips:097 [2015/02/23 12:47] (現在) |
||
---|---|---|---|
ライン 1: | ライン 1: | ||
- | ====== 097 uGUIとGameObjectが重なっている時にGameObjectのタッチを無視する ====== | + | [[http://stepism.sakura.ne.jp/unity/wiki/|Unityはこちらに移動しました。]] |
- | + | ||
- | uGUIとSpriteや他のGameObjectが重なっている時、両方タッチに反応してしまうのは都合が悪い。 | + | |
- | なので、uGUIのUIが重なっている時は、その他のタッチ処理を無効にして通らない様にします。 | + | |
- | 基本的には、EventSystem.current.IsPointerOverGameObject()を使えば良いです。 | + | |
- | + | ||
- | <code csharp> | + | |
- | using UnityEngine.EventSystems; | + | |
- | + | ||
- | //------------------------------------------------------------- | + | |
- | // EventSystemのGameObjectにマウスオーバーしているか? | + | |
- | //------------------------------------------------------------- | + | |
- | public bool IsPointerOverGameObject() | + | |
- | { | + | |
- | EventSystem current = EventSystem.current; | + | |
- | if (current != null) | + | |
- | { | + | |
- | if (current.IsPointerOverGameObject()) | + | |
- | { | + | |
- | return true; | + | |
- | } | + | |
- | + | ||
- | foreach (Touch t in Input.touches) | + | |
- | { | + | |
- | if (current.IsPointerOverGameObject(t.fingerId)) | + | |
- | { | + | |
- | return true; | + | |
- | } | + | |
- | } | + | |
- | } | + | |
- | return false; | + | |
- | } | + | |
- | </code> | + | |
- | + | ||
- | 使い方はシンプルに | + | |
- | <code csharp> | + | |
- | //------------------------------------------------------------- | + | |
- | //! タッチしたか. | + | |
- | //------------------------------------------------------------- | + | |
- | public bool IsTouchPress() | + | |
- | { | + | |
- | if (Input.GetMouseButtonDown(0)) | + | |
- | { | + | |
- | if (!IsPointerOverGameObject()) | + | |
- | { | + | |
- | return true; | + | |
- | } | + | |
- | } | + | |
- | return false; | + | |
- | } | + | |
- | </code> | + | |
- | + | ||
- | こんな感じでタッチ処理をラップしてIsTouchPressを使う様にしてあげれば良いです。 | + |