智慧 + 毅力 = 无所不能

正确性、健壮性、可靠性、效率、易用性、可读性、可复用性、兼容性、可移植性...
随笔 - 991, 文章 - 0, 评论 - 27, 阅读 - 341万

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Component概念

Posted on   Bill Yuan  阅读(782)  评论(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为这个类。 

(评论功能已被禁用)
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
点击右上角即可分享
微信分享提示