Unityメモ_当たり判定を調べる

「OnControllerColliderHit」の当たり判定がよくわからなかったため、
適当にあたり判定を調べたメモ
個人用なのでかなり適当に

最終的にはこちらの方の記載でようやく対応方法がわかりました・・・
http://tech.hisasann.com/cs/144/


CharacterController 同士は、何も設定しなくても互いにぶつかり、
相手の身体を滑ったりも出来る便利なものですが、その代わり現在の仕様上、
ぶつかった相手が CharacterController だった場合、衝突情報を取得することができないようです。
処理上はちゃんと衝突してても、OnControllerColliderHit には、
CharacterController タイプのオブジェクト情報だけ送られてきません
(その他のコライダは当然取得出来ます)。

回避策としては、子オブジェクトに CharacterController 付属のコライダと同じくらいの大きさの CapsuleCollider をアタッチすることが挙げられます。
この子オブジェクトに、CharacterController を搭載した親オブジェクトと同じ tag や layer を設定しておけば、大抵の用は済みます。
必要であれば、衝突した子オブジェクトの parent を参照すればよいでしょう。


—————————————————
■衝突される側
・BoxCollider (isTriggerなし + rigidbodyなし)
→ 衝突する側:反応なし 衝突される側:反応なし
・BoxCollider (isTriggerあり + rigidbodyなし)
→ 衝突する側:反応なし 衝突される側:反応なし
・BoxCollider (isTriggerなし + rigidbodyあり)
→ 衝突する側:反応なし 衝突される側:OnCollisionStayに反応あり
・BoxCollider (isTriggerあり + rigidbodyあり)
→ 衝突する側:Trigger全て反応あり 衝突される側:Trigger全て反応あり
・CharacterController
→ 衝突する側:反応なし 衝突される側:反応なし
—————————————————

—————————————————
■衝突する側
・BoxCollider (isTriggerあり + rigidbodyなし)

■衝突される側
・BoxCollider (isTriggerなし + rigidbodyなし)
→ 衝突する側:反応なし 衝突される側:反応なし
・BoxCollider (isTriggerあり + rigidbodyなし)
→ 衝突する側:反応なし 衝突される側:反応なし
・BoxCollider (isTriggerなし + rigidbodyあり)
→ 衝突する側:Trigger全て反応あり 衝突される側:Trigger全て反応あり
・BoxCollider (isTriggerあり + rigidbodyあり)
→ 衝突する側:Trigger全て反応あり 衝突される側:Trigger全て反応あり
・CharacterController
→ 衝突する側:Trigger全て反応あり 衝突される側:Trigger全て反応あり
—————————————————

—————————————————
■衝突する側
・BoxCollider (isTriggerなし + rigidbodyあり)

■衝突される側
・BoxCollider (isTriggerなし + rigidbodyなし)
→ 衝突する側:Collision全て反応あり    衝突される側:Collision全て反応あり
・BoxCollider (isTriggerあり + rigidbodyなし)
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・BoxCollider (isTriggerなし + rigidbodyあり)
→ 衝突する側:Collision全て反応あり    衝突される側:Collision全て反応あり
・BoxCollider (isTriggerあり + rigidbodyあり)
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・CharacterController
→ 衝突する側:Collision全て反応あり    衝突される側:Collision全て反応あり
—————————————————

—————————————————
■衝突する側
・BoxCollider (isTriggerあり + rigidbodyあり)

■衝突される側
・BoxCollider (isTriggerなし + rigidbodyなし)
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・BoxCollider (isTriggerあり + rigidbodyなし)
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・BoxCollider (isTriggerなし + rigidbodyあり)
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・BoxCollider (isTriggerあり + rigidbodyあり)
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・CharacterController
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
—————————————————

—————————————————
■衝突する側
・CharacterController(rigidbodyなし)

■衝突される側
・BoxCollider (isTriggerなし + rigidbodyなし)
→衝突する側:反応なし 衝突される側:反応なし
・BoxCollider (isTriggerあり + rigidbodyなし)
→衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・BoxCollider (isTriggerなし + rigidbodyあり)
→衝突する側:反応なし 衝突される側:反応なし
・BoxCollider (isTriggerあり + rigidbodyあり)
→衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・CharacterController(rigidbodyなし)
→衝突する側:反応なし 衝突される側:反応なし

・BoxCollider (isTriggerなし + rigidbodyあり + isKinematicあり)
→ 衝突する側:反応なし 衝突される側:反応なし
・BoxCollider (isTriggerなし + rigidbodyあり + isKinematicなし)
→ 衝突する側:Collision全て反応あり    衝突される側:Collision全て反応あり
・BoxCollider (isTriggerあり + rigidbodyあり + isKinematicあり)
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
・BoxCollider (isTriggerあり + rigidbodyあり + isKinematicなし)
→ 衝突する側:Trigger全て反応あり    衝突される側:Trigger全て反応あり
—————————————————

—————————————————
■衝突する側
・CharacterController(rigidbodyあり)

■衝突される側
・CharacterController(rigidbodyあり)
→ 衝突する側:反応なし 衝突される側:反応なし
・CharacterController(rigidbodyなし)
→ 衝突する側:反応なし 衝突される側:反応なし
—————————————————

コメントを残す

メールアドレスが公開されることはありません。

CAPTCHA