智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...

导航

Component概念

Posted on 2015-05-07 09:44  Bill Yuan  阅读(779)  评论(0编辑  收藏  举报

转自:http://www.cnblogs.com/NEOCSL/archive/2012/05/06/2485227.html

1.总结

Component就是组建的意思,可以在DefaultProperties中加入类似,SpriteComponent,SkeletalMeshComponent,StaticMeshComponent,DynamicLightEnvironmentComponent丰富自己建立的类。

 

2.组建的一些属性

bHiddenGame=true

bHiddenEditor=true

bOwnerNoSee=true

 

3.组件示例

复制代码
defaultproperties

{

  begin object class=SpriteComponent name=Mysprite

  Sprite=Texture2D'EditorResources.S_Keypoint'

  HiddenGame=true

  end object

  Components.add(MySprite)



  begin object class=SkeletalMeshComponent name=MyMesh

  SkeletalMesh=SkeletalMesh
'CH_IronGuard_Male.Mesh.SK_CH_IronGuard_MaleA'

  //见下面的光照

  LightEnvironment=MyLight

  end object 

  Components.add(MyMesh)



  begin object class=DynamicLightEnvironmentComponent name=MyLight

  bCastShadow=false

  end object

  Components.add(MyLight)

}
复制代码

 

 4.不想继承组建,可以删除之

如果在子类中不想要父类的一些组建可以删除之

Components.Remove(MySprite)

 

5.组建同样可以引发一些错误

如果父类中已经在组建中使用了一个name,则重新为相同类组建命名相同名字会发生错误:

例如这里给

begin object class="SpriteComponent" name=Sprite

 就会发生错误,因为name=Sprite在前边的类中已经使用了,所以命名为Sprite比较合适。

 

 6.实时的改变组建,例如可以改变玩家的外观

如果想要实时的改变组建,一个方法便是将组建写入到函数中。或是使用Kismet的toggle来调节。

①使用Use函数来改变手电筒,在Pawn中

复制代码
var SpotLightComponent FlashLight;

exec funtion Use()

{

  if(AntPawn(Pawn)!=none)

  {

    //这将会是一个很巧妙地Toggle方法

    AntPawn(Pawn).FlashLight.SetEnabled(!AntPawn(Pawn).FlashLight.bEnabled);
  }
}

defaultproperties

{

  begin Object class=SpotLightComponent name=MySpotLight

  bEnabled=true

  Radius=1024

  Brightness=1.900

  end object 

  Components.add(MySpotLight)

  FlashLight=MySpotLight

}
复制代码

②kismet中使用Toggle来调整

复制代码
var StaticMeshComponent MyStaticMeshComponent;

var Material GreenMat,RedMat;



simulated function OnToggle(SeqAct_Toggle Action)

{

  if(Action.InputLinks[2].bHasImpulse)

{
  if(MyStaticMeshComponent.GetMaterial(0)==GreenMat)

  MyStaticMeshComponent.SetMaterial(0,RedMat);

  else

  MyStaticMeshComponent.SetMaterial(0,GreenMat);

}



 

defaultproperties

{

begin object class=StaticMeshComponent name=MyStaticMesh

StaticMesh=StaticMesh'UN_SimpleMeshes.TexPropCube_Dup'

Materials(0)=Material'EditorMaterials.WidgetMaterial_Y'

end object

Components.add(MyStaticMesh)

 

GreenMat=Material'EditorMaterials.WidgetMaterial_Y'

RedMat=Material'EditorMaterials.WidgetMaterial_X'

}
复制代码

 

连接Toggle的Target为这个类。