UDN
Search public documentation:

CollisionTechnicalGuideJP
English Translation
中国翻译
한국어

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 ホーム > 静的メッシュ > コリジョンの技術ガイド
UE3 ホーム > 物理 > コリジョンの技術ガイド
UE3 ホーム > 背景アーティスト > コリジョンの技術ガイド

コリジョンの技術ガイド


概要


グラフィックスのディテールが増したため、ゲーム内のコリジョンは、必ずシンプルに保つことが重要となります。理由は 2 つあります。1 つは、少数のポリゴンとのコリジョンであれば計算が非常に高速となるからです。もう 1 つの理由は、プレイヤーが小さなジオメトリに妨げられないため格段にスムーズなエクスペリエンスを得ることができるからです。コリジョンのレスポンスは、2 つの異なる部分に分かれます。すなわち、Unreal Collision および PhysX です。このドキュメントでは、Unreal Collision に焦点を当てています。PhysX に関する詳細は、 ここ をクリックしてください。コリジョン データを作成する方法に関する詳細は、 コリジョンのリファレンス のページを参照してください。

UnrealScript


Unreal Collision は、「Unreal Engine 1」に起源があります。コリジョン レスポンスの大部分は、UnrealScript で処理されます。また、UnrealScript によってコリジョンのプロパティも設定されます。これにより、Unreal Collision エンジンは、アクタをどのようにシミュレートさせるべきかを知ることができます。

アクタのプロパティ

コリジョンのセクションには、アクタ (Actor) のプロパティが多数あります。これらのプロパティは、コリジョン レスポンスとアクタの物理シミュレーションを Unreal Collision エンジンがどのように処理すべきかを制御します。

  • bCollideComplex - アクタが移動中、当該アクタ上における単純化されたコリジョン モデル (collision hull) を無視し、ポリゴン単位でコリジョンします。単純化されたコリジョン モデルは、Unreal Editor 内、または、3D コンテンツ作成パッケージ内で生成されます。ポリゴン単位のコリジョンは、非ゼロ範囲のトレースに役立ち、弾丸が正確にコリジョンするようになります。ポリゴン単位のコリジョンは、アクタの移動のためには推奨されません。コストが高いためです。
  • BlockRigidBody - PhysX を使用するアクタが当該アクタとコリジョンするか否かを保持します。
  • bNoEncroachCheck - 当該アクタが動かされたときに encroachment (侵犯) チェックを無効にする最適化です。このプロパティを有効化することによって、ゲームのスピードは上がりますが、アクタがトリガーにタッチしたり、プレイヤーを押したり、ボリュームに出入りすることはできなくなります。
  • bPathColliding - Unreal Editor におけるパス作成中に、当該アクタがパスをブロックすることができるか否かを保持します。
  • CollisionComponent - 当該アクタの移動のために使用されるコンポーネントへの参照です。アクタが PHYS_Walking を使用している場合は、このコンポーネントの座標軸に平行なバウンディング ボックスが、レベルとコリジョンします。アクタが PHYS_RigidBody (剛体) を使用している場合は、このコンポーネントの形状または物理アセットが使用されます。
  • CollisionType - 複数のコリジョン設定値をレベルデザイナーに簡単にエクスポーズするための方式です。Unreal Editor 内でこの値を変更すると、低レベルのフラグ (例 : アクタおよびその CollisionComponent の CollideActors、BlockActors、BlockNonZeroExtent、BlockZeroExtent、BlockRigidBody) が、Collision Type の説明に合うようにセットされます。
    • COLLIDE_CustomDefault - プログラマー設定のコリジョンです。これが選択されると、default properties (デフォルト プロパティ) 内でセットされているデフォルト値に、コリジョンが戻ります。
    • COLLIDE_NoCollision - 一切コリジョンしません。
    • COLLIDE_BlockAll - あらゆるものをブロックします。
    • COLLIDE_BlockWeapons - ゼロ範囲のトレース (通常は武器) だけをブロックします。
    • COLLIDE_TouchAll - あらゆるものをタッチします。ただし、ブロックはしません。
    • COLLIDE_TouchWeapons - ゼロ範囲のトレース (通常は武器) だけをタッチします。
    • COLLIDE_BlockAllButWeapons - ゼロ範囲のトレース (通常は武器) を除くあらゆるものをブロックします。
    • COLLIDE_TouchAllButWeapons - ゼロ範囲のトレース (通常は武器) を除くあらゆるものをタッチします。ブロックはしません。
    • COLLIDE_BlockWeaponsKickable - ゼロ範囲のトレース (通常は武器) だけをブロックします。また、プレイヤーが当該アクタをキックすることができるようにするフラグを有効にします。

コリジョンのフラグ

レベル内に配置するアクタとのコリジョンを Unreal がどのように実行するかを制御するためのフラグがいくつかあります。1 つのフラグが、アクタのプロパティとコンポーネントのプロパティ両方に現れる場合があります。そのような場合は、アクタのプロパティがオーバーライドの役割をします。

  • CollideActors - アクタを、Unreal によるコリジョン検知の対象とするためには、true にセットします。
  • BlockActors - 他のアクタが移動するのを当該アクタがブロックすべきか否かを保持します。たとえば、トリガーは、 CollideActorstrue にセットされ、 BlockActorsfalse にセットされることが考えられます。このようにする理由は、2 つのアクタが互いにタッチするときに Unreal が検知するものの、移動しているアクタがそれを切り抜けて移動できるようにするためです。
  • BlockZeroExtent - ゼロ範囲のトレースはラインチェックです。(通常、弾丸をシミュレートする武器のために使用されます)。 true の場合は、UnrealScript で使用されるゼロ範囲のトレースをアクタがブロックします。
  • BlockNonZeroExtent - 非ゼロ範囲のトレースは、軸に平行なバウンディング ボックス チェックです。(通常、プレイヤーの移動に使用されます)。true の場合は、UnrealScript で使用される非ゼロ範囲のトレースをアクタがブロックします。

UnrealScript のイベント

「Unreal Engine 3」でコリジョンが発生すると、関係するアクタ上で UnrealScript のイベントが呼び出されます。これらのイベントは、サブクラス化されたアクタ内でイベントをオーバーライドできるように設計されています。 ALERT! * UnrealScript において、イベントと関数に違いはありません。*

HitWall

HitWall が呼び出されるのは、アクタが物理的に Wall にコリジョンした場合です。(BSP の場合、Wall は WorldInfo にセットされています)。
  • HitNormal - アクタが wall にヒットする際の法線です。
  • Wall - 当該アクタがコリジョンするアクタです。
  • WallComp - 当該アクタがコリジョンするコンポーネントです。BSP の場合、WallComp は None にセットされています。

Actor.uc
event HitWall(Vector HitNormal, Actor Wall, PrimitiveComponent WallComp)

このイベントの呼び出し方は、ポーンによって変更される場合があることに注意しなければなりません。bDirectHitWall が true にセットされている場合は、必ず、ポーンの HitWall イベントを直接呼び出す必要があります。

Pawn.uc
var bool bDirectHitWall;

HitWall イベントの呼び出し方は、ポーンのコントローラによって変更される場合があることに注意しなければなりません。

NotifyHitWall が呼び出されるのは、ワールド ジオメトリのブロックする部分とポーンがコリジョンした場合です。true を返すことによって、ポーン上における HitWall() の通知を防ぎます。

  • HitNormal - アクタが wall にヒットする際の法線です。
  • Wall - 当該アクタがコリジョンするアクタです。

Controller.uc
event bool NotifyHitWall(vector HitNormal, actor Wall);

NotifyFallingHitWall が呼び出されるのは、落下中に、ワールド ジオメトリのブロックする部分とポーンがコリジョンした場合です。コントローラ内の bNotifyFallingHitWall が true の場合に限って呼び出されます。

  • HitNormal - アクタが wall にヒットする際の法線です。
  • Wall - 当該アクタがコリジョンするアクタです。

Controller.uc
event NotifyFallingHitWall(vector HitNormal, actor Wall);

Landed

Landed (着地) が呼び出されるのは、アクタが FloorActor に物理的に着地した場合です。(BSP の場合、FloorActor は WorldInfo にセットされています)。
  • HitNormal - 着地の法線です。
  • FloorActor - 当該アクタが着地するアクタです。

Actor.uc
event Landed(vector HitNormal, Actor FloorActor);

Landed の呼び出し方は、ポーンのコントローラによって変更される場合があることに注意しなければなりません。

NotifyLanded が呼び出されるのは、ポーンが落下から着地した場合です。true を返すことによって、ポーン上における Landed() の通知を防ぎます。

  • HitNormal - 着地の法線です。
  • FloorActor - 当該アクタが着地するアクタです。

Controller.uc
event bool NotifyLanded(vector HitNormal, Actor FloorActor);

PhysicsVolumeChange

このイベントがトリガーされるのは、PhysicsVolume 変数が変更された場合です。
  • NewVolume - PhysicsVolume にセットされたボリュームです。

Actor.uc
event PhysicsVolumeChange(PhysicsVolume NewVolume);

Touch

Touch イベントは、アクタと他のアクタ (Other) が互いとタッチしている場合に、両者の上で呼び出されます。アクタと他のアクタ (Other) がともにコリジョン可能であり、さらに、アクタまたは他のアクタのどちらかが非ブロック コリジョンを使用している必要があります。
  • Other - 当該アクタにタッチしたアクタです。
  • OtherComp - 当該アクタにタッチしたコンポーネントです。
  • HitLocation - タッチが発生したワールドの位置です。
  • HitNormal - 発生したタッチの法線です。

Actor.uc
event Touch(Actor Other, PrimitiveComponent OtherComp, vector HitLocation, vector HitNormal);

PostTouch

PostTouch が PendingTouch 上で呼び出されるのは、物理が完了した後です。Pending Touch アクタは、(移動が終了した後でエフェクトを追加する必要がある) 移動イベント中にタッチされたアクタです。アクタはともにコリジョン可能であり、かつ、どちらか一方のアクタが非ブロック コリジョンを使用している必要があります。
  • Other - PendingTouch アクタです。

Actor.uc
event PostTouch(Actor Other);

UnTouch

UnTouch は、他のアクタ (Other) とのタッチが解除 (アンタッチ) されたアクタ上で呼び出されます。たとえば、プレイヤーのポーンが最初にトリガーにタッチすると、プレイヤーのポーンとトリガーがともに Touch イベントを受け取ります。プレイヤーのポーンがトリガーから離れて行くことによってコリジョンがタッチしなくなると、プレイヤーのポーンは、他のアクタ (Other) のパラメータがトリガーとしてセットされた状態で UnTouch を呼び出します。アクタと他のアクタ (Other) がともにコリジョン可能であり、さらに、アクタまたは他のアクタのどちらかが非ブロック コリジョンを使用している必要があります。
  • Other - アンタッチされたアクタです。

Actor.uc
event UnTouch(Actor Other);

Bump

Bump がアクタおよび他のアクタ (Other) 上で呼び出されるのは、互いにバンプしたときです。アクタと他のアクタ (Other) はともにコリジョン可能であり、かつ、両者ともブロック コリジョンを使用している必要があります。
  • Other - 当該アクタにバンプしたアクタです。
  • OtherComp - 当該アクタにバンプしたコンポーネントです。
  • HitNormal - 発生したバンプの法線です。

Actor.uc
event Bump(Actor Other, PrimitiveComponent OtherComp, Vector HitNormal);

ポーンのコントローラによって Bump の呼び出され方が変更される場合があることに注意する必要があります。

NotifyBump が呼び出されるのは、ブロックするプレイヤーとポーンがコリジョンした場合です。true を返すことによって、ポーン上における Bump() の通知を防ぎます。

Controller.uc
event bool NotifyBump(Actor Other, Vector HitNormal);

BaseChange

BaseChange が呼び出されるのは、アクタの Base 変数が変更された場合です。これには、Base が None にセットされた場合も含まれます。(これは、アクタが空間に浮いている場合に生じます)。Base 変数は、アクタが現在あるものの上に立っている場合に、そのあるものを指すアクタの参照です。

Actor.uc
event BaseChange();

CollisionChanged

CollisionChanged が呼び出されるのは、アクタのコリジョン プロパティのいずれかが変更された場合です。

Actor.uc
event CollisionChanged();

EncroachingOn

EncroachingOn が呼び出されるのは、アクタが他のアクタ (Other) を侵犯し、なおかつ、他のアクタ (Other) を押しのけるための適当な場所がない場合です。
  • Other - 当該アクタによって侵犯されるアクタです。
  • Return - 異動を中止する場合は true を返します。移動を許可する場合は false を返します。 ALERT! PHYS_RigidBody (物理_剛体) アクタの移動を中止してはいけません。Unreal の位置と物理エンジンの位置が不適合となるためです。

Actor.uc
event bool EncroachingOn(Actor Other);

EncroachedBy

Actor.uc
event EncroachedBy(Actor Other);

RanInto

RanInto は、侵犯する際に他のアクタ (Other) を押しのけることに成功したアクタのために呼び出されます。
  • Other - 押しのけられたアクタです。

Actor.uc
event RanInto(Actor Other);

コリジョン チェックの実行

トレース

トレースを実行することによって、ラインがワールド内にあるものとコリジョンするか否かを検知します。
  • HitLocation - ラインがコリジョンしたワールド内の位置です。
  • HitNormal - ラインがコリジョンした位置のサーフェス法線です。
  • TraceEnd - トレースが終了するワールド内の位置です。
  • TraceStart - トレースが開始するワールド内の位置です。
  • bTraceActors - トレースがアクタに対するものであるか否かを保持します。
  • Extent - このベクターがゼロに等しい場合 (Vect[0.f, 0.f, 0.f]) は、実行されるトレースが、ゼロ範囲として見なされます。このベクターがゼロではない場合は、非ゼロ範囲のトレースが実行されます。
  • HitInfo - この構造体にはトレースの結果に関する情報が含まれます。トレースが何ともコリジョンしなかった場合は、無効となります。
    • Material - トレースがヒットしたマテリアルです。
    • PhysMaterial - トレースがヒットした物理マテリアルです。
    • Item - トレースがヒットしたものに関する付加的情報です。
    • LevelIndex - トレースが BSP にヒットした場合に、レベルのインデックスを保持します。
    • BoneName - トレースが骨格メッシュ コンポーネントにヒットした場合に、ボーンの名前を保持します。
    • HitComponent - トレースがヒットしたコンポーネントです。
  • ExtraTraceFlags - トレースをどのように実行すべきかということのヒントとなる、付加的なトレースのフラッグです。
    • TRACEFLAG_Bullet - トレースが、静的メッシュ上の単純なコリジョンを常に無視するようになり、常にポリゴン単位のコリジョン検知を実行するようになります。
    • TRACEFLAG_PhysicsVolumes - トレースが、物理ボリュームに対してコリジョンのチェックをするようになります。
    • TRACEFLAG_SkipMovers - トレースが InterpActors を無視するようになります。
    • TRACEFLAG_Blocking - これが設定されると、チェックしているアクタ (トレースが呼び出されたアクタ) をブロックできるアクタ、および、コリジョンしているすべてのものに対して、トレースがコリジョンするようになります。「コリジョンしているすべてのもの」には、レベルのジオメトリ、ポーン、補間されたアクタ、あらゆる他の種類のアクタ、テレイン、ボリュームが含まれます。 * Returned Actor - トレースがアクタの参照を返します。返り値が None の場合は、トレースが何にもヒットしなかったことになります。トレースが BSP とヒットした場合は、WorldInfo が返されるアクタです。上記以外は、トレースがヒットしたアクタであれば何でも返すことになります。

Actor.uc
function Actor Trace(out Vector   HitLocation, out Vector HitNormal, Vector TraceEnd, optional Vector TraceStart, optional bool bTraceActors, optional Vector Extent, optional out TraceHitInfo HitInfo, optional int ExtraTraceFlags);

TraceComponent

InComponent に対してだけトレースを実行します。トレースがヒットした場合は、true を返します。アクタがヒットされたか否かを決定する際に、より高い精度が必要となる場合に役立ちます。
  • HitLocation - ラインがコリジョンしたワールド内の位置です。
  • HitNormal - ラインがコリジョンした位置のサーフェス法線です。
  • InComponent - トレース実行の対象となるコンポーネントです。
  • TraceEnd - トレースが終了するワールド内の位置です。
  • TraceStart - トレースが開始するワールド内の位置です。
  • Extent - このベクターがゼロに等しい場合 (Vect[0.f, 0.f, 0.f]) は、実行されるトレースが、ゼロ範囲として見なされます。 このベクターがゼロではない場合は、非ゼロ範囲のトレースが実行されます。
  • HitInfo - この構造体にはトレースの結果に関する情報が含まれます。トレースが何ともコリジョンしなかった場合は、無効となります。
    • Material - トレースがヒットしたマテリアルです。
    • PhysMaterial - トレースがヒットした物理マテリアルです。
    • Item - トレースがヒットしたものに関する付加的情報です。
    • LevelIndex - トレースが BSP にヒットした場合に、レベルのインデックスを保持します。
    • BoneName - トレースが骨格メッシュ コンポーネントにヒットした場合に、ボーンの名前を保持します。
    • HitComponent - トレースがヒットしたコンポーネントです。
  • bComplexCollision - ポリゴン単位のコリジョンを使用する場合は、true にセットします。

Actor.uc
function bool TraceComponent(out Vector HitLocation, out Vector HitNormal, PrimitiveComponent InComponent, Vector TraceEnd, optional Vector TraceStart, optional Vector Extent, optional out TraceHitInfo HitInfo, optional bool bComplexCollision)

FastTrace

ワールド内でトレースを実行し、何ともコリジョン しなかった 場合に true を返します。あるアクタが別のアクタの視線をもつか否かを素早くチェックするために役立ちます。
  • TraceEnd - トレースが終了するワールド内の位置です。
  • TraceStart - トレースが開始するワールド内の位置です。
  • BoxExtent - このベクターがゼロに等しい場合 (Vect[0.f, 0.f, 0.f]) は、実行されるトレースが、ゼロ範囲として見なされます。このベクターがゼロではない場合は、非ゼロ範囲のトレースが実行されます。
  • bTraceBullet - トレースを弾丸のように振舞わせる場合は true にセットします。

Actor.uc
function bool FastTrace(Vector TraceEnd, optional Vector TraceStart, optional Vector BoxExtent, optional bool bTraceBullet);

TraceAllPhysicsAssetInteractions

骨格メッシュ コンポーネントの物理アセットに対してワールド内でトレースを実行し、ヒットのすべてを返します。
  • SkelMeshComp - トレースの対象となる骨格メッシュ コンポーネントです。
  • EndTrace - トレースが終了するワールド内の地点です。
  • StartTrace - トレースが開始されるワールド内の地点です。
  • out_Hits - トレース結果に関する情報が格納された配列を出力します。
    • HitActor - ヒットしたアクタです。
    • HitLocation - トレースがヒットした地点のワールド位置です。
    • HitNormal - トレースがヒットした地点のヒット法線です。
    • RayDir - トレースの方向です。
    • StartTrace - トレースが開始した地点のワールド位置です。
    • HitInfo - この構造体にはトレースの結果に関する情報が含まれます。トレースが何ともコリジョンしなかった場合は、無効となります。
      • Material - トレースがヒットしたマテリアルです。
      • PhysMaterial - トレースがヒットした物理マテリアルです。
      • Item - トレースがヒットしたものに関する付加的情報です。
      • LevelIndex - トレースが BSP にヒットした場合に、レベルのインデックスを保持します。
      • BoneName - トレースが骨格メッシュ コンポーネントにヒットした場合に、ボーンの名前を保持します。
      • HitComponent - トレースがヒットしたコンポーネントです。
  • Extent - このベクターがゼロに等しい場合 (Vect[0.f, 0.f, 0.f]) は、実行されるトレースが、ゼロ範囲として見なされます。このベクターがゼロではない場合は、非ゼロ範囲のトレースが実行されます。
  • ヒットが検知された場合は true を返します。

Actor.uc
function bool TraceAllPhysicsAssetInteractions(SkeletalMeshComponent SkelMeshComp, Vector EndTrace, Vector StartTrace, out Array<ImpactInfo> out_Hits, optional Vector Extent);

IsOverlapping

アクタが A をオーバーラップしている場合は true を返します。
  • A - オーバーラップ状態を検証する際に対象となるもう一方のアクタです。

Actor.uc
function bool IsOverlapping(Actor A);

GetBoundingCylinder

バウンディング シリンダーの半径および高さを返します。(可能な場合)。
  • CollisionRadius - コリジョンの半径です。
  • CollisionHeight - コリジョンの高さです。

Actor.uc
function GetBoundingCylinder(out float CollisionRadius, out float CollisionHeight) const;

IsBlockedBy

当該アクタが他のアクタ (Other) にブロックされている場合に true を返します。
  • Other - 当該アクタをブロックしているか否かを検査する際に対象となるもう一方のアクタです。

Actor.uc
function bool IsBlockedBy(const Actor Other) const;

TouchingActors

当該アクタにタッチしているアクタをすべて返す関数イタレータです。
  • BaseClass - 返されるアクタのクラスです。
  • Actor - ラインがコリジョンしたアクタです。

Actor.uc
iterator function TouchingActors(class<Actor> BaseClass, out Actor Actor);

TraceActors

ワールド内の 2 地点間に存在するあらゆるアクタと TraceHitInfos を返すイタレータ関数です。ある種のアクタやその他の条件を除外したり含めたりすることができるラインチェックを実行する際に役立ちます。
  • BaseClass - 返されるアクタのクラスです。
  • Actor - ラインがコリジョンしたアクタです。
  • HitLoc - ラインがコリジョンしたワールド内の位置です。
  • HitNorm - ラインがコリジョンした地点のサーフェス法線です。
  • End - トレースが終了するワールド内の位置です。
  • Start - トレースが開始されるワールド内の位置です。
  • Extent - このベクターがゼロに等しい場合 (Vect[0.f, 0.f, 0.f]) は、実行されるトレースが、ゼロ範囲として見なされます。このベクターがゼロではない場合は、非ゼロ範囲のトレースが実行されます。
  • HitInfo - この構造体にはトレースの結果に関する情報が含まれます。トレースがコリジョンするものがなかった場合は、無効となります。
    • Material - トレースがヒットしたマテリアルです。
    • PhysMaterial - トレースがヒットした物理マテリアルです。
    • Item - トレースがヒットしたものに関する付加的情報です。
    • LevelIndex - トレースが BSP にヒットした場合に、レベルのインデックスを保持します。
    • BoneName - トレースが骨格メッシュ コンポーネントにヒットした場合に、ボーンの名前を保持します。
    • HitComponent - トレースがヒットしたコンポーネントです。
  • ExtraTraceFlags - トレースの計算方法に関するヒントとなる、付加的なトレースのフラッグです。
    • TRACEFLAG_Bullet - トレースが弾丸のように振舞っています。

Actor.uc
iterator function TraceActors(class<Actor> BaseClass, out Actor Actor, out Vector HitLoc, out Vector HitNorm, Vector End, optional Vector Start, optional Vector Extent, optional out TraceHitInfo HitInfo, optional int ExtraTraceFlags);

VisibleCollidingActors

Loc (デフォルトでは呼び出し元の位置) から当該アクタの位置までのトレースがワールドにヒットしない半径範囲 (Radius) 内に存在して、衝突している (bCollideActors が true にセットされている ) 全アクタを返すイタレータ関数です。
  • BaseClass - 返されるアクタのクラスです。
  • Actor - ラインがコリジョンしたアクタです。
  • Radius - ボックスの半径です。
  • Loc - ボックスまたは球体の中心があるワールド位置です。
  • bIgnoreHidden - 非表示のアクタを無視するか否かを保持します。
  • Extent - このベクターがゼロに等しい場合 (Vect[0.f, 0.f, 0.f]) は、実行されるトレースが、ゼロ範囲として見なされます。このベクターがゼロではない場合は、非ゼロ範囲のトレースが実行されます。
  • bTraceActors - 視線チェックを実行することによって、アクタが呼び出し元からビジブルであることを確認するか否かを保持します。
  • InterfaceClass - このインターフェイスを実装していないアクタを除外します。None の場合は、無視されます。
  • HitInfo - この構造体にはトレースの結果に関する情報が含まれます。トレースが何ともコリジョンしなかった場合は、無効となります。
    • Material - トレースがヒットしたマテリアルです。
    • PhysMaterial - トレースがヒットした物理マテリアルです。
    • Item - トレースがヒットしたものに関する付加的情報です。
    • LevelIndex - トレースが BSP にヒットした場合に、レベルのインデックスを保持します。
    • BoneName - トレースが骨格メッシュ コンポーネントにヒットした場合に、ボーンの名前を保持します。
    • HitComponent - トレースがヒットしたコンポーネントです。

Actor.uc
iterator function VisibleCollidingActors(class<Actor> BaseClass, out Actor Actor, float Radius, optional Vector Loc, optional bool bIgnoreHidden, optional Vector Extent, optional bool bTraceActors, optional class<Interface> InterfaceClass, optional out TraceHitInfo HitInfo);

CollidingActors

一定の半径内に存在してコリジョンしている (bCollideActors が true にセットされている) アクタを返すイタレータ関数です。 bUseOverlapCheck は、オブジェクトの中心が球体内部にあるか否かをチェックするのではなく、球体またはボックスのチェックを使用します。
  • BaseClass - 返されるアクタのクラスです。
  • Actor - ラインがコリジョンしたアクタです。
  • Radius - bUseOverlapCheck に応じて、ボックスまたは球体の半径を保持します。
  • Loc - ボックスまたは球体の中心があるワールド位置です。
  • bUseOverlapCheck - オブジェクトの中心が球体内部にあるか否かをチェックするのではなく、球体またはボックスのチェックを使用します。
  • InterfaceClass - このインターフェイスを実装していないアクタを除外します。None の場合は、無視されます。
  • HitInfo - この構造体にはトレースの結果に関する情報が含まれます。トレースがコリジョンするものがなかった場合は、無効となります。
    • Material - トレースがヒットしたマテリアルです。
    • PhysMaterial - トレースがヒットした物理マテリアルです。
    • Item - トレースがヒットしたものに関する付加的情報です。
    • LevelIndex - トレースが BSP にヒットした場合に、レベルのインデックスを保持します。
    • BoneName - トレースが骨格メッシュ コンポーネントにヒットした場合に、ボーンの名前を保持します。
    • HitComponent - トレースがヒットしたコンポーネントです。

Actor.uc
iterator function CollidingActors(class<Actor> BaseClass, out Actor Actor, float Radius, optional Vector Loc, optional bool bUseOverlapCheck, optional class<Interface> InterfaceClass, optional out TraceHitInfo HitInfo);

OverlappingActors

位置が Loc であり半径が Radius の球体とオーバーラップして、コリジョンしている (bCollideActors が true にセットされている) アクタを返すイタレータ関数です。
  • BaseClass - 返されるアクタのクラスです。
  • out_Actor - 各イタレーションで返されるアクタです。
  • Radius - オーバーラップのチェックに用いられる球体の半径です。
  • Loc - オーバーラップのチェックに用いられる球体の中心です。(オプションです。指定されない場合は、呼び出し元の位置が使用されます)。
  • bIgnoreHidden - true の場合は、非表示のアクタが無視されます。

Actor.uc
iterator function OverlappingActors(class<Actor> BaseClass, out Actor out_Actor, float Radius, optional Vector Loc, optional bool bIgnoreHidden);

コリジョンのタイプ


ゲーム内で使用することができるコリジョンのタイプがいくつかあります。方式の大半は、閉じられたメッシュをコリジョン モデル (collision hull) として使用します。

骨格メッシュ コリジョン モデル

骨格メッシュによって使用されるコリジョン モデルの作成方法については、 PhAT ユーザーガイド のページを参照してください。

静的メッシュ コリジョン モデル

静的メッシュ コリジョン モデル (static mesh collision hull) は、静的メッシュの一部として格納されます。静的メッシュ コリジョン モデルは、静的メッシュと同じようにしてインスタンス化されます。したがって、ブロックボリュームよりもメモリ面で効率が良いです。

静的メッシュのブラウザでは、コリジョン モデルの使用方法に関するいくつかのプロパティを変更することができます。

  • UseSimpleRigidBodyCollision (シンプルな剛体コリジョンを使用) - デフォルトでは true にセットされています。このプロパティが true であり、なおかつ、コリジョン モデルが存在する場合は、コリジョン モデルが 1 組の凸包に変換されて、静的メッシュに対する物理オブジェクト (例 : ビークルやラグドール) のコリジョンを計算するために使用されます。 UseSimpleRigidBodyCollision が true であり、なおかつ、コリジョン モデルが存在しない場合は、剛体が静的メッシュとコリジョンしません。UseSimpleRigidBodyCollision を false にセットした場合は、物理エンジンが、静的メッシュのポリゴン単位にコリジョンします。したがって、静的メッシュのポリゴンがかなり大きい場合にのみ、このオプションを使用すべきです。
  • UseSimpleBoxCollision (シンプルなボックス コリジョンを使用) - デフォルトでは true にセットされています。このプロパティが true の場合は、コリジョン モデル (存在する場合) が、非ゼロ範囲のラインチェックに使用されます。これには、プレイヤーの移動のようなものが含まれますが、武器の発砲は含まれません。このプロパティが true にセットされていて、なおかつ、コリジョン モデルが存在する場合は、ポリゴン単位のコリジョンは使用されません。 UseSimpleBoxCollision に false をセットすると、マテリアルに基づき、ポリゴン単位のコリジョンが使用されます。 UseSimpleBoxCollision が true にセットされていて、なおかつ、コリジョン モデルが存在しない場合は、コリジョンが生じません。
  • UseSimpleLineCollision (シンプルなラインコリジョンを使用) - デフォルトでは true にセットされています。このプロパティが true の場合は、コリジョン モデル (存在する場合) が、ゼロ範囲のラインチェックに使用されます。これには、たいていの武器の発砲やレンズフレアのトレースなどが含まれます。UseSimpleLineCollision が true であり、なおかつ、コリジョン モデルが存在しない場合、もしくは、UseSimpleLineCollision が false にセットされている場合は、マテリアルの設定に基づきポリゴン単位のコリジョンが使用されることになります。