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

どうにかして回避できないのでしょうか?
閉鎖
初心者 (280 ポイント) | 201 閲覧

回答 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」をリストで管理するか、あたりが思い浮かびます。
達人回答者 (6.2k ポイント)
選択
+2 支持
呼び出されるのは回避できないと割りきって

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

接地するまで、フラグたてておく、等の対処になるかと思います。
初心者 (280 ポイント)
再表示
2021-02-08 質問・回答をMarkdownで入力できるようにしました。
2020-09-03 新たなスパム対策を導入しました。

175 質問

157 回答

163 コメント

214 ユーザー