UDN
Search public documentation:
ActorComponentsJP
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
中国翻译
한국어
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
アクタ コンポーネント
概要
Unreal Engine において、すべてのゲーム関連オブジェクトは基本 Actor クラスから派生されます。前世代のUnreal Engine では、基本Actor クラスは非常に重いもので、アクタ派生サブクラスはビヘイビアに関係なく、すべてのプロパティを継承します。 アクタコンポーネントは、アクタのレンダリングおよびコリジョンのモジュラー拡張性用インターフェースを提供する複数のライトウェイトコンポーネントを定義することにより問題を解決します。 コンポーネントプロトタイプはクラスのデフォルトプロパティで定義されます。また、Unreal Engine 2にて以前に定義されたサブオブジェクトの構文の変更済みバージョンを使用します。プロトタイプには名前がつけられ、サブクラスにより継承されます。サブクラスはプロトタイプのいくつかのまたはすべてのデフォルトプロパティをオーバーライドできます。コンポーネントを使用するには、デフォルトプロパティを通してアクタのコンポーネント配列に追加してください。デフォルトプロパティにて参照されたコンポーネントプロトタイプはアクタクラスと共にインスタンス化されます。デフォルトプロパティはレベルで保存されたアクタクラスの既存インスタンスにプロパゲートされます。アクタ コンポーネントの使用
ActorComponent (アクタコンポーネント) と PrimitiveComponent (プリミティブコンポーネント) との違い
ActorComponent (アクタコンポーネント) は、ワールド内のアクタに添付して利用するオブジェクトです。 PrimitiveComponent (プリミティブコンポーネント) は、その ActorComponent でも、レンダリングや衝突が可能なもののことです。コンポーネントを追加する
インスタンス化されるアクタは、それと共にインスタンス化される SpriteComponent を持ちます(サブクラスがコンポーネント配列から Sprite を削除しない限り) コンポーネント配列により参照されたコンポーネントはアクタの位置にバインドされます。 例:class Actor extends Object; var const array<ActorComponent> Components; defaultproperties { Begin Object Class=SpriteComponent Name=Sprite Sprite=S_Actor HiddenGame=True End Object Components.Add(Sprite) }
コンポーネントの修正
例:class Trigger extends Actor; defaultproperties { Begin Object Name=Sprite Sprite=S_Trigger End Object }
コンポーネントを削除する
例:class StaticMeshActor extends Actor; defaultproperties { Components.Remove(Sprite) … }Sprite コンポーネントプロトタイプは、 StaticMeshActor クラスのデフォルトプロパティで参照されていないことから StaticMeshActorsでインスタンス化されません。
コンポーネント テンプレート
コンポーネント テンプレートはアクタ クラスのデフォルト コンポーネントの宣言に使用します。コンポーネント テンプレートは名前つきのオブジェクトで、クラスのデフォルト プロパティで参照するコンポーネントのデフォルト プロパティを含んでいます。クラスがインスタンス化されると、そのクラスが参照するすべてのコンポーネント テンプレートも一緒にインスタンス化されます。 コンポーネント テンプレートは、それ自体が宣言されたクラスのサブクラスに継承されます。各サブクラスは継承したテンプレートのそれぞれのプロパティをオーバーライドできます。 コンポーネント テンプレートのインスタンスはテンプレートのデフォルト プロパティにしたがって連続化されます。これによりアクタ コンポーネントのインスタンスには、テンプレート プロパティをレベルに設置した後に行われた変更内容が常に反映されるようになります。コンポーネント テンプレートの作成
コンポーネント テンプレートはクラスのデフォルト プロパティで宣言します。:Begin Object Class=SpriteComponent Name=Sprite Sprite=Texture2D'EngineResources.S_Actor' HiddenGame=True AlwaysLoadOnClient=False AlwaysLoadOnServer=False End Object
コンポーネント テンプレートのインスタンス化と関連付け
クラスの デフォルト プロパティで参照したコンポーネント テンプレートだけが、クラスでのインスタンス化を行えます。また、アクタの Components 配列にあるアクタ コンポーネントのみ、アクタに関連付けることができます。デフォルト プロパティで、コンポーネント テンプレートをアクタの Components 配列に追加すると、アクタ コンポーネント テンプレートをアクタ クラスでインスタンス化することができ、また、インスタンス化したコンポーネントを自動的にアクタ インスタンスに関連付けることができます。:Begin Object Class=SpriteComponent Name=Sprite // スプライト コンポーネントのプロパティ値をここで割り当て End Object Components.Add(Sprite)
スーパー クラスから継承したコンポーネント テンプレートのプロパティを変更する
コンポーネント テンプレートは、テンプレートが最初にせんげんされたクラスのサブクラスが継承します。サブクラスは継承したテンプレートのそれぞれのプロパティをオーバーライドできます。この例ではアクタから Sprite テンプレートを継承し、スプライト テクスチャ プロパティだけを書き換えます:Begin Object Name=Sprite Sprite=Texture2D'EngineResources.S_SkyLight' End Object
動的に作成されたコンポーネント
コンポーネントのインスタンスを動的に作成するには、UnrealScript の new 演算子を使用し、新しいコンポーネントをアクタに関連付けするため、アクタの AttachComponent メソッドを呼び出します。 new 演算子へのパラメータは、コンポーネントを作成する外側(Outer)のオブジェクトで、このコンポーネントを内包して関連付けられるべきアクタです。 こうすることで、他のアクターにコンポーネントが関連付けられてガーベジコレクションをされる前に、コンポーネントの外部参照を設定して不用意にガーベジコレクションされることを確実に防げるようにします。local StaticMeshComponent NewComponent; NewComponent = new(self) class'StaticMeshComponent'; // ここに、静的メッシュコンポーネントのプロパティを設定する AttachComponent(NewComponent);アクタを動的にコンポーネントから切り離したい場合は、アクタの DetachComponent メソッドを利用します。これはアクタの配列 Components からコンポーネントを削除して、アクタから切り離します。
共通 PrimitiveComponent オプション
型 | 名前 | 説明 |
boolean | AlwaysLoadOnClient | AlwaysLoadOnClient=False で、プリミティブの HiddenGame=True で CollideActors=False の場合、プリミティブはゲーム クライアントにロードされません。 |
boolean | AlwaysLoadOnServer | AlwaysLoadOnServer=False で、プリミティブの CollideActors=False の場合、プリミティブはゲーム サーバにロードされません。 |
boolean | BlockActors | PrimitiveComponent の衝突が有効の場合、BlockActor でプリミティブの衝突が他のアクタをブロックするかどうかを定義します。 |
boolean | CastShadow | PrimitiveComponent がシャドウを投影する場合は True、投影しない場合は False。 |
boolean | CollideActors | アクタの bCollideActors または PrimitiveComponent の CollideActors プロパティのいずれかが False なら、プリミティブは衝突を起こしません。 |
boolean | HiddenEditor | PrimitiveComponent がエディタ内でレンダリングするなら False、レンダリングしないなら True。 |
boolean | HiddenGame | PrimitiveComponent がゲーム内でレンダリングするなら False、レンダリングしないなら True。 |
アクタの衝突と PrimitiveComponent
衝突 PrimitiveComponent では、アクタに関連付けたものすべてについて衝突テストを実施しますが、アクタが移動する場合のテスト対象は PrimitiveComponent だけです。この PrimitiveComponent を選択するには、アクタプロパティの CollisionComponent (衝突コンポーネント) で、アクタの移動衝突チェックに使用するコンポーネントを参照するように設定します。アクタが移動すると、CollisionComponent が参照するコンポーネントの境界ボックスを利用してすべての衝突 PrimitiveComponent に対してスイープします。ビルトイン コンポーネント タイプ
-
- PrimitiveComponent
- ArrowComponent
- CameraConeComponent
- CylinderComponent
- DrawFrustumComponent
- MeshComponent
- StaticMeshComponent
- SkeletalMeshComponent
- ParticleSystemComponent
- SpriteComponent
- LightComponent
- DirectionalLightComponent
- PointLightComponent
- SpotLightComponent
- SkyLightComponent
- AudioComponent
- HeightFogComponent
- SceneCaptureComponent
- SceneCapture2DComponent
- SceneCaptureCubeMapComponent
- SceneCaptureParaboloidComponent
- SceneCaptureReflectComponent
- PrimitiveComponent