0 支持
127 閲覧
Platform Effector 2DのUse One Wayを使ってすり抜け床を作ったんですが、すり抜け中もOnCollisionStay2Dが呼び出されてしまいます。

どうにかして回避できないのでしょうか?
(210 ポイント) | 127 閲覧

ログインまたはユーザー登録してから回答してください。

回答 2

+1 支持
ベストアンサー
Platform Effector 2Dですり抜け中もOnCollisionStay2Dが呼ばれるのは、
"Unity的には"正しい挙動だと思います。
なので、"実際にやりたいこと"を実現するための調整をすることになりますが、
その正解は「何をやりたいか」によって変わってくると思います。
つまり、何をしようとしてOnCollisionStay2Dを使おうとしたのかが不明だと
若干答えづらいです。

「台に乗った時」のみ処理する場合は、OnCollisionEnter2Dを用いれば
法線を用いて次のように書けます。
 

void OnCollisionEnter2D(Collision2D collision) {
    if (collision.contacts[0].normal.y > -0.5f) {return;}
    Debug.Log("Hoge"); // ここにやりたい処理
}

「台に乗り続けたとき」の場合多少難しそうです。
OnCollisionStay2Dの場合、接触点も使って判定するか、
あるいはOnCollisionEnter2DとOnCollisionExit2Dを用いて
「台に乗ったGameObject」をリストで管理するか、あたりが思い浮かびます。
(3.5k ポイント)
選択
+2 支持
呼び出されるのは回避できないと割りきって

OnCollisionStay2D内でif文書いて、特定条件の時は、処理しないようにreturnするとか、そういった対処のしかたになると思います。

接地するまで、フラグたてておく、等の対処になるかと思います。
(280 ポイント)
再表示

関連する質問はありません。