UDN
Search public documentation:

DevelopmentKitGemsAddingSpritesMeshesParticleEffectsJP
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

Unreal Development Kit ホーム > Unreal Development Kit Gems > スプライト、メッシュ、パーティクルエフェクトをアクタに追加する方法

スプライト、メッシュ、パーティクルエフェクトをアクタに追加する方法


2011年3月に UDK について最終テスト実施済み
PC および iOS 対応

概要


「Unreal Engine 2」では、アクタがレンダリングできるものは 1 つしかありませんでした。したがって、複数のメッシュ、または、メッシュとパーティクルエフェクトの混合によってアクタを表現するには、複数のアクタを同期させる必要がありました。「Unreal Tournament 3」ではこの問題を解決するために、これらのタスクを分割してアクタのコンポーネントとしています。アクタのコンポーネントは、特定のタスクを実行するアクタ内部のオブジェクトです。

したがって、アクタが静的メッシュとして自身をレンダリングするには、StaticMeshComponent を追加する必要があります。あるいは、SkeletalMeshComponent を追加する必要があります。もしくは、SpriteComponent を。または、ParticleSystemComponent を。それとも・・・ というように、さまざまなコンポーネントを追加する必要があります。ただし、そのうちどれか 1 つを選択しなければならないということではありません。アクタ内に必要なだけコンポーネントを追加することが可能なのです。さらに、それらコンポーネント同士がインタラクトすることも可能です。

本資料では、アクタ内にあるコンポーネントの使用方法について説明します。

関連テーマ

UnrealScript による方法


UnrealScript においてアクタのコンポーネントを追加する方法は、2 つあります。1 つは、デフォルトのプロパティにおいてサブオブジェクトとしてコンポーネントを宣言する方法です。もう 1 つは、実行時にコンポーネントを作成する方法です。以下の例では、静的メッシュコンポーネントを使用しますが、これの代わりに、骨格メッシュコンポーネントやスプライト コンポーネント、パーティクル システム コンポーネントなどの視覚的なコンポーネントを使用することもできます。

デフォルトのプロパティ

UnrealScript 内で、デフォルトのプロパティに静的メッシュのサブオブジェクトを追加する方法について説明します。

まず、クラス グローバル変数リスト内で、静的メッシュ コンポーネントの変数を宣言します。これによって、クラスが、デフォルトのプロパティ内で定義された静的メッシュ コンポーネントへの参照をもてるようになります。

デフォルトのプロパティ内で、サブオブジェクトを作成します。デフォルトのプロパティ内でサブオブジェクトを作成したら、アクタ内のコンポーネント配列に追加します。サブ オブジェクトは、そのすべてがコンポーネント配列に追加されなければ、使用することができません。

MyActor.uc
class MyActor extends Actor;

// Expose to Unrealscript and Unreal Editor
var() StaticMeshComponent StaticMesh;

defaultproperties
{
  // Declare sub object
  Begin Object Class=StaticMeshComponent Name=MyStaticMeshComponent
    StaticMesh=StaticMesh'EditorMeshes.TexPropPlane'
  End Object
  StaticMesh=MyStaticMeshComponent
  Components.Add(MyStaticMeshComponent)
}

以前に親クラス内で宣言されたサブオブジェクトを再定義する場合は、それと同様に行うことができます。唯一の相違点は、クラスパラメータを宣言する必要がないと言うことです。プロパティを再定義しなければならない場合 (この例では新たな静的メッシュの定義) に便利です。

MySubActor.uc
class MySubActor extends MyActor;

defaultproperties
{
  // Redefine sub object
  Begin Object Name=MyStaticMeshComponent
    StaticMesh=StaticMesh'EngineMeshes.Cube'
  End Object
  StaticMesh=MyStaticMeshComponent
  Components.Add(MyStaticMeshComponent)
}

If you wish to remove a previously declared component from your sub class.

MySubActor.uc
class MySubActor extends MyActor;

defaultproperties
{
  Components.Remove(MyStaticMeshComponent) // Remove a specific actor component
  Components.Empty // Remove all actor components
}

実行時

実行時にUnrealScript を使用して静的メッシュのコンポーネントを追加する方法について説明します。PostBeginPlay だけではなく、あらゆる関数に追加することが可能です。アクタのコンポーネントを初期化するか、他のプロパティをセットアップしなければならない場合があります。

MyActor.uc
class MyActor extends Actor;

var() StaticMeshComponent StaticMesh;

function PostBeginPlay()
{
  Super.PostBeginPlay();

  StaticMesh = new () class'StaticMeshComponent';

  if (StaticMesh != None)
  {
    StaticMesh.SetStaticMesh(StaticMesh'EngineMeshes.Cube');
    AttachComponent(StaticMesh);
  }
}

defaultproperties
{
}

関連テーマ

「Unreal」エディタによる方法


エディタフレンドリーなバージョンの作成方法について説明します。このバージョンの欠点は、これを使用するアクタが、ゲームを実行しなければエディタ内で当該アクタがどのように見えるかを表示することができないということにあります。ただし、PIE (Play in Editor) を起動することによってこの問題を緩和することができます。

インライン編集変数修飾子とインスタンス化変数修飾子が、プリミティブ コンポーネント変数の宣言に追加されると、次の 2 つのことが可能になります。1 つは、インライン編集変数修飾子によって、プロパティウィンドウ内でプリミティブ コンポーネントをエディタが編集できるようになります。もう 1 つは、インスタンス化変数修飾子によって、アクタがスポーンされたときにオブジェクト参照が自動的に再作成されるようになります。

DynamicActorComponent.uc
class DynamicActorComponent extends Actor
   ClassGroup(Common)
   AutoExpandCategories(DynamicActorComponent)
   placeable;

// Expose to Unrealscript and Unreal Editor
var() const EditInline Instanced array<PrimitiveComponent> PrimitiveComponents;

function PostBeginPlay()
{
  local int i;

  // Check the primitive components array to see if we need to add any components into the components array.
  if (PrimitiveComponents.Length > 0)
  {
    for (i = 0; i < PrimitiveComponents.Length; ++i)
    {
      if (PrimitiveComponents[i] != None)
      {
        AttachComponent(PrimitiveComponents[i]);
      }
    }
  }

  Super.PostBeginPlay();
}

defaultproperties
{
  Begin Object Class=SpriteComponent Name=Sprite
    Sprite=Texture2D'EditorResources.S_Actor'
   HiddenGame=True
   AlwaysLoadOnClient=False
   AlwaysLoadOnServer=False
  End Object
  Components.Add(Sprite)
}

DynamicActorComponent 配列の使用

コンテンツブラウザを開き、[Actor Classes] (アクタクラス) タブをクリックします。新たな DynamicActorComponent (動的アクタコンポーネント) が Common (一般) グループにあります。それを選択します。

AddingComponents_0_SelectDynamicActorComponent.jpg

ワールド内に単純な BSP フロアを作成します。必ず、ライトアクタをワールドに追加します。さもなければ、シーンが適切にライティングされません。

AddingComponents_1_AddBSPFloor.jpg

ワールド ビューポート内で、DynamicActorComponent (動的アクタコンポーネント) を配置したいところを右クリックします。コンテクストメニューが開きます。 Add DynamicActorComponent Here (ここに DynamicActorComponent を追加する) を選択します。

AddingComponents_2_AddDynamicActorComponent.jpg

作成されると自動的に選択されます。

AddingComponents_3_AddedDynamicActorComponent.jpg

F4 キーを押し、プロパティ ウィンドウを開きます。

AddingComponents_5_DynamicActorComponentProperties.jpg

選択されていない場合は、必ずアクタがアクタリスト内にあります。

AddingComponents_4_SearchForDynamicActorComponent.jpg

Primitive Components (プリミティブ コンポーネント) 配列内にある緑のプラスマークをクリックします。これによって、配列内に新たなエントリが作成されます。次に、下向きの青い矢印をクリックし、StaticMeshComponent を選択することによって、新たな StaticMeshComponent オブジェクトを作成します。

AddingComponents_6_AddingNewPrimitiveComponent.jpg

コンテンツブラウザ内で適当な静的メッシュを見つけて選択します。

AddingComponents_7_FindAndSelectCoolStaticMesh.jpg

新たなオブジェクトの定義を展開します。さらに、[Static Mesh Component] (静的メッシュコンポーネント) タブを開きます。小さな緑の矢印をクリックして、この静的メッシュをセットします。

AddingComponents_8_SetStaticMesh.jpg

PIE を起動することによって、アクタを視覚化します。

AddingComponents_9_PIE.jpg

ダウンロード


  • 以上のサンプルで使用したコンテンツは、 ここ からダウンロードすることができます。 (DynamicActorComponents.zip)