好的,我将根据你提供的 CharacterDef 更新文档,并新增 defaultWeapon 字段的说明。
角色定义 (CharacterDef)
CharacterDef 用于定义游戏中的各类角色实体,例如玩家、NPC、敌人等。它继承了基础的实体定义,并额外提供了内部维度(体内场景)和默认武器的配置。
根元素: <Define>
DefName: 必需,全局唯一的字符串,用于标识特定的角色定义。
Label: 可选,字符串,用于在游戏中显示的角色名称。
Description: 可选,字符串,对角色的详细描述。
参数说明
<attributes>
角色的基础属性集合。这是一个匿名定义,直接在 attributes 元素下定义各项属性。
字段说明:
<health>: 整数,角色的生命值,默认为10。<moveSpeed>: 浮点数,角色的移动速度,默认为1。<attack>: 整数,角色的攻击力,默认为1。<defense>: 整数,角色的防御力,默认为0。<attackSpeed>: 浮点数,角色的攻击速度(每次攻击的冷却时间),默认为2。<attackRange>: 浮点数,角色的攻击范围,默认为3。<attackTargetCount>: 整数,角色每次攻击能命中的目标数量,默认为1。
示例:
<attributes>
<health>100</health>
<moveSpeed>2.5</moveSpeed>
<attack>15</attack>
</attributes>
<drawingOrder>
定义角色在不同状态下(例如:闲置、行走、近战攻击、远程攻击、死亡)和不同朝向时的绘制方式。这是一个匿名定义,直接在 drawingOrder 元素下定义各种绘制节点。每个状态-朝向组合(如 idle_down、walk_up)都是一个 DrawNodeDef 类型。
字段说明:
<idle_down>,<idle_up>,<idle_left>,<idle_right>: 闲置状态下,角色朝向下方、上方、左方、右方时的绘制节点。<walk_down>,<walk_up>,<walk_left>,<walk_right>: 行走状态下,角色朝向下方、上方、左方、右方时的绘制节点。<meleeAttack_down>,<meleeAttack_up>,<meleeAttack_left>,<meleeAttack_right>: 近战攻击状态下,角色朝向下方、上方、左方、右方时的绘制节点。<rangedAttack_down>,<rangedAttack_up>,<rangedAttack_left>,<rangedAttack_right>: 远程攻击状态下,角色朝向下方、上方、左方、右方时的绘制节点。<death_down>,<death_up>,<death_left>,<death_right>: 死亡状态下,角色朝向下方、上方、左方、右方时的绘制节点。
示例:
<drawingOrder>
<idle_down>
<textures>
<li>Character_Maid_Walk_1</li>
</textures>
</idle_down>
<walk_down>
<FPS>5.0</FPS>
<textures>
<li>Character_Maid_Walk_0</li>
<li>Character_Maid_Walk_1</li>
<li>Character_Maid_Walk_2</li>
<li>Character_Maid_Walk_1</li>
</textures>
</walk_down>
<!-- 其他状态和朝向的绘制定义 -->
</drawingOrder>
<behaviorTree>
定义角色的行为逻辑树。这是一个匿名定义,直接在 behaviorTree 元素下定义行为树的根节点。其结构与 BehaviorTreeDef 一致。
示例:
<behaviorTree>
<className>ThinkNode_Selector</className>
<childTree>
<li>
<className>ThinkNode_Conditional</className>
<value>HasWeapon()</value>
<childTree>
<li>
<className>JobGiver_AttackJob</className>
</li>
</childTree>
</li>
<li>
<className>ThinkNode_Sequence</className>
<childTree>
<li><className>JobGiver_Wander</className></li>
<li><className>JobGiver_Idle</className></li>
</childTree>
</li>
</childTree>
</behaviorTree>
<affiliation>
指定角色的所属阵营。可以引用一个现有的 AffiliationDef 的 defName,或者直接在此处进行匿名定义。
作为引用:
<affiliation>player</affiliation> <!-- 引用名为 "player" 的 AffiliationDef -->
作为匿名定义:
<affiliation>
<defaultRelation>Friendly</defaultRelation>
<hostileFactions>
<li>monster</li>
</hostileFactions>
</affiliation>
<defaultWeapon>
定义角色在背包没有选择任何武器时,默认使用的武器。可以引用一个现有的 WeaponDef 的 defName,或者直接在此处进行匿名定义。
作为引用:
<defaultWeapon>BasicSword</defaultWeapon> <!-- 引用名为 "BasicSword" 的 WeaponDef -->
作为匿名定义:
<defaultWeapon>
<label>默认拳头</label>
<attack>1</attack>
<attackRange>0.8</attackRange>
<!-- 其他 WeaponDef 属性,具体字段取决于 WeaponDef 的定义 -->
</defaultWeapon>
<eventDef>
定义角色在特定事件发生时触发的行为。这是一个 EntityEventDef 类型的匿名定义。
示例:
<eventDef>
<onDeathEvents>
<li>
<workClass>CreateEffect</workClass>
<parameter>ExplosionEffect</parameter>
</li>
<li>
<workClass>DropItems</workClass>
<parameter>Gold,5-10</parameter>
</li>
</onDeathEvents>
</eventDef>
<colliderSize>
字符串,定义角色的碰撞体大小,通常为 "宽,高" 格式。例如 "1.0,1.0"。
<colliderPosition>
字符串,定义角色的碰撞体相对角色中心的位置偏移,通常为 "x,y" 格式。例如 "0.0,0.5"。
<insideDimensionDef>
引用一个 DimensionDef 的 defName,指定当角色进行“体内场景”战斗时所使用的维度定义。
示例:
<insideDimensionDef>CellularDimension</insideDimensionDef> <!-- 引用名为 "CellularDimension" 的 DimensionDef -->
示例
<Define>
<defName>maid</defName>
<label>女仆</label>
<description>一个可爱的女仆角色</description>
<!-- 角色基础属性的匿名定义 -->
<attributes>
<health>100</health>
<moveSpeed>2</moveSpeed>
<attack>10</attack>
<defense>5</defense>
<attackRange>1.5</attackRange>
</attributes>
<!-- 角色所属阵营,引用现有定义 -->
<affiliation>player</affiliation>
<!-- 角色默认武器,引用现有定义 -->
<defaultWeapon>MaidDuster</defaultWeapon>
<!-- 角色不同状态和朝向的绘制指令的匿名定义 -->
<drawingOrder>
<!-- 闲置状态 -->
<idle_up>
<textures>
<li>Character_Maid_Walk_37</li>
</textures>
</idle_up>
<idle_down>
<textures>
<li>Character_Maid_Walk_1</li>
</textures>
</idle_down>
<idle_left>
<textures>
<li>Character_Maid_Walk_13</li>
</textures>
</idle_left>
<idle_right>
<textures>
<li>Character_Maid_Walk_25</li>
</textures>
</idle_right>
<!-- 行走状态 -->
<walk_up>
<FPS>5.0</FPS>
<textures>
<li>Character_Maid_Walk_36</li>
<li>Character_Maid_Walk_37</li>
<li>Character_Maid_Walk_38</li>
<li>Character_Maid_Walk_37</li>
</textures>
</walk_up>
<walk_down>
<FPS>5.0</FPS>
<textures>
<li>Character_Maid_Walk_0</li>
<li>Character_Maid_Walk_1</li>
<li>Character_Maid_Walk_2</li>
<li>Character_Maid_Walk_1</li>
</textures>
</walk_down>
<walk_left>
<FPS>5.0</FPS>
<textures>
<li>Character_Maid_Walk_12</li>
<li>Character_Maid_Walk_13</li>
<li>Character_Maid_Walk_14</li>
<li>Character_Maid_Walk_13</li>
</textures>
</walk_left>
<walk_right>
<FPS>5.0</FPS>
<textures>
<li>Character_Maid_Walk_24</li>
<li>Character_Maid_Walk_25</li>
<li>Character_Maid_Walk_26</li>
<li>Character_Maid_Walk_25</li>
</textures>
</walk_right>
<!-- 近战攻击状态 -->
<meleeAttack_down>
<textures>
<li>testPawn_6</li>
</textures>
</meleeAttack_down>
<!-- 忽略其他攻击状态以作演示 -->
</drawingOrder>
<!-- 角色行为树的匿名定义 -->
<behaviorTree>
<className>ThinkNode_Selector</className>
<childTree>
<!-- 尝试攻击 -->
<li>
<className>ThinkNode_Sequence</className>
<childTree>
<li><className>JobNode_MoveToAttackRange</className></li>
<li><className>JobNode_AttackTarget</className></li>
</childTree>
</li>
<!-- 否则,漫无目的地游荡和闲置 -->
<li>
<className>ThinkNode_Sequence</className>
<childTree>
<li><className>JobNode_Wander</className></li>
<li><className>JobNode_Idle</className></li>
</childTree>
</li>
</childTree>
</behaviorTree>
<!-- 角色碰撞体信息 -->
<colliderSize>1.0,1.5</colliderSize>
<colliderPosition>0.0,0.75</colliderPosition>
<!-- 角色体内场景定义 -->
<insideDimensionDef>PlayerBodyDimension</insideDimensionDef>
</Define>