お知らせ

次の項目は別ページに分割しました。

コライダー

公式サイト:

UnityEngine.Collider | Unity スクリプトリファレンス [公式]

概要

参考:

コライダーってどんな種類があるの?ってときに読む記事 | エクスプラボ

Collider まとめ (Unity 5) | TECH PROjin

導入

参考:

衝突テスト – Qiita

Collider – 衝突させる | 元 SE のニートがゲーム開発者を目指す

設定

ドキュメント:

Physics | Unity マニュアル [公式]

衝突判定 (Collision Detection)

  • 非連続的 (Discrete)現在のフレームのみで衝突を判定する
  • 連続的 (Continuous)並進運動を仮定して、静的なオブジェクトと衝突を判定する
  • 連続的かつ動的 (Continuous Dynamic)並進運動を仮定して、静的及び動的なオブジェクトと衝突を判定する
  • 連続的かつ投機的 (Continuous Speculative)並進及び回転運動を仮定して、予測的に衝突を判定する。(※剛体の形状と状況により、剛体の角付近で「ゴースト衝突」と呼ばれる誤検出が発生する場合がある。)

ドキュメント:

連続的衝突判定 (CCD) | Unity マニュアル [公式]

Rigidbody | 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回呼び出される

参考:

衝突判定のあれこれ – Qiita

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 スクリプトリファレンス [公式]

参考:

衝突判定のあれこれ – Qiita

OnCollisionEnter – オブジェクト同士の衝突時にイベントを発生させる | XR-Hub

OnCollisionStay

剛体が接触をしている間、1フレーム毎に1回呼び出されるハンドラ

ドキュメント:

Rigidbody.OnCollisionStay | Unity スクリプトリファレンス [公式]

Collider.OnCollisionStay | Unity スクリプトリファレンス [公式]

参考:

触れている間はイベントを発生させる | フタバゼミ

Collision

コールバック関数に渡されるコリジョンの詳細が格納されるクラス

プロパティ
  • collider衝突対象のコライダー
  • contanctCount発生した衝突の数
  • contacts物理エンジンにより生成された衝突点 (※メモリガベッジが発生するため推奨されない。代わりに GetContact / GetContacts を使用する。)
  • gameObject衝突対象のコライダーに関連付けられたゲームオブジェクト
  • impulse衝突により発生した力積の合計
  • relativeVelocityコライダー間の相対速度
  • rigidbody衝突対象のコライダーに関連付けられた剛体
  • transform衝突対象オブジェクトのトランスフォーム
公開メソッド
  • GetContactindex で指定された衝突を取得する
  • 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 オプションについて | ヒナタ製作所

Non-convex MeshCollider with non-kinematic Rigidbody is no longer supported since Unity 5. が出た時の対処法 | IT Learning

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

How can i convert a non-convex mesh collider object to a convex mesh collider object – Game Development Stack Exchange

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)

ドキュメント:

複合コライダー | Unity マニュアル [公式]

参考:

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

How to detect intersections with only colliders and not use the physics engine? – Game Development Stack Exchange

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 内にあるかを判定するメソッド | ゆーじの技術ブログ

着弾時に爆風を発生させる方法 | monopro

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

Infinity or NaN floating point numbers appear when calculating the transform matrix for a Collider – 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

チュートリアル

Collision (Brackeys)

Physics – Rigidbodies / Colliders / Triggers

Using Triggers and Colliders

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/UnityPhysXPlugin: Experimental Unity package to enable access to NVIDIA PhysX SDK 4 from within Unity – GitHub

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]

記事をシェアする:
タグ:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

Protected by reCAPTCHA