読者です 読者をやめる 読者になる 読者になる

テラシュールブログ

旧テラシュールウェアブログUnity記事。主にUnityのTipsやAR・VR、ニコニコ動画についてのメモを残します。

LayerMaskで自身と同じレイヤーを除く

Unity情報 Unity

結論を書くと、以下のコードでeverythingから自分と同じレイヤーのチェックを外せる。

LayerMask mask = -1 - 1 << gameObject.layer;

少し説明すると、maskはビット演算でレイヤーを管理している。
で、-1で全部にフラグが立った状態と同じ値になるので、そこから自身のフラグを倒してやれば自分以外のフラグが立っている状態の完成。

ちなみに複数ある場合はこんな感じで書く。

mask = -1 - (1 << gameObject.layer | 1 << layerNo);

逆に、自分のフラグのみ建てたい場合はこんな感じ。

mask = 1 << gameObject.layer ;

もし名前でレイヤー番号を取得したい場合、こんな感じで取得する。

int layerNo = LayerMask.NameToLayer("enemy")

地面に向けてRayを撃ちたいが、自身にあたってしまう場合向け。