Unityタッチイベントのスルー

タッチイベントを無視して下層にあるオブジェクトに拾ってほしい時、cocos2d-xと言えば、onTouchBeganの中でreturn false;でやればいいし、Cocos Studio 2の場合は「Properties」⇒「General」⇒「Touchable」のチェックボックスを外すことで実現できますが、Unityはどうなんでしょう?!

Canvasのボタンを配置し、その上にUIのPanelを配置すると、ボタンが押せなくなります。
その場合はPanelに「Canvas Group」コンポーネントを追加し、

その中の「Interactable」と「Blocks Raycasts」のチェックを外せば良いです。

参考:

  1. How to make UI ignore click

gitのファイルパーミッションによる違いの対応


※画像はイメージです。

Mac上にあるソースコードをフォルダごとFAT32フォーマットの外付けHDDにコピーし、それをまたMac上に戻した時、何も変更がないはずですが、git statusで見ると、全てのファイルに変更があるように出てしまいます。

具体的にgit diffで見てみると、以下のようにファイルのパーミッションだけの変更だったのが分かります。

...
old mode 100644
new mode 100755
diff --git a/Classes/AppDelegate.cpp b/Classes/AppDelegate.cpp
old mode 100644
new mode 100755
diff --git a/Classes/AppDelegate.h b/Classes/AppDelegate.h
old mode 100644
new mode 100755
diff --git a/Classes/Config.h b/Classes/Config.h
old mode 100644
new mode 100755
...

最初は力技でchmod 644 {プロジェクトフォルダ}で戻そうとしたら、フォルダごとアクセスできなくなりました。(; ̄Д ̄)なんじゃと?
フォルダなので、chmodの-Rが抜けましたね。
それはchmod a+x {プロジェクトフォルダ}で戻すことができました。
ファイルだけ戻したいのでchmod -R 644 {プロジェクトフォルダ}/*.*でやってみたら、proj.androidのようなフォルダ名もあるので、それらまたアクセスできなくなりました。。。まあ、そうなりますよね。

ちょっと待ってよ〜gitの最後にコミットした状態に合わせて手動変更よりも、git reset的なことやればいいじゃん?!思ったが、あいにくまだコミットしていないソースコード変更も混ざってることに気づきました。
何かパーミッションだけ戻す方法ないかと調べてみたら、まあ、ありますよね〜

gitでそのような変更を無視するような設定もできるのようですが、それだとなんだか違う気がしますので、下記参考に変更されたパーミッションを戻せました。
https://stackoverflow.com/a/4408378

具体的に、一つの方法は下記一行実行しておしまいです。

git diff -p -R --no-color \
    | grep -E "^(diff|(old|new) mode)" --color=never  \
    | git apply

または下記のように、まずgitにpermission-resetというaliasを追加します。

git config --global --add alias.permission-reset '!git diff -p -R --no-color | grep -E "^(diff|(old|new) mode)" --color=never | git apply'

そして、

git permission-reset

実行すればパーミッションをリセットできます。

今後もこういう時があるだろうということで、後者で試してみました。
無事パーミッションだけが元に戻りました!