次の項目は別ページに分割しました。
コライダー
- Box Collider:直方体
- Sphere Collider:球
- Capsule Collider:カプセル
- Mesh Collider:メッシュ
公式サイト:
UnityEngine.Collider | Unity スクリプトリファレンス [公式]
概要
参考:
コライダーってどんな種類があるの?ってときに読む記事 | エクスプラボ
Collider まとめ (Unity 5) | TECH PROjin
導入
参考:
Collider – 衝突させる | 元 SE のニートがゲーム開発者を目指す
設定
ドキュメント:
衝突判定 (Collision Detection)
- 非連続的 (Discrete):現在のフレームのみで衝突を判定する
- 連続的 (Continuous):並進運動を仮定して、静的なオブジェクトと衝突を判定する
- 連続的かつ動的 (Continuous Dynamic):並進運動を仮定して、静的及び動的なオブジェクトと衝突を判定する
- 連続的かつ投機的 (Continuous Speculative):並進及び回転運動を仮定して、予測的に衝突を判定する。(※剛体の形状と状況により、剛体の角付近で「ゴースト衝突」と呼ばれる誤検出が発生する場合がある。)
ドキュメント:
連続的衝突判定 (CCD) | Unity マニュアル [公式]
参考:
最適な衝突判定を即選択/Collision Detection 早見表 | VirtualCast Blog
今更ながら RigidBody の Collision Detection について表にまとめてみた – Qiita
物理エンジンの接触判定トラブル/すり抜けとゴースト衝突 | BotaLab
Rigidbody の Collision Detection を変えて実験 | エクスプラボ
オブジェクトが壁をすり抜ける!そんなときの対策 | Unity 入門サイト
トリガー (isTrigger)
コライダーの isTrigger
を有効にすると、該当するオブジェクトは他の剛体オブジェクトに対して物理的作用を及ばさず、トリガーとしての役割のみを果たす。
ドキュメント:
Collider.isTrigger | Unity スクリプトリファレンス [公式]
参考:
OnTriggerEnter と OnCollisionEnter の違い/衝突判定 | Unity メモ
ハンドラの種類
コリジョン
剛体同士の接触で使用する。
OnCollisionEnter
: 剛体が接触を開始した時に呼び出されるOnCollisionExit
: 剛体が接触を終了した時に呼び出されるOnCollisionStay
: 剛体が接触をしている間、1フレーム毎に1回呼び出される
トリガー
コライダーがトリガーとして指定されている場合に使用する。
OnTriggerEnter
: コライダーがトリガー領域に接触を開始した時に呼び出されるOnTriggerExit
: コライダーがトリガー領域から離脱した際に呼び出されるOnTriggerStay
: コライダーがトリガー領域に侵入している場合、1フレーム毎に1回呼び出される
参考:
OnCollision と OnTrigger イベントの受け取りを検証する | かめくめ
OnTriggerEnter と OnCollisionEnter の違い/衝突判定 | Unity メモ
OnCollisionEnter と OnTriggerEnter の違い | フタバゼミ
当たり判定を一通り! OnTrigger/OnCollision をひとまとめ | 侍エンジニアブログ
How can I detect intersection of two GameObject – Unity Forum
Detecting if two game objects are overlapping / intersecting Unity – Stack Overflow
OnCollisionEnter
剛体が接触を開始した時に呼び出されるハンドラ
ドキュメント:
Rigidbody.OnCollisionEnter | Unity スクリプトリファレンス [公式]
Collider.OnCollisionEnter | Unity スクリプトリファレンス [公式]
参考:
OnCollisionEnter – オブジェクト同士の衝突時にイベントを発生させる | XR-Hub
OnCollisionStay
剛体が接触をしている間、1フレーム毎に1回呼び出されるハンドラ
ドキュメント:
Rigidbody.OnCollisionStay | Unity スクリプトリファレンス [公式]
Collider.OnCollisionStay | Unity スクリプトリファレンス [公式]
参考:
Collision
コールバック関数に渡されるコリジョンの詳細が格納されるクラス
プロパティ
collider
:衝突対象のコライダーcontanctCount
:発生した衝突の数contacts
:物理エンジンにより生成された衝突点 (※メモリガベッジが発生するため推奨されない。代わりにGetContact
/GetContacts
を使用する。)gameObject
:衝突対象のコライダーに関連付けられたゲームオブジェクトimpulse
:衝突により発生した力積の合計relativeVelocity
:コライダー間の相対速度rigidbody
:衝突対象のコライダーに関連付けられた剛体transform
:衝突対象オブジェクトのトランスフォーム
公開メソッド
GetContact
:index
で指定された衝突を取得するGetContacts
:全ての衝突点の位置をContactPoint
の配列として取得する
ドキュメント:
Collision | Unity Scripting API [Official]
ContactPoint
Collistion
クラスに格納される衝突点の位置情報
プロパティ
normal
:衝突点の法線otherCollider
:衝突した対象のコライダーpoint
:衝突点の位置separation
:コライダー間の距離 (めり込んでいる場合に負の値となる)thisCollider
:衝突が発生しているコライダー
ドキュメント:
ContactPoint | Unity Scripting API [Official]
ClosestPoint
ドキュメント:
Collider.ClosestPoint | Unity スクリプトリファレンス [公式]
メッシュコライダー (Mesh Collider)
- Convex
- Is Trigger
- Cooking Options
- Material
- Mesh
ドキュメント:
UnityEngine.MeshCollider | Unity スクリプトリファレンス [公式]
参考:
Mesh Collider の Convex オプションについて | ヒナタ製作所
Mesh Collider を持ったオブジェクトと Box Collider を持ったオブジェクトとの衝突に関して – teratail
複雑な形状のメッシュで Is Trigger を使いたい – teratail
How to enable Trigger on a Mesh Collider – Unity Forum
Mesh Collider with trigger but not convex in Unity 5 – Unity Forum
non-convex mesh collider and Is Trigger – Stack Overflow
detect trigger with mesh collider but without convex check – Stack Overflow
wrong Mesh Collider size for procedurally generated mesh – Stack Overflow
複合コライダー (Compund Colliders)
ドキュメント:
参考:
SA Collider Builder – メッシュに合わせてコライダーを自動作成してくれる | kan のメモ帳
複雑な形状のメッシュで Is Trigger を使いたい – teratail
Composite Collider 2D
参考:
複数の Collider を結合する Composite Collider 2D を使って少し遊ぶ | テラシュールブログ
Collision2D
2次元物理演算使用時にコールバック関数に渡されるコリジョンの詳細が格納されるクラス
ドキュメント:
Collision2D | Unity Scripting API [Official]
コライダーを取得する
GetComponent<Collider>()
メソッドでコライダーを取得する。
public class Example : MonoBehaviour
{
Collider _collider;
void Start()
{
_collider = GetComponent<Collider>();
}
}
Code language: C# (cs)
ドキュメント:
GameObject.collider | Unity スクリプトリファレンス [公式]
Component.GetComponent | Unity スクリプトリファレンス [公式]
単一のコライダーを判定する
ドキュメント:
Collider.Raycast | Unity スクリプトリファレンス [公式]
Physics.ComputePenetration | Unity スクリプトリファレンス [公式]
Bounds.Intersects | Unity スクリプトリファレンス [公式]
参考:
How to check if colliders overlap? – Unity Forum
Checking for an intersection between colliders – Unity Forum
Check if two meshes intersect – Unity Forum
Is there a way to find the volume of an intersection between two box colliders? – Stack Overflow
Check if object is overlapping – Game Development Stack Exchange
How to check for mesh overlap? – Game Development Stack Exchange
How to test for BoxCollider2D intersection? – Game Development Stack Exchange
Check if two lines intersect – Stack Overflow
攻撃に当たり判定を付ける
参考:
攻撃判定タイミングをグラフィカルに作りたい | ぐーるらいふ
コライダーで接触方向を検出する
ドキュメント:
ContactPoint2D.normal | Unity Scripting API [Official]
参考:
Calculate the normal of a collider – Unity Answers
領域内のコライダーを列挙する
- OverlapBox:立方体領域に含まれるコライダーを検出する
- OverlapCapsule:カプセル領域に含まれるコライダーを検出する
- OverlapSphere:球体領域に含まれるコライダーを検出する
ドキュメント:
Physics.OverlapBox | Unity スクリプトリファレンス [公式]
Physics.OverlapCapsule | Unity スクリプトリファレンス [公式]
Physics.OverlapSphere | Unity スクリプトリファレンス [公式]
すり抜け対策
参考:
3D ゲームで壁抜けしないコリジョンを実装してみた – Qiita
Overlap 関数
動画:
How Check Collisions Using OverlapSphere
ドキュメント:
Physics.OverlapBox | Unity スクリプトリファレンス [公式]
Physics.OverlapSphere | Unity スクリプトリファレンス [公式]
Physics.OverlapCapsule | Unity スクリプトリファレンス [公式]
参考:
指定した座標がコライダー内部にあるか判定する | おねむゲーマーの備忘録
特定の座標が Collider 内にあるかを判定するメソッド | ゆーじの技術ブログ
Physics.Overlap 関数で衝突判定をスマートに | Feelin Games
OverlapSphere で入手したコライダーから GameObject を入手したい – teratail
How to change the orientation for an overlapbox and a gizmo? – Stack Overflow
トランスフォームを同期する (Sync Transform)
ドキュメント:
Physics.SyncTransforms | Unity スクリプトリファレンス [公式]
Physics.autoSyncTransforms | Unity スクリプトリファレンス [公式]
参考:
Auto Sync Transform と移動時の判定、それと注意点 | テラシュールブログ
Auto Async Transform を切り替えた時の Collider 動作の変化を確認する | MR が楽しい
Recover Your Performance Juice with Auto Sync Transforms | TheGamedev.Guru
Auto Sync Transforms – Unity Forum
Auto Sync Transforms and moving objects – Unity Forum
Check if 2 objects with multiple colliders overlap using bounds – Game Development Stack Exchange
他のオブジェクトに衝突を通知したい
参考:
Action と Unity Event について – Qiita
delegate event OnCollisionEnter – Unity Answers
Delegate or Event: Reacting to another object’s collision functions – Unity Answers
アップデート
Unity 2019.3 における物理関連の変更事項 | Unity Blog [公式]
まとめ
Unity 5 版 Collider まとめ | TECH PROjin
チュートリアル
Physics – Rigidbodies / Colliders / Triggers
How to Detect Collision Using Colliders
How to Use Colliders and Triggers (Unity 5)
プレビュー版
参考:
Physics Previews | Unity Forum [Official]
フォーラム
Physics | Unity Forum [Official]
Unity Learn
Physics | Unity Learn [Official]
Optimizing Collisions with Burst and Neon Intrinsics
入手:
Optimizing Collisions with Burst and Neon Intrinsics | Unity Asset Store [Official]
PhysX SDK 4
リポジトリ:
NVIDIAGameWorks/PhysX: NVIDIA PhysX SDK – GitHub
フォーラム:
PhysX 4.1 in Unity | Unity Forum
参考:
Migrating From PhysX SDK 3.4 to 4.0 | NVIDIA PhysX SDK 4.1 Documentation [Official]