お知らせ

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

コライダー

公式サイト:

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

設定

参考:

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

衝突判定 (Collision Detection)

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

参考:

最適な衝突判定を即選択/Collision Detection 早見表 | VirtualCast Blog

今更ながら RigidBody の Collision Detection について表にまとめてみた – Qiita

物理エンジンの接触判定トラブル/すり抜けとゴースト衝突 | BotaLab

Rigidbody の Collision Detection を変えて実験 | エクスプラボ

オブジェクトが壁をすり抜ける!そんなときの対策 | Unity 入門サイト

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

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

トリガー (isTrigger)

コライダーの isTrigger を有効にすると、該当するオブジェクトは他の剛体オブジェクトに対して物理的作用を及ばさず、トリガーとしての役割のみを果たす。

参考:

OnTriggerEnter と OnCollisionEnter の違い/衝突判定 | Unity メモ

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

ハンドラの種類

コリジョン

剛体同士の接触で使用する。

  • OnCollisionEnter剛体が接触を開始した時に呼び出される
  • OnCollisionExit剛体が接触を終了した時に呼び出される
  • OnCollisionStay剛体が接触をしている間、1フレーム毎に1回呼び出される
トリガー

コライダーがトリガーとして指定されている場合に使用する。

  • OnTriggerEnterコライダーがトリガー領域に接触を開始した時に呼び出される
  • OnTriggerExitコライダーがトリガー領域から離脱した際に呼び出される
  • OnTriggerStayコライダーがトリガー領域に侵入している場合、1フレーム毎に1回呼び出される

参考:

衝突判定のあれこれ – Qiita

Unity の OnCollision と OnTrigger イベントの受け取りを検証する | かめくめ

OnTriggerEnter と OnCollisionEnter の違い/衝突判定 | Unity メモ

OnCollisionEnter と OnTriggerEnter の違い | フタバゼミ

当たり判定を一通り! OnTrigger/OnCollision をひとまとめ | 侍エンジニアブログ

OnCollisionEnter

剛体が接触を開始した時に呼び出されるハンドラ

参考:

衝突判定のあれこれ – Qiita

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

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

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

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

参考:

Mesh Collider の Convex オプションについて | ヒナタ製作所

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

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

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)

参考:

SA Collider Builder – メッシュに合わせてコライダーを自動作成してくれる | kan のメモ帳

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

複雑な形状のメッシュで Is Trigger を使いたい – teratail

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

攻撃に当たり判定を付ける

参考:

攻撃判定タイミングをグラフィカルに作りたい | ぐーるらいふ

コライダーで接触方向を検出する

参考:

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

OverlapBox

参考:

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

How to change the orientation for an overlapbox and a gizmo? – Stack Overflow

Auto Sync Transform

参考:

Auto Sync Transform と移動時の判定、それと注意点 | テラシュールブログ

Auto Async Transform を切り替えた時の Collider 動作の変化を確認する | MR が楽しい

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

Recover Your Performance Juice with Auto Sync Transforms | TheGamedev.Guru

Auto Sync Transforms – Unity Forum

Auto Sync Transforms and moving objects – Unity Forum

アップデート

Unity 2019.3 における物理関連の変更事項 | Unity Blog [公式]

まとめ

Unity 5 版 Collider まとめ | TECH PROjin

プレビュー版

参考:

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