meta data for this page
📚 World/Character
📒 Event
📘 OnCharacterSpawn( character, isCreate )
当角色被生成、被调用Respawn()
时触发。
注意:如果此时调用character.Owner
将始终返回null
,因为玩家绑定角色不可能在OnCharacterSpawn
前绑定。
📘 OnCharacterDeath( character, reason )
当角色死亡状态时触发,有关Reason
原因,请参考《世界资源实例汇总——伤害触发类型》,例如通过代码character.Kill()
则reason == 0
。
function OnCharacterDeath( character: Character, reason: int )
📘 OnCharacterKill( killer, character, reason )
当角色被其他角色杀死时触发,有关Reason
原因,请参考《世界资源实例汇总——伤害触发类型》。
等待此事件执行完毕后,随后仍然会触发OnCharacterDeath()
事件。
function OnCharacterKill( killer: Character, character: Character, reason: int )
📘 OnCharacterPropChange( character, oldProp, newProp )
当角色手中道具(ID)发生更换时调用。
function OnCharacterPropChange( character: Character, oldProp: Prop, newProp: Prop )
📘 OnCharacterPropCountChange( character, oldCount, newCount )
当角色背包池总数(character.PropCount
)发生变化时调用。
📘 OnCharacterPropFocus( character, prop, state )
当角色手中道具HasFocus
状态(bool)切换时调用。
说明:表示开始\正在聚焦(true)及聚焦结束(false)。
function OnCharacterPropFocus( character: Character, prop: Prop, state: bool )
📘 OnCharacterPropAction( character, prop, hitPos )
当角色手中道具每次被使用一次时调用(例如:每次挥拳、开枪等)。
**注意:hitPos
参数表示当前物品最终造成伤害的位置,但投掷类物品等无法确定最终位置,所以此处将只返回起点位置。
补充:如果character.CanAction == false
,此事件将会在角色尝试发起攻击后立即触发(仅单次触发,即使是连续攻击道具),但不会发起攻击。
function OnCharacterPropAction( character: Character, prop: Prop, hitPos: Vector )
📘 OnCharacterOutGround( character )
当角色离开地面时触发。
📘 OnCharacterFallGround( character )
当角色回到\接触地面时触发,可用character.FlyTime
获取持续离地时间。
📘 OnCharacterDamage( character, damage, from, type, isImmunity, localHitPos )
当角色被尝试造成任何伤害时调用,如果造成伤害,会在OnCharacterHealthChange()
之后调用。
有关伤害类型Type,请参考《世界资源实例汇总——伤害触发类型》。
function OnCharacterDamage( character: Character, damage: int, from: Entity, type: int, isImmunity: bool ) /* character:角色实例 damage:伤害值 from:造成伤害的对象(可能null,例如碰撞) type:伤害类型 isImmunity:是否免疫伤害(如果为true,则表示没有造成伤害,可能被Immunity\Group拦截了) localHitPos:受击位置的本地坐标 */
📘 OnCharacterHealthChange( character, oldHealth, newHealth )
当角色血量发生任何改变时触发。
📘 OnCharacterArmourChange( character, oldArmour, newArmour )
当角色护甲值发生任何改变时触发。
📘 OnCharacterBaseState( character, baseState )
当角色基础状态发生改变时触发(例如:站立、行走、跳跃、驾驶、乘坐、死亡等),状态索引参考《世界资源实例汇总——角色基础状态》。
📘 OnCharacterFrozenState( character, isFrozen )
当角色冻结属性Frozen
发生改变时触发。
📘 OnCharacterSwimmingState( character, isSwimming )
当角色游泳属性IsSwimming
发生改变时触发。
📘 OnCharacterAnimPlayed( character, anim, loop )
当角色开始播放自定义动作时触发(通过character.SetAnim()
)。
function OnCharacterAnimPlayed( character: Character, anim: int, loop: bool )
📘 OnCharacterAnimStopped( character, anim, loop )
当角色停止播放自定义动作时触发(主动停止或播放结束)。
function OnCharacterAnimStopped( character: Character, anim: int, loop: bool )
📘 Vehicle交互事件
有关角色与载具的交互行为,具体内容请访问Vehicle文档查看。
📘 Pickup交互事件
有关角色与拾取物的交互行为,具体内容请访问Pickup文档查看。
📒 Property
📘 character.ID
获取角色序列ID,每个实例ID是唯一的。
当之前的实例被销毁后,空闲的靠前ID将会被后续新实例重新使用(对于特殊情况,UUID
是更合适的筛选选择)。
character.ID: int
📘 character.UUID
获取角色UUID,这是由一串较长的字符串组成的全局唯一文本ID(实例化时自动赋值,非持久化数据)。
character.UUID: string
📘 character.Name
设置或获取角色名称(默认为空字符),长度限制最多16
。
即使有玩家(Owner
)正在控制当前角色,也并不会返回玩家名称。
character.Name = ""; //string
📘 character.Pos
设置角色坐标。
character.Pos = Vector(0, 0, 0);
📘 character.Forward
获取角色正前方向量。
character.Forward: Vector
📘 character.World
设置角色实例世界ID(不同世界将不可视\不可交互)。
如果当前角色已绑定Owner(玩家)
,世界修改后将会因为世界不同而解除绑定,如果希望同步修改世界,请使用character.Owner.World
进行修改。
character.World = 0; //int
📘 character.Group
设置角色实例组(这是一个Entity基类通用属性)。
相同组的角色及对象无法造成伤害,默认值0
表示特殊组(无免伤和分组机制)。
character.Group = 0; //int
📘 character.Owner
获取(只读)控制当前角色的玩家对象(Player
),如果不存在则返回null
。
character.Owner; //Player
📘 character.Type
获取(只读)角色生物种类(例如:人类、僵尸、猪牛羊、其他动物等),具体种类参考《世界资源实例汇总——角色生物表格》。
character.Type; //int
📘 character.AnimalType
获取(只读)角色生物类型(例如:人形角色、地面生物、飞行生物、海洋生物等),具体类型参考《世界资源实例汇总》。
character.AnimalType; //int
📘 character.Alpha
设置角色透明度(0~255),默认值是255
。
注意:此方法不会修改手持物品透明度(character.PropAlpha
)。`
character.Alpha = 255; //int
📘 character.Angle
设置角色角度方向(Y轴),这是修改角色角度的主要方式。
character.Angle = 0.0; //0~360
📘 character.EulerAngle
获取角色欧拉角度,通常使用character.Angle
。
character.EulerAngle: Vector
📘 character.HAngle
设置角色本地偏移角度(水平),可模拟【Q|E】侧身等行为。
character.HAngle = 0.0; //float
📘 character.VAngle
设置角色本地偏移角度(前后),可模拟前后侧身等行为。
character.VAngle = 0.0; //float
📘 character.Health
设置角色血量,如果为0则表示死亡。
character.Health = 100;
📘 character.DefaultHealth
获取角色默认血量。
character.DefaultHealth: int
📘 character.Armour
设置角色护甲值(额外血量),默认为0
,如果被攻击时护甲>=0则优先扣除护甲。
此属性与Health
机制基本相同,适合有【额外生命值、护甲值】需求时使用。
character.Armour = 100;
📘 character.BaseDamage
设置角色基础攻击伤害值(手中无物品时攻击,可理解为拳头攻击力)。
属性默认值根据角色不同有所差异。
character.BaseDamage = 0; //from character defaultValue
📘 character.DamageMultiplier
设定角色受损(被攻击)伤害倍数,默认为1.0
。
character.DamageMultiplier = 1.0; //float
📘 character.BodyHeight
获取角色身体高度(本地偏移量),不同的角色类型可能有不同高度,通常为头部偏高一点的位置。
扩展:可能用于获取头顶Bubble
显示的高度。
character.BodyHeight: float
📘 character.FocusPos
设置或读取角色焦点坐标,如果目标角色已被玩家实时控制,则修改是没有意义的(除非角色静止状态)。
焦点坐标指的是角色目前正在关注的位置(及方向),被玩家控制时也表示玩家鼠标的世界位置。
character.FocusPos = Vector(0, 0, 0);
📘 character.AISurface
为当前角色开关独立寻路范围组件,开启后可解决Player+Stream
范围限制的问题,并且以当前对象自身作为寻路范围中心点,此属性默认关闭。
注意:玩家控制的角色不需要且无法开启,因为Player
本身就存在寻路范围组件。此属性每开启一个会对服务器主机性能产生一些影响,因此仍然建议AI寻路尽可能符合Stream规范,在特别需求的情况下,可以开启少数对象的此属性。
character.AISurface = false;
📘 character.AITarget
为当前角色设置一个AI目标对象,详情参考《CharacterAI》文档。
注意:当前属性被设置成为null
的值后,属性AITargetPos
将被设置为default
,两种Target属性只能同时存在一个。
character.AITarget = null; //Entity
📘 character.AITargetPos
为当前角色设置一个AI目标坐标,详情参考《CharacterAI》文档。
注意:当前属性被设置成为null
的值后,属性AITargetPos
将被设置为VECTOR_NULL
(常量,表示无意义\空坐标),两种Target属性只能同时存在一个。
character.AITargetPos = VECTOR_NULL; //Vector
📘 character.AIState
为当前角色设置一个AI状态(行为\性格),详情参考《CharacterAI》文档。
character.AIState = 0; //Enum
📘 character.AIMoveState
为当前角色设置一个AI移动行为状态(自动\行走\奔跑),详情参考《CharacterAI》文档。
character.AIMoveState = 0; //Enum
📘 character.AIDistance
为当前角色设置一个AI距离属性(不同AI状态有不同的意义),详情参考《CharacterAI》文档。
character.AIDistance = 32; //float
📘 character.Vehicle
与Character.SetVehicle()
作用基本相同,唯一的区别是不能设置具体的座位,这是一种补充写法。
let veh = Vehicle.Create(10, character.Pos, character.Angle); character.Vehicle = veh; //如果主驾驶没有被占用,则将此角色放置到驾驶位,否则无效果 //让玩家离开载具 character.Vehicle = null; //等同于调用了character.Eject()
📘 character.VehicleSlot
获取当前玩家所在载具乘客位置(如果不存在乘坐载具,则返回-1)。
顺序:0(驾驶位)、1+(乘客位置)。
character.VehicleSlot: int
📘 character.Gravity
设置角色自身额外物理重力,默认值0.0
。
此属性越高角色物理越向上,例如设置为0.1
获得持续向上推力。
character.Gravity = 0.0;
📘 character.Skin
设置角色皮肤\贴图,内置ID参考《世界资源实例汇总》,设置为-1
可请求一个随机皮肤(如存在)。
character.Skin = 0;
📘 character.Speed
设置角色移动速度。
character.Speed = 1; //此数值根据Character不同类型默认值而定,不是固定的
📘 character.SpeedMultiplier
设置角色移动速度倍数,默认为1.0
。
character.SpeedMultiplier = 1.0;
📘 character.AdditionSpeed
设置角色附加状态移动速度,默认情况下此速度应该比character.Speed
速度更快(奔跑)。
此属性也可以举一反三,根据需求更改比character.Speed
速度更慢,以实现走路\静步的效果。
character.AdditionSpeed = 1; //此数值根据Character不同类型默认值而定,不是固定的
📘 character.AdditionSpeedMultiplier
设置角色附加状态移动速度倍数,默认为1.0
。
character.AdditionSpeedMultiplier = 1.0;
📘 character.CrouchMultiplier
设置角色蹲下速度倍数(相对于character.Speed
),默认为0.5
。
character.CrouchMultiplier = 0.5;
📘 character.JumpMultiplier
设置角色跳跃高度倍数,默认为1.0
。
character.JumpMultiplier = 1.0;
📘 character.ActionContinue
获取(只读)角色单次行为(Action)次数(例如:连发武器的单次攻击连续次数、按下一次鼠标后Action次数)。
character.ActionContinue; //int
📘 character.IsAI
获取角色是否为NPC(AI)。
character.IsAI: bool
📘 character.IsPlayer
获取角色是否为玩家控制的角色。
character.IsPlayer: bool
📘 character.IsSpawned
获取角色复活状态(是否未死亡)。
character.IsSpawned: bool
📘 character.IsSwimming
获取角色游泳状态,并非在水里状态(角色死亡后,即使在水里,也只会返回false
)。
character.IsSwimming: bool
📘 character.IsCrouch
设置角色蹲下状态,通常仅为NPC角色设置属性,更多情况下是只读取的。
character.IsCrouch = false; //bool
📘 character.IsInWater
获取角色是否在水中(角色死亡后,即使没有游泳,也会返回true
)。
character.IsInWater: bool
📘 character.IsOnFire
获取角色是否正在被燃烧。
character.IsOnFire: bool
📘 character.IsDriver
获取角色是否在主驾驶载具(仅主驾驶有效,乘员状态将返回false
)。
character.IsDriver: bool
📘 character.IsPassenger
获取角色是否在乘坐载具(即使角色正在主驾驶,也会返回true
)。
character.IsPassenger: bool
📘 character.IsExtend
获取角色是否为扩展型角色(拥有高级骨骼的角色,可使用道具、工具、武器等)。
通常情况下,人形角色均为扩展型,多数动物为非扩展型(因为动物通常无法正常动作持有\使用道具和武器等)。
character.IsExtend: bool
📘 character.Color
设置角色的主要颜色,此属性主要用于人形角色。
在人形角色实例修改时,将会修改目标角色的肤色(例如:肤色、褐色皮肤、僵尸色皮肤等)。
在其他角色实例修改时,可能修改为整体叠加颜色。
通常情况下,人形角色均为扩展型,多数动物为非扩展型(因为动物通常无法正常动作持有\使用道具和武器等)。
character.Color = Color(255, 204, 153);
📘 character.Immunity
设定角色的免疫属性(可叠加位Flag),设置为-1
自动识别完全免疫(所有Flag相加后的结果)。
character.Immunity = 0; //int //可根据具体需求叠加属性 //示例:无视子弹和爆炸伤害,其他正常 character.Immunity = 2 + 4; //或直接设为6
📘 character.HasAction
获取\设置角色是否为开始\正在行动。
这是一个抽象概念,简单理解相当于让此角色”按住左键“(对于已被玩家控制的角色,此选项是只读意义的)。
character.HasAction = false; //bool
📘 character.FrozenAction
设置角色锁定行动开关HasAction
,当功能被锁定后,除引擎内置强制事件外(例如:角色死亡),无法修改HasAction
属性(即使手持物品)。
注意:如果希望控制Action执行,可能要找的是character.CanAction
,而非此方法。
character.FrozenAction = false; //bool
📘 character.HasFocus
获取\设置角色是否为开始\正在聚焦。
这是一个抽象概念,简单理解相当于让此角色”按住右键“(对于已被玩家控制的角色,此选项是只读意义的)。
character.HasFocus = false; //bool
📘 character.FrozenFocus
设置角色锁定聚焦开关HasFocus
,当功能被锁定后,除引擎内置强制事件外(例如:角色死亡),无法修改HasFocus
属性(即使手持物品)。
character.FrozenFocus = false; //bool
📘 character.FocusMode
设置角色专注聚焦模式开关,此属性开启后角色将始终保持(仅)聚焦动作,此功能更适合用于第一人称游戏使用。
注意:此模式不会强制锁定HasFocus
,同时也不会修改默认移动速度,仅强制锁定聚焦动作。
character.FocusMode = false; //bool
📘 character.StandAction
设置角色强制站立Action开关,当属性开启后,角色在Action时将被强制设为站立状态(禁止移动攻击),此属性默认关闭。
扩展引导:当角色手持道具发生改变时,检测Prop.ID
是否为希望站立攻击的道具,并if | else
激活&取消此属性。
character.StandAction = false; //bool
📘 character.DriveAction
设置角色载具驾驶&乘坐Action开关,当属性开启后,角色乘坐载具时可进行Action或射击,此属性默认开启。
注意:角色在乘坐载具攻击时,不会对自身载具造成伤害(不包括爆炸类道具)。
character.DriveAction = true; //bool
📘 character.CanAction
设置角色是否可以发起攻击,默认为true
。
扩展引导:此方法可用于实现武器子弹不足时无法射击等功能。
注意:此属性被设置为false
后仍然会触发OnCharacterPropAction
(仅单次触发,即使是连续攻击道具),因此可提前判断character.CanAction
作不同条件处理。
character.CanAction = true;
📘 character.CanSwim
设置角色是否可以游泳,默认为true
,当前版本只有僵尸等少数角色默认false
。
注意:此属性将控制角色是否会被淹死,以及可能的AI控制逻辑。
character.CanSwim = true;
📘 character.Shadow
设置角色阴影开关,默认开启true
。
character.Shadow = true;
📘 character.Frozen
设置角色冻结状态,冻结后将无法移动、驾驶等操作(被动操作除外)。
character.Frozen = false;
📘 character.FlyMode
设置角色飞行模式(不是一种手机模式),角色将可以进行飞天移动。
注意:当角色死亡、乘坐或离开载具,将自动取消飞行模式,同时无法激活。
character.FlyMode = false;
📘 character.FlyTime
获取角色飞行\离开地面持续时间。
此属性从角色开始离地起计算,下次落地时清零。
举一反三:根据此属性可实现飞行时间、落地时间判定等功能。
character.FlyTime: float
📘 character.SidelingControl
设置角色侧身控制开关(允许玩家Q|E
向左右侧身,适合于射击等玩法),默认true
。
character.SidelingControl: bool
📘 character.Pickup
获取角色当前正在触发的拾取物,如无则返回null
。
character.Pickup: Pickup
📘 character.Checkpoint
获取角色当前正在触发的检查点,如无则返回null
。
character.Checkpoint: Checkpoint
📘 character.VehicleTime
获取角色在载具状态持续时间(每次上车、切换乘客位置都将重置),如未使用载具则返回-1
。
character.VehicleTime: float
📘 character.PickupTime
获取角色在当前拾取物停留的持续时间(每次触碰拾取物都将重置),如离开拾取物则返回-1
。
character.PickupTime: float
📘 character.CheckpointTime
获取角色在当前检查点停留的持续时间(每次进入检查点都将重置),如离开检查点则返回-1
。
character.CheckpointTime: float
📘 character.Prop
获取角色当前正在使用的Prop物品对象,此属性无法直接赋值(例如无法prop = null
,同时也不应该new或赋值其他对象),但可以修改其内部属性。
正确操作角色Prop背包的方法是使用character.SetProp()
,切换角色物品槽的方法是使用character.PropSlot
,而不是直接修改此属性。
character.Prop: Prop
📘 character.PropSlot
设置角色当前正在使用的物品槽,默认为0
,修改此属性是“切换背包物品”的正确方法。
character.PropSlot = 0; //0~PropCount
📘 character.PropCount
设置角色当前背包物品槽最大数量(可理解为背包格子数量),默认为0
。
通常情况下,如果想开始为一个角色创建背包系统,应该首先确保PropCount设置为合适的数量,或考虑使用AddProp()
方法动态调整。
character.PropCount = 0;
📘 character.PropAlpha
设置角色手持物品透明度,默认值是255
。
character.PropAlpha = 255;
📒 Static Function
📘 Character.Create()
生成一个新的角色实例,Type
类型样式参考《世界资源实例汇总》。
如果Type
参数填写-1
,则表示生成一个随机类型的角色(随机生物)。
function Character.Create( type: int, pos: Vector, angle: float = 0, skin: number ): Character
//在0点坐标处,建立一个类型为0的角色实例 Character.Create(0, Vector(0, 0, 0), 0);
type
:生物类型pos
:坐标位置angle
:角度skin
:皮肤ID(人形角色更多使用)randomStyle
:是否随机样式(执行character.RandomStyle()
)
📘 Character.Find()
寻找一个角色实例(通过ID),不存在则返回null
。
function Character.Find( id: int ): Character
📘 Character.FindByUUID()
寻找一个角色实例(通过UUID),不存在则返回null
。
function Character.Find( uuid: string ): Character
📘 Character.GetCount()
获取当前所有存在角色数量。
function Character.GetCount(): int
📘 Character.Get()
获取当前存在的指定索引角色,通常搭配GetCount()
遍历使用。
function Character.Get( index: int ): Character
📒 Function
📘 character.Remove()
销毁当前角色实例。
function character.Remove()
📘 character.Damage()
以标准方式攻击当前角色实例,有关Reason
原因,请参考《世界资源实例汇总——伤害触发类型》。
注意:此方法受到GameRule("character_damagemultiplier")
规则影响(默认值0.5
,因此character.Damage(50)
则只会受到25伤害),如果希望直接改变血量,请考虑使用character.Health
属性直接赋值。
function character.Damage( damage: int, from: Entity = null, reason: int = 0, localHitPos: Vector = Vector(0, 0, 0) )
📘 character.RandomStyle()
随机当前角色样式(配色character.Color1 | characterColor2
)。
此方法主要用于人形角色,对于其他类型角色更多是模型随机叠加颜色。
function character.RandomStyle()
📘 character.Action()
使当前角色立即执行一次Action
行为(例如:手中有武器,立即攻击一次)。
function character.Action()
📘 character.Jump()
使当前角色立即执行一次Jump
跳跃行为,因为连续跳跃间隔及其他冻结等限制,跳跃指令并非每次都执行成功。
function character.Jump( multiple: float = 1.0 )
📘 character.AddForce()
增加一个当前对象的物理作用力,默认为本地坐标系(根据参数isLocal
)。
在飞行FlyMode
等逻辑冲突模式下,此方法不会生效。
function character.AddForce( force: Vector, isLocal: bool = true )
let npc = character.Create(...); npc.AddForce( Vector(0, 3, 0) ); //角色立即向上冲刺一段距离(y)
📘 character.AIMove()
此方法已被取消,请使用AITarget
属性等方式AI寻路。
让角色AI寻路到某个坐标,如果角色不在任何Stream范围内,或者无法到达指定位置,将会返回false
。
此操作仅用于坐标寻路,不执行AIState\AITarget
等机制逻辑。
function character.AIMove( pos: Vector, onComplete: Action = null ): bool
let chara = ...; chara.AIMove(Vector(10, 0, 5), () => { DLog("NPC到达了目标位置"); });
📘 character.Recover()
恢复当前角色(恢复最大血量),如果角色已经死亡则自动调用character.Respawn()
。
function character.Recover()
📘 character.Kill()
杀死当前角色(仅死亡,不会自动销毁)。
死亡后的角色必须通过character.Respawn()
才能正常复活。
function character.Kill()
📘 character.Fire()
开始燃烧当前角色。
如果参数time < 0
则表示持续燃烧。
function character.Fire( time: float )
📘 character.FireOver()
停止燃烧当前角色。
function character.FireOver()
📘 character.Respawn()
复活并重置当前角色。
function character.Respawn()
📘 character.Eject()
使角色离开当前载具,如没有驾驶\乘坐载具则无效果。
也可以使用character.Vehicle = null
有相同的效果。
function character.Eject()
📘 character.SetVehicle()
使角色进入一辆载具的某个驾驶\乘客位置,Slot=0
为驾驶位。
此方法和Vehicle.SetOccupant
作用相同。
function character.SetVehicle( vehicle: Vehicle, slot: int ): bool //是否进入成功
📘 character.EnterVehicle()
使角色进入一辆载具的自动靠前位置(优先顺序:驾驶位>乘客位1>乘客位2>乘客位N+1)。
function character.EnterVehicle( vehicle: Vehicle ): bool //是否进入成功
📘 character.ResetProp()
重置\刷新当前角色正在使用的物品对象,通常情况下不需要调用此方法。
function character.ResetProp()
📘 character.SetProp()
设置当前角色指定物品槽的物品对象,使用此功能是“设置背包物品”的正确方法。
function character.SetProp( slot: int, id: int, amount: int = 1, data: any = null )
//在物品槽索引3的位置,设置为ID10物品x1,同时为其设定自定义属性Test = 1.0 character.PropCount = 10; //提前设置好背包格子数量,否则会错误 character.SetProp(3, 10, 1, {Test: 1.0});
📘 character.GetProp()
获取当前角色指定物品槽的物品对象,使用此功能是“获取指定背包槽物品”的正确方法。
对于角色实例来说,获取的物品对象永远不会为null
,指定槽不存在时会返回默认物品(相当于透明的拳头,ID0
)。
注意:Prop
是一个扩展类型,具体属性参考【World/Prop】。
function character.GetProp( slot: int ): Prop
📘 character.AddProp()
尝试为当前角色加入物品对象到物品槽,使用此功能是“加入背包物品”的正确方法。
function character.AddProp( id: int, amount: int = 1, data: any = null, forceAll: bool = false, autoSize = false ): int
- id:物品ID
- amount:物品数量
- data:物品自定义属性
- forceAll:是否强制必须全部装下(开启此参数后,如果amount > 1,只有剩余背包能全部装下物品时才正常加入到背包,否则不放置任何)
- autoSize:是否自动填充背包PropCount(如果背包大小已经不能满足本次加入),否则背包溢出时可能无法加入到背包
- [return]:正常加入(返回0),非强制且无法全部放入(返回剩余闲置数量),未成功加入任何(返回-1)
📘 character.AppendProp()
尝试为当前角色加入物品对象到单独物品槽,与AddProp()
的区别是:此方法无论前提条件,只使用最新的1个物品槽(不判断是否能完全放下,如果有叠加溢出,只会赋值数量到最大值)。
function character.AppendProp( id: int, amount: int = 1, data: any = null, autoSize = false ): int
- id:物品ID
- amount:物品数量
- data:物品自定义属性
- autoSize:是否自动填充背包PropCount(背包全部已满,尝试自动增加1格背包)
- [return]:正常加入(返回0),非强制且无法全部放入(返回剩余闲置数量),未成功加入任何(返回-1)
📘 character.SetAnim()
设置\播放一段当前角色的自定义动作(例如:挥手、躺下、坐下等),详细动作ID参考《世界资源实例汇总》。
注意:如果希望主动停止\中断播放动作,使用默认参数即可(character.SetAnim(-1)
)。
function character.SetAnim( anim: int = -1, loop: bool = false )
- anim:播放动作ID(-1表示停止播放)
- loop:是否循环播放(直到主动停止播放)
📘 character.SetRemodel()
绑定角色重写模型对象。
此方法允许将当前角色替换为一个Model
对象,与SetNodeExtend(0)
不同的是,此方法会将模型变为真正意义上的角色,并且继承碰撞及伤害。
重写模型对象同时只能绑定一个,如果有新的对象被绑定则会解绑旧对象。
(参数设置为null
可解除绑定)
function character.SetRemodel( model: Model )
📘 character.GetRemodel()
获取角色重写模型对象。
function character.GetRemodel(): Model
📘 character.SetNodeExtend()
绑定一个模型对象(Model
)到角色指定节点位置(原点本地坐标),通过此功能可实现很多扩展操作,此功能更多只适用于人形角色。
注意:同一个节点位置下,同时最多只能存在一个模型对象,如果有上个对象则会解除上次绑定(并非销毁模型对象)。
补充:当模型对象被绑定后,想要【读写】位置、角度、缩放(Pos | Angle | Scale
)等信息时,坐标空间默认为【本地空间】而不是“世界空间”。
function character.SetNodeExtend( node: int, model: Model )
- node:角色节点位置(索引)
- model:要绑定的模型对象(可为
null
,相当于解除绑定)
//给玩家【手中的物体】附加一个红色的射灯(类似:红外线瞄准灯光) let chara = xxxxx; let model = Model.Create(1, chara.Pos); character.SetNodeExtend(2, model); model.Enum = 1; model.Color = Color(255, 0, 0); model.Range = 40; model.Intensity = 2;
节点位置(Node) | 说明 |
---|---|
-1 | 角色自身节点(不受动作影响) |
0 | 头部(支持动物角色) |
1 | 身体(支持动物角色) |
3 | 手持物品位置(Prop) |
4 | 左手位置 |
5 | 右手位置 |
6 | 左脚位置 |
7 | 右脚位置 |
📘 character.RemoveNodeExtend()
解除绑定一个角色节点位置的模型对象(Model
)。
注意:解除绑定并不会销毁模型对象,只是将其解除与角色的绑定及位置同步关系。
function character.RemoveNodeExtend( node: int )
- node:角色节点位置(索引)
📘 character.GetNodeExtend()
获取角色指定节点位置绑定的模型对象(Model
),如果不存在绑定则返回null
。
function character.GetNodeExtend( node: int ): Model
- node:角色节点位置(索引)
📘 character.GetNodeExtendPos()
获取角色指定节点位置的当前世界坐标,如果不存在节点则返回Vector(0, 0, 0)
。
function character.GetNodeExtendPos( node: int, isLocal: bool = false ): Vector
- node:角色节点位置(索引)
- isLocal:是否获取本地空间结果