(转载)虚幻引擎3--Actor 组件

发布时间:2016-12-6 8:22:40编辑:www.fx114.net 分享查询网我要评论
本篇文章主要介绍了"(转载)虚幻引擎3--Actor 组件 ",主要涉及到(转载)虚幻引擎3--Actor 组件 方面的内容,对于(转载)虚幻引擎3--Actor 组件 感兴趣的同学可以参考一下。

概述

在虚幻引擎中,所有游戏相关的物体都是从基类Actor继承而来。在之前一代的虚幻引擎中,基类Actor是非常重量级的,不论Actor的属性行为是什么,任何从Actor衍生而来的类将会继承它的所有属性。

Actor组件通过定义多个轻量级组件来解决这个问题,轻量级组件用于为Actor渲染和碰撞的模块化扩展提供接口。

通过使用在虚幻引擎2中先前定义的子对象语法的修改版本,我们把组件原型定义在类的默认属性中。命名原型,并使得一个子类继承该原型。子类可以覆盖原型的某些或所有默认属性。要想使用组件,可以通过默认属性把它添加到Actor的组件(Component)数组中。在默认属性中引用的组件原型是和Actor类一同进行实例化的。默认的属性改变可以被传递到关卡中保存的Actor类的所有现有实例上。

使用Actor组件

ActorComponent 对 PrimitiveComponent

ActorComponent(Actor组件)是一个可以附加到世界中的一个actor上的对象。

PrimitiveComponent(图元组件)是一个可以进行渲染和碰撞的ActorComponent(Actor组件)。

添加一个组件

如果任何实例化的Actor具有SpriteComponent,那么SpriteComponent将随同那个Actor一同进行实例化(除非子类从它的数组中删除了Sprite)。

组件数组引用的组件是和Actor的位置相绑定的。

实例:

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一同进行实例化。

组件模板

组件模板用于声明actor类的默认组件。一个组件模板是一个命名对象,它包含了在类的默认属性中的一个组件的默认属性。当实例化那个类时,则它所引用的组件模板也会随同它进行实例化。

组件模板将会被它们声明所在类的子类所继承。每个子类可以覆盖继承的模版的独立的属性。

组件模板的实例是相对于模版的默认属性来进行实例化的。这使得当把actor组件实例放置到关卡中时,它仍然可以从模板属性中接受改变。

创建组件模板

组件模板在类的默认属性中进行声明:

Begin Object class="SpriteComponent" Name=Sprite   Sprite=Texture2D'EngineResources.S_Actor'   HiddenGame=True   AlwaysLoadOnClient=False   AlwaysLoadOnServer=FalseEnd Object

实例化及附加组件模板

除非组件模板被一个类的默认属性所引用,否则它将不会随同那个类进行实例化;并且除非一个actor组件在actor的组件数组中,否则那个actor组件将不能附加到那个actor上。您可以把actor组件模板和actor类一同进行实例化,并通过在默认属性中把组件模板添加到actor的组件数组中来自动地把实例化的组件附加到actor实例上。

Begin Object class="SpriteComponent" Name=Sprite   // Sprite组件属性在这里进行赋值。End ObjectComponents.Add(Sprite)

改变从父类继承而来的组件模板的属性

组件模板将会被最初声明该模板的类的子类所继承。子类可以覆盖继承的模板上的单独的属性。这个实例从Actor类继承了Sprite模板,并仅修改了spirte贴图属性:

Begin Object Name=Sprite   Sprite=Texture2D'EngineResources.S_SkyLight'End Object

动态地创建组件

要想动态地创建组建的实例,请使用UnrealScript的new操作符,并调用actor 的AttachComponent方法来把新的组件附加到actor 上。

New操作符的参数是在其中创建组件的外部容器对象;这应该是组件要附加到的actor。这样确保了组件的Outer(外部容器)引用不会再没有对要附加到的actor上进行垃圾回收之前不必要地阻止对另一个actor进行垃圾回收。

local StaticMeshComponent NewComponent;NewComponent = new(self) class'StaticMeshComponent';// 在这里设置静态网格物体组件的属性。AttachComponent(NewComponent);

要想分离或释放您先前附加的组件,请使用actor的DetachComponent方法。一旦到这个组件的引用不存在了,那么将会对它进行垃圾回收。

一般的PrimitiveComponent(图元组件)选项


上一篇:Linux内核版本类型
下一篇:Maven命令行使用:mvn clean package(打包)

相关文章

相关评论

本站评论功能暂时取消,后续此功能例行通知。

一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!

二、互相尊重,对自己的言论和行为负责。

好贷网好贷款