沙盘引擎 (SEngine)

创意诞生沙盘世界,不止如此想象!

用户工具

站点工具


侧边栏

scripting:world:character

目录

📚 World/Character

📒 Event

📘 OnCharacterSpawn( character )

当角色被生成、被调用Respawn()时触发。

📘 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 )

📘 OnCharacterTriggerEntered( character, entity )

当角色附近有新的实体对象进入范围时调用。

实体对象:World/Entity类成员。

📘 OnCharacterTriggerExited( character, entity )

当角色附近有新的实体对象离开范围时调用。

实体对象:World/Entity类成员。

📘 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 ) 

📘 OnCharacterPropActionBefore( character, prop )

当角色手中道具即将被使用之前调用,此事件将关键决定当前道具是否允许使用。

注意:此事件拥有返回值,默认返回1,如果返回0则表示不允许本次使用。

function OnCharacterPropActionBefore( character: Character, prop: Prop ): int
function OnCharacterPropActionBefore( character, prop )
{
    if(prop == 0 && character.Health <= 50)
    {
        //当玩家血量小于50,且Prop==0时,拦截使用请求,不会触发任何效果
        return 0;
    }
 
    return 1; //此处可忽略,默认返回1(放行使用请求)
}

📘 OnCharacterPropAction( character, prop, hitPos )

当角色手中道具每次被使用一次时调用(例如:每次挥拳、开枪等)。

注意:hitPos参数表示当前物品最终造成伤害的位置,但投掷类物品等无法确定最终位置,所以此处将只返回起点位置。

function OnCharacterPropAction( character: Character, prop: Prop, hitPos: Vector ) 

📘 OnCharacterOutGround( character )

当角色离开地面时触发。

📘 OnCharacterFallGround( character )

当角色回到\接触地面时触发,可用character.FlyTime获取持续离地时间。

📘 OnCharacterDamage( character, damage, from, type, isImmunity )

当角色被尝试造成任何伤害时调用,如果造成伤害,会在OnCharacterHealthChange()之后调用。

有关伤害类型Type,请参考《世界资源实例汇总——伤害触发类型》

function OnCharacterDamage( character: Character, damage: int, from: Entity, type: int, isImmunity: bool )
/*
	character:角色实例
	damage:伤害值
	from:造成伤害的对象(可能null,例如碰撞)
	type:伤害类型
	isImmunity:是否免疫伤害(如果为true,则表示没有造成伤害,可能被Immunity\Group拦截了)
*/

📘 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.Alpha = 255; //int

📘 character.AlphaTime

设置角色透明度渐变时间,默认值是1.0

character.AlphaTime = 1.0; //float

📘 character.Angle

设置角色角度方向(Y轴),这是修改角色角度的主要方式。

character.Angle = 0.0; //0~360

📘 character.EulerAngle

设置角色欧拉角度。

根据引擎角色机制,修改除Y轴外其他角度时,常规情况下,X\Z轴会在短时间内自动Lerp重置到0.0(类似不倒翁)。

character.EulerAngle = Vector(0, 0, 0);

📘 character.Health

设置角色血量,如果为0则表示死亡。

character.Health = 100;

📘 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

获取角色身体高度,不同的角色可能有不同的高度,通常为头顶上方的高度(例如:人类默认2.0)。

可能用于获取头顶Bubble显示的高度。

character.BodyHeight: float

📘 character.FocusPos

设置或读取角色焦点坐标,如果目标角色已被玩家实时控制,则修改是没有意义的(除非角色静止状态)。

焦点坐标指的是角色目前正在关注的位置(及方向),被玩家控制时也表示玩家鼠标的世界位置。

character.FocusPos = Vector(0, 0, 0);

📘 character.TriggerDistance

设置角色触发检测范围,此属性将影响character.GetTrigger()相关检测距离,默认是1.5

character.TriggerDistance = 1.55; //float

📘 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 = 3.0; //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可请求一个随机皮肤(如存在)。

注意:需自行确保皮肤贴图及ID正确,理论上人类也可以穿上动物或外部导入皮肤(如存在),但同时也会导致贴图异常。

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.ActionContinue

获取(只读)角色单次行为(Action)次数(例如:连发武器的单次攻击连续次数、按下一次鼠标后Action次数)。

character.ActionContinue; //int

📘 character.IsSpawned

获取角色复活状态(是否未死亡)。

character.IsSpawned: bool

📘 character.IsSwimming

获取角色游泳状态,并非在水里状态(角色死亡后,即使在水里,也只会返回false)。

character.IsSwimming: 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.IsPassenger: bool

📘 character.Color

设置角色的主要颜色,此属性主要用于人形角色。

在人形角色实例修改时,将会修改目标角色的肤色(例如:肤色、褐色皮肤、僵尸色皮肤等)。

在其他角色实例修改时,可能修改为整体叠加颜色。

通常情况下,人形角色均为扩展型,多数动物为非扩展型(因为动物通常无法正常动作持有\使用道具和武器等)。

character.Color = Color(255, 204, 153);
character.Color1 = Color(255, 204, 153); //另一种属性映射,意义相同

📘 character.Color2

设置角色的次要颜色,此属性主要用于人形角色。

在人形角色实例修改时,将会修改目标角色的头发颜色

在其他角色实例修改时,可能不会有期望的效果。

character.Color2 = Color(255, 255, 0);

📘 character.Immunity

设定角色的免疫属性(可叠加位Flag)。

character.Immunity = 0; //int
 
//可根据具体需求叠加属性
//示例:无视子弹和爆炸伤害,其他正常
character.Immunity = 2 + 4; //或直接设为6
Type 说明
0
1 无视常规\挥动攻击
2 无视子弹攻击
4 无视爆炸伤害
8 无视碰撞(及掉落)伤害
16 无视火焰伤害

📘 character.HasAction

获取\设置角色是否为开始\正在行动

这是一个抽象概念,简单理解相当于让此角色”按住左键“(对于已被玩家控制的角色,此选项是只读意义的)。

character.HasAction = false; //bool

📘 character.HasFocus

获取\设置角色是否为开始\正在聚焦

这是一个抽象概念,简单理解相当于让此角色”按住右键“(对于已被玩家控制的角色,此选项是只读意义的)。

character.HasFocus = false; //bool

📘 character.CanSwim

设置角色是否可以游泳,默认为true,当前版本只有僵尸等少数角色默认false

注意:此属性将控制角色是否会被淹死,以及可能的AI控制逻辑。

character.CanSwim = true;

📘 character.Frozen

设置角色冻结状态,冻结后将无法移动、驾驶等操作。

character.Frozen = false;

📘 character.FlyMode

设置角色飞行模式(不是一种手机模式),角色将可以进行飞天悬空移动等。

注意:当角色死亡时,将自动取消飞行模式。

character.FlyMode = false;

📘 character.FlyTime

获取角色飞行\离开地面持续时间。

此属性从角色开始离地起计算,下次落地时清零。

举一反三:根据此属性可实现飞行时间、落地时间判定等功能。

character.FlyTime: float

📘 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;

📒 Static Function

📘 Character.Create()

生成一个新的角色实例,Type类型样式参考《世界资源实例汇总》

如果Type参数填写-1,则表示生成一个随机类型的角色(随机生物)。

function Character.Create( type: int, pos: Vector, angle: float = 0 ): Character
//在0点坐标处,建立一个类型为0的角色实例
Character.Create(0, Vector(0, 0, 0), 0);

📘 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 )

📘 character.Action()

使当前角色立即执行一次Action行为(例如:手中有武器,立即攻击一次)。

function character.Action()

📘 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.GetTriggerCount()

获取角色范围触发实例数量,此功能可获取某个角色character.TriggerDistance范围内的实例数量。

实体通常包括:角色、载具、拾取物、检查点等。

function character.GetTriggerCount(): int

📘 character.GetTrigger()

获取角色范围触发实例(根据索引),此功能可获取某个角色character.TriggerDistance范围内的实例对象。

function character.GetTrigger( index: int ): Entity
//遍历某个角色范围内所有实例对象,可用于扩展上车、拾取物品、使用等操作
for(let i=0;i<character.GetTriggerCount();i++)
{
    let target = character.GetTrigger(i);
    DLog("trigger[" + i + "]: " + target.GetType());
}

📘 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())。

function character.SetAnim( anim: int, loop: bool = false )
  • anim:播放动作ID
  • loop:是否循环播放(直到主动停止播放)

📘 character.SetExtend()

设置角色扩展属性(例如:人形角色的头部、头发),此功能更多只适用于人形角色

function character.SetExtend( type: index, index: int )
  • type:角色扩展类型(人形角色:0=头部\1=头发)
  • index:角色扩展索引

📘 character.GetExtend()

获取角色扩展属性。

function character.GetExtend( type: int ): int

📘 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) 说明
0 头部(支持动物角色)
1 身体(支持动物角色)
2 手持物品(关键)、右手位置
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 ): Vector
  • node:角色节点位置(索引)

scripting/world/character.txt · 最后更改: 2024/04/05 12:26 由 bibiboxs