UDN
Search public documentation:

DevelopmentKitGemsAddingSpritesMeshesParticleEffectsCH
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

虚幻开发工具包主页 > 虚幻开发工具包管理 > 如何将平面实例、网格物体或粒子效果添加到 actor 中

如何将平面实例、网格物体或粒子效果添加到 actor 中


最后一次测试是在2011年3月份的UDK版本上进行的。
可以与PC和iOS兼容

概述


在虚幻引擎 2 中,actor 只可以渲染一个东西。这样,如果您希望通过几个网格物体或网格物体与粒子效果的混合体表示 actor,那么您将必须同步多个 actor。虚幻引擎 3 可以通过将这些任务划分为 actor 组件解决这个问题。Actor 组件是可以执行指定任务的 actor 中的对象。

这样,为了让 actor 将自己渲染成为一个静态网格物体,它必须添加一个 StaticMeshComponent。或者是一个 SkeletalMeshComponent。或者是一个 SpriteComponent。或者是一个 ParticleSystemComponent。等等。但是,它不一定指的是其中某一个。您希望在 actor 中有多少个 actor 都可以,同时它们还可以相互作用。

这篇精华内容将会告诉您如何在 actor 中使用 actor 组件。

相关主题

Unrealscript 方法


有两种方法可以在 Unrealscript 中添加 actor 组件。您可以在默认属性中将它们声明为子对象或在运行时过程中创建它们。在下面的示例中,使用 Static Mesh Component,但是您可以使用其他诸如 Skeletal Mesh Component、Sprite Component 或 Particle System Component 这样的可视组件替换它。

默认属性

如何在 Unrealscript 内的默认属性中添加一个静态网格物体子对象。

首先我们在类全局变量列表中声明一个静态网格物体组件变量。这可以确保这个类引用默认属性中定义的静态网格物体组件。

在默认属性中,我们可以创建一个子对象。在默认属性中创建子对象之后,将其添加到这个 actor 内的组件数组中。应该将所有组件子对象添加到组件数组,否则将不会使用它们。

MyActor.uc
class MyActor extends Actor;

// 显示在虚幻脚本和虚幻编辑器中
var() StaticMeshComponent StaticMesh;

defaultproperties
{
  // 声明子对象
  Begin Object Class=StaticMeshComponent Name=MyStaticMeshComponent
    StaticMesh=StaticMesh'EditorMeshes.TexPropPlane'
  End Object
  StaticMesh=MyStaticMeshComponent
  Components.Add(MyStaticMeshComponent)
}

如果我们希望重新定义一个之前在父代类中声明的子对象,那么我们要进行上述操作。唯一的变化是您不需要声明类参数。在您需要重新定义某些属性的时候可以使用它,在这里它是一个新的静态网格物体定义。

MySubActor.uc
class MySubActor extends MyActor;

defaultproperties
{
  // 重新定义子对象
  Begin Object Name=MyStaticMeshComponent
    StaticMesh=StaticMesh'EngineMeshes.Cube'
  End Object
  StaticMesh=MyStaticMeshComponent
  Components.Add(MyStaticMeshComponent)
}

如果您希望将之前声明的组件从您的子类中删除。

MySubActor.uc
class MySubActor extends MyActor;

defaultproperties
{
  Components.Remove(MyStaticMeshComponent) // Remove a specific actor component
  Components.Empty // 删除所有 actor 组件
}

运行时间

如何在运行时过程中将一个静态网格物体组件添加到 Unrealscript 的组件中。可以在任何函数中添加它,而不只是在 PostBeginPlay 中。您可能需要初始化 actor 组件或设置一些其他属性。

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
{
}

相关主题

虚幻编辑器方法


如何创建一个编辑器友好界面版本。该版本的不足是使用它的 actor 无法在不运行游戏的情况下初始化 actor 在编辑器中的样子。尽管仅仅通过运行 PIE 就可以缓解这个问题。

将编辑线和修改的实例变量添加到图元组件变量声明中需要进行以下两项操作。首先,编辑线变量修改器允许编辑器在属性窗口中编辑图元组件。其次,实例变量修改器指的是对象引用将会在生成 actor 的时候自动重新创建对象引用。

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

// 显示在虚幻脚本和虚幻编辑器中
var() const EditInline Instanced array<PrimitiveComponent> PrimitiveComponents;

function PostBeginPlay()
{
  local int i;

  // 检查图元组件数组看看我们是否需要向组件数组中添加任何组件。
  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 数组

打开 Content Browser 并点击 Actor Classes 选项卡。您的新 DynamicActorComponent 应该在 Common 群组内。选择它。

AddingComponents_0_SelectDynamicActorComponent.jpg

在世���中生成一个简单的 BSP 地板。记得向不会被正常照亮的世界或场景中添加一个光源 actor。

AddingComponents_1_AddBSPFloor.jpg

在您希望放置动态 actor 组件的世界视图中右击。它将会打开关联菜单。选择并点击“在此处添加 DynamicActorComponent Here”。

AddingComponents_2_AddDynamicActorComponent.jpg

创建它的时候,会自动选中它。

AddingComponents_3_AddedDynamicActorComponent.jpg

按下 F4 打开属性窗口。

AddingComponents_5_DynamicActorComponentProperties.jpg

否则,如果没有选中它,您通常会在 actor 列表中找到这个 actor。

AddingComponents_4_SearchForDynamicActorComponent.jpg

在“图元数组”数组中点击绿色加号。这样将会在数组内部创建一个新的元素。然后点击蓝色数组下拉菜单,然后选择 StaticMeshComponent 创建一个新的 StaticMeshComponent 对象。

AddingComponents_6_AddingNewPrimitiveComponent.jpg

在内容浏览器中查找并选择一个有趣的静态网格物体。

AddingComponents_7_FindAndSelectCoolStaticMesh.jpg

展开这个新的对象定义。然后找到 Static Mesh Component 项。按下绿色小箭头设置这个静态网格物体。

AddingComponents_8_SetStaticMesh.jpg

启动 PIE 使这个 actor 可见。

AddingComponents_9_PIE.jpg

下载


  • 下载上面示例中用到的内容。(DynamicActorComponents.zip)