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

(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

下からだけ貫通する床を表現できるPlatformEffector2Dの使い方やパラメータ【Unity】【Effector2D】

Unity Effector2D

このエントリーをはてなブックマークに追加

この記事でのバージョン
Unity 5.3.1f1 Personal

はじめに

今回はUnity5より追加されたPlatformEffector2Dのお話。

PlatformEffector2Dとは床の挙動を設定する

というもので、簡単に一方向の衝突判定、横方向の摩擦やバウンドを設定できる優れものです。



なお、名前の通りに2D用なのであしからず。


使い方

まずは簡単に使い方の説明です。

PlatformEffector2Dを使う時は、同じGameObjectにCollider2Dが必要になります。


また、Collider2DのUsedByEffectorを有効にする必要もあります。


f:id:kan_kikuchi:20160225134321j:plain


とりあえずこの状態で、適当なColliderとRIgidBody2Dをつけたオブジェクトを

したから打ち上げると、以下のような感じになります。


f:id:kan_kikuchi:20160204063937g:plain


下からだけ貫通しているのが分かると思います。


使用例

では、PlatformEffector2Dの使用例をいくつかご紹介。


下からだけ貫通する床

既に最初の説明であげてしまったんですが、表題にもなっているの再度ご紹介。

下からだけ貫通する床を表現するにはUse One Wayを有効にするだけです。


f:id:kan_kikuchi:20160225134328p:plain f:id:kan_kikuchi:20160204133403p:plain


上記の左の通りに力の発生源のパラメータを、

右にある通りに力を受けるオブジェクトのパラメータを設定した場合、

以下のような動きになります。


f:id:kan_kikuchi:20160204063937g:plain


側面は弾まない床

側面は弾まない床を表現するにはUse Side Bounceを無効にするだけです。


f:id:kan_kikuchi:20160225134336p:plain f:id:kan_kikuchi:20160204134600p:plain


上記の左の通りに力の発生源のパラメータを、

右にある通りに力を受けるオブジェクトのパラメータを設定した場合、

以下のような動きになります。


f:id:kan_kikuchi:20160211065924g:plain

弾む床を作りたいけど、横から当たったら乗れずに反対方向に吹っ飛ばされる

ってのを回避できますね。そういう場面に遭遇した事はまだありませんが……。


パラメータ

次にPlatformEffector2Dのパラメータについて説明をば。


Collider Mask

エフェクトを適用するレイヤーを指定できます。


f:id:kan_kikuchi:20160203135447j:plain
f:id:kan_kikuchi:20160203135454j:plain
f:id:kan_kikuchi:20160204064000g:plain


上記の画像例だとRedというLayerにあるオブジェクトにのみエフェクトが適用

するように設定されています。


また、Is Triggerにチェックが入っていなくても、青い玉が底の部分と衝突していないので、

そもそも当たり判定自体がなくなるようです。


なお、Use Collider Maskが無効の時は全レイヤーにエフェクトが適用されます。


Use One Way

衝突を一方向にして、下から突き抜けるように設定します。


Use One Way Grouping

これはイマイチ分からなかったので、以下のページをどうぞ。


Unity - Scripting API:PlatformEffector2D.useOneWayGrouping


Use One Wayによって突き抜ける動作が全て同じ動作になると保証する、みたいな感じですかね?


ちなみに日本語のマニュアルはちょっと古いのか、Use One Way Groupingの項目がありません。


Surface Arc

床の中心の面を定義するするために、設定する円弧の角度です。

ようはコライダーが通ることのできない面を定義するという事らしいです。

……と思って以下のように角度の外側と内側から投げ入れてみたのですが、


f:id:kan_kikuchi:20160211070523g:plain


ご覧の通り、両方とも貫通してしまっています。

解釈か、使い方か、なにが間違ってるのか分かりませぬ……。


Use Side Friction

摩擦を側面で使用するべきかどうかの設定です。


f:id:kan_kikuchi:20160211070600g:plain


上記の例は上がUse Side Frictionが有効、下がUse Side Frictionが無効のものです。


日本語のマニュアルだと「床側で使用するかどうか」になってるんですか、

これだと意味合いが違うような……。


Use Side Bounce

バウンスを側面で使用するべきかどうかの設定です。


f:id:kan_kikuchi:20160211070724g:plain


上記の例は上がUse Side Bounceが有効、下がUse Side Bounceが無効のものです。


これも日本語のマニュアルだと「床側で使用するかどうか」になってますのでご注意をば。


Side Arc


側面がどこまでか、というの角度で設定する項目です。


f:id:kan_kikuchi:20160211070848g:plain


上記の例では途中で

Side Arcを増やしたため、上の面も側面と判定され、バウンドしないようになっていますね。


なお、これも日本語のマニュアルにはまだ載っていない項目です。


おわりに

床を貫通と言えば以前、以下のような記事を書いていました。



プレイヤーのレイヤーを一瞬だけ当たり判定のない所に変更し、

それを戻すってやりかたで、すり抜けを実現してました。


PlatformEffector2Dを使えばこういう処理を書かないで済むってことですな〜(:3っ)∋〜