一.GameEntity游戏实例
<1.通用GameEntity,梯子,椅子,攻城云梯,战车等定义为GameEntity,一个GameEntity由若干GameEntityComponets组成,例如攻城云梯的轮子是一个独立Component,支架是一个独立Component,
GameEntity = GameEntityComponent1 + GameEntityComponent2 +GameEntityComponent3
<2.定制化GameEntity-Agent
Agent.AgentVisuals = MeshComponent + ItemComponent + SkinedMeshComponent
获取AgentComponents
MBReadOnlyList<AgentComponent> list = Mission.MainAgent.Components;
获取ItemComponents
Equipment equipment = Mission.MainAgent.SpawnEquipment;
EquipmentElement equipmentElement = equipment.GetEquipmentFromSlot(EquipmentIndex.Weapon2);
获取Agent骨骼Skeleton
Skeleton skelton = Mission.MainAgent.AgentVisuals.GetSkeleton();
获取AgentVisual对应components
GameEntityComponent com = Mission.MainAgent.AgentVisuals
.GetEntity().GetComponentAtIndex(1, GameEntity.ComponentType.Light);
添加GameEntity至Agent
sbyte boneIndex = Skeleton.GetBoneIndexFromName
(Mission.MainAgent.AgentVisuals.GetSkeleton().GetName(), "head");
Mission.MainAgent.AgentVisuals
.AddPrefabToAgentVisualBoneByRealBoneIndex("ship_a", boneIndex);
<3.定制化GameEntity-Item
Items = ArmorComponent + HorseComponent + TradeItemComponent
+ WeaponComponent + BannerComponent
#从XML文件中加载ItemObject
ItemObject itemObject = MBObjectManager
.Instance.GetObject<ItemObject>("guarded_padded_vambrace");
#获取Armor/horse等相关属性
int armArmor = itemObject.ArmorComponent.ArmArmor;
二.GameEntity预制&动态创建
1.在自己的MOD下创建Prefabs文件夹
2.创建XML文件,配置Prefabs,添加GameEntity
<Prefabs>
<game_entity name="empire_castle_keep_a_l2" old_prefab_name="" occlusion_body_name="bo_occ_empire_castle_keep_a_l2">
<transform position="0.000, 0.000, 0.000" rotation_euler="0.000, 0.000, 0.000"/>
<physics shape="bo_empire_castle_keep_a_l2" mass="1.000"/>
<components>
<meta_mesh_component name="empire_castle_keep_a_l2"/>
</components>
</game_entity>
</Prefabs>
3.在Mission中初始化自己的GameEntity
GameEntity ship = GameEntity
.Instantiate(Mission.Scene, "ship_a", Mission.MainAgent.Frame);
三.GameEntityComponent
1.GameEntityComponent种类:
[EngineStruct("rglEntity_component_type", false)]
public enum ComponentType : uint
{
MetaMesh,
Light,
CompositeComponent,
ClothSimulator,
ParticleSystemInstanced,
TownIcon,
CustomType1,
Decal
}
2.GameEntityComponent销毁,创建,使用等事件统称为ScriptComponentBehavior
<1.常用ScriptComponetBehavior
可使用Behavior:UsableMachine
可站立前进Behavior:StandingPoint
攻城武器Behavior:SiegeWeapon
大地图声音Behavior: <script name="sound_emitter">
大地图区域Behavior: <script name="path_converger">
<2.在对应GameEntity中添加<script></script>,添加属于自己的ScriptComponentBehavior
<game_entity name="siege_ladder_7m_spawner" old_prefab_name="">
<transform position="0.000, 0.000, 0.000" rotation_euler="0.000, 0.000, 0.000"/>
<physics mass="1.000"/>
<scripts>
<script name="SiegeLadderSpawner">
<variables>
<variable name="UpperStateRotationDegree" value="-19.000"/>
</variables>
</script>
</scripts>
</game_entity>
<3.重写ScriptComponentBehavior的OnInit等方法,实现自己的相关功能
public class SiegeLadderSpawner : ScriptComponentBehavior
{
protected override void OnPreInit()
{
base.OnPreInit();
}
protected override void OnInit()
{
}
}