🎁
🏆 导航菜单
🎪 扩展内容
🎯 沙盘引擎文档
🕹️ 文章及书籍&教程
🎖️ 外部的链接
🎁
🏆 导航菜单
🎪 扩展内容
🎯 沙盘引擎文档
🕹️ 文章及书籍&教程
🎖️ 外部的链接
载具Vehicle
是世界玩法中的关键部分,使用相关API及事件可以高度自定义载具功能。
当载具被生成、被调用
Respawn()
时触发。
当载具爆炸、被摧毁时触发,有关
Reason
原因,请参考《世界资源实例汇总——伤害触发类型》,例如通过代码vehicle.Kill()
则reason == 0
。
当角色进入载具(或切换位置)时触发。
当角色离开载具时触发。
当载具被尝试造成任何伤害时调用,如果造成伤害,会在
OnVehicleHealthChange()
后调用。有关伤害类型Type,请参考《世界资源实例汇总——伤害触发类型》。
function OnVehicleDamage( vehicle: Vehicle, damage: int, from: Entity, type: int, isImmunity: bool ) /* vehicle:载具实例 damage:伤害值 from:造成伤害的对象(可能null,例如碰撞) type:伤害类型 isImmunity:是否免疫伤害(如果为true,则表示没有造成伤害,可能被Immunity\Group拦截了) */
当载具血量发生任何改变时触发。
获取载具序列ID(并非载具模型ID),每个实例ID是唯一的。
当之前的实例被销毁后,空闲的靠前ID将会被后续新实例重新使用(对于特殊情况,
UUID
是更合适的筛选选择)。
vehicle.ID: int
获取载具UUID,这是由一串较长的字符串组成的全局唯一文本ID(实例化时自动赋值,非持久化数据)。
vehicle.UUID: string
获取载具模型ID(载具标识)。
vehicle.Model: int
获取载具模型类型(如:汽车、船、飞行器等)。
vehicle.Type: int
设定载具位置坐标。
vehicle.Pos = Vector(0, 0, 0); //Vector
获取载具正前方向量。
vehicle.Forward: Vector
设置载具实例世界ID(不同世界将不可视\不可交互)。
vehicle.World = 0; //int
设置载具实例组(这是一个Entity基类通用属性)。
相同组的载具及角色对象等无法造成伤害(包括攻击、撞击等),默认值
0
表示特殊组(无免伤和分组机制)。
vehicle.Group = 0; //int
设定载具方向角度,而不是三维角度。
vehicle.Angle = 0; //float
设定载具三维角度。
vehicle.EulerAngle = Vector(0, 0, 0); //Vector
设定载具生命值损耗。
vehicle.Health = 1000; //Vector
设定载具的免疫属性(可叠加位Flag),同步修改
VehicleData
。
vehicle.Immunity = 0; //int //可根据具体需求叠加属性 //示例:无视子弹和爆炸伤害,其他正常 vehicle.Immunity = 2 + 4; //或直接设为6
Type | 说明 |
---|---|
0 | 无 |
1 | 无视常规\挥动攻击 |
2 | 无视子弹攻击 |
4 | 无视爆炸伤害 |
8 | 无视碰撞伤害 |
16 | 无视火焰伤害 |
设定载具受损(被攻击)伤害倍数,默认为
1.0
。
vehicle.DamageMultiplier = 1.0; //float
设定载具的灯光级别。
vehicle.Light = 0; //int
Type | 说明 |
---|---|
0 | 关闭 |
1 | 开启灯光 |
2 | 全部灯光(远光灯) |
设定载具的主要灯光颜色。
vehicle.LightColor = Color(255, 255, 255); //Color
设定载具的特殊灯光开关(如:出租车头顶灯)。
此选项仅在部分载具生效,具体取决于载具Json是否包含
Additions/Type=6
项目(如:出租车)。此选项拥有一个游戏规则
vehicle_autoflarelight
,可开关载具生成时是否自动激活此属性,默认开启。
vehicle.FlareLight = true; //bool
设定载具的喇叭开关。
vehicle.Horn = false; //bool
设定载具的警报开关(如:特殊载具警报)。
此选项仅在部分载具生效,具体取决于载具Json是否包含
Audios/Alarm!=0
声音设定(如:消防车)。
vehicle.Alarm = false; //bool
设置载具引擎启动状态,默认关闭,当有玩家进入驾驶位后自动激活,并且不会在下车时主动取消。
vehicle.Engine = false; //bool
设置载具上锁状态,默认关闭,此属性目前只有逻辑作用,没有实际的功能。
vehicle.Locked = false; //bool
设定载具的模型颜色。
此选项仅在部分载具生效,具体取决于载具Json是否包含
Extend/ColorNodes
颜色节点注册(注册:可改变颜色的模型节点;载具模型导入时,可改变颜色的子节点需要和载具本分割出来,并将可变颜色的子节点注册至此)。例如:导入的模型
xxx.gltf
拥有子节点xx1
和xx2
,其中xx2
是在建模工具内单独分割出来的节点,此子节点允许由vehicle.Color
动态修改颜色,所以需要在载具Json文件Extend/ColorNodes
提前注册"ColorNodes": ["xx2"]
即可,届时引擎会自动尝试修改xx2
节点的材质颜色。《沙盘引擎》原生载具大多数都配置了此选项,因此可以直接通过代码修改载具颜色。
vehicle.Color = Color(255, 0, 0); //Color
设置载具引擎驱动状态。
此属性仅用于特殊情况下使用,不建议常规情况下【写入】使用,但可放心用于【只读】判定方向使用。
vehicle.PowerState = 0;
Type | 说明 |
---|---|
0 | 无驱动 |
1 | 前进驱动 |
2 | 后退驱动 |
设置载具引擎转向状态。
此属性仅用于特殊情况下使用,不建议常规情况下【写入】使用,但可放心用于【只读】判定方向使用。
vehicle.TurnState = 0;
Type | 说明 |
---|---|
0 | 无转向 |
1 | 向左转向 |
2 | 向右转向 |
获取载具当前的驾驶员角色(如无则返回null)。
vehicle.Driver: Character
获取载具的最大乘员数量。
vehicle.Seat: int
获取载具当前正在乘坐的乘员数量。
vehicle.Seated: int
获取载具当前的同步物理速度。
vehicle.Velocity: Vector
获取载具的完整物理速度,并非引擎速度,也可根据此值进行载具速度比例换算。
vehicle.Speed: float
获取载具的修正后物理速度,与
vehicle.Speed
的区别在于,不会记录0.2
及以下的速度(将自动变为0)。因为在多数情况下,速度
<=0.2
时基本已经停止移动了,往往并不需要特别精确的数据。
vehicle.FixedSpeed: float
获取载具的完整速度百分比(0.0~1.0),取决于当前速度与最大速度。
vehicle.SpeedProgress: float
设置载具幽灵穿透模式开关(可穿透其他载具)。
vehicle.GhostMode = false; //bool
获取载具是否已损毁(
vehicle.Health <= 0
)。
vehicle.IsDamaged: bool
获取载具是否在水中。
vehicle.IsInWater: bool
获取载具是否正在被燃烧。
vehicle.IsOnFire: bool
生成一个新的载具实例,
Type
类型样式参考《世界资源实例汇总》。如果
Type
参数填写-1
,则表示生成一个随机类型的载具。
function Vehicle.Create( type: int, pos: Vector, angle: float = 0, color: Color = null ): Vehicle
//在0点坐标处,建立一个类型为0、红色的载具实例 Vehicle.Create(0, Vector(0, 0, 0), 0, Color(255, 0, 0));
寻找一个载具实例(通过ID),不存在则返回
null
。
function Vehicle.Find( id: int ): Vehicle
寻找一个载具实例(通过UUID),不存在则返回
null
。
function Vehicle.FindByUUID( uuid: string ): Vehicle
获取当前所有存在载具数量。
function Vehicle.GetCount(): int
获取当前存在的指定索引载具,通常搭配
GetCount()
遍历使用。
function Vehicle.Get( index: int ): Vehicle
设置指定原始载具初始原生数据,可用来修改同一Model载具的全部初始属性(当前场景有效)。
对于一些载具属性的调整,可能需要同时调整多个属性才会达到理想中的效果(例如:提升速度
Acceleration
的同时最好也提升MaxSpeed
)。注意:尽管此API允许修改任何存在的原生数据
KeyPath
,但并非所有改动都会生效(例如:轮胎、附件、座位等可能不会生效,也不建议修改,除非知道自己在做什么),此方法更适合修改Handling
之类的载具基础属性。注意:已存在的载具对象不会被更新,适用于执行此代码后创建的所有同类载具,如有更新全部需求可使用
ResetAllData\ResetAllVehicleData
。
function Vehicle.SetSourceData( model: int, keyPath: string, value: any )
Vehicle.SetSourceData(10, "Handling.Acceleration", 300); //将所有Model==10的载具预设【加速属性】修改为300
补充:更多有关VehicleData
属性和节点信息,请参考《游戏载具扩展》内的Json节点。
获取指定原始载具初始原生数据,如果目标节点不存在则返回
null
。
function Vehicle.GetSourceData( model: int, keyPath: string ): any
重置指定原始载具初始原生数据,恢复使用引擎\模组内最原始的数据(当前场景有效)。
注意:已存在的载具对象不会被更新,适用于执行此代码后创建的所有同类载具,如有更新全部需求可使用
ResetAllData\ResetAllVehicleData
。
function Vehicle.ResetSourceData( model: int )
重置所有原始载具初始原生数据,全部恢复使用引擎\模组内最原始的数据(当前场景有效)。
注意:已存在的载具对象不会被更新,适用于执行此代码后创建的所有同类载具,如有更新全部需求可使用
ResetAllData\ResetAllVehicleData
。
function Vehicle.ResetAllSourceData()
重置\刷新指定原始载具所有已存在对象的原生数据,等同于遍历执行所有同类(Model)载具的
ResetData()
方法。
function Vehicle.ResetAllData( model: int )
重置\刷新指定原始载具所有已存在对象的原生数据,等同于遍历执行所有载具的
ResetData()
方法。
function Vehicle.ResetAllVehicleData()
销毁当前载具实例。
function vehicle.Remove()
以标准方式攻击当前载具实例,有关
Reason
原因,请参考《世界资源实例汇总——伤害触发类型》。
function vehicle.Damage( damage: int, from: Entity = null, reason: int = 0 )
增加一个当前对象的物理作用力,默认为本地坐标系(根据参数
isLocal
)。
function vehicle.AddForce( force: Vector, isLocal: bool = true )
let veh = Vehicle.Create(...); veh.AddForce( Vector(0, 0, 5) ); //载具立即向前冲刺一段距离(z)
设定载具指定位置的乘员,也可理解为让某个角色进入载具。
效果等同于
character.SetVehicle()
。
Vehicle.SetOccupant( instance: Character, seat: int = 0 )
let veh = Vehicle.Create(0, Vector(0, 0, 0)); let chara = Character.Find(0); veh.SetOccupant(chara, 0); //设置玩家进入主驾驶位置(0),如果位置已存在乘员则不执行 veh.SetOccupant(null, 0); //踢出主驾驶位置,不再有角色驾驶(null)
获取载具某个乘客位置的角色(
0
表示驾驶员),未找到则返回null
。
function vehicle.GetOccupant( seat: int ): Character
获取指定角色在载具中的位置索引,未找到则返回
-1
。
function vehicle.FindOccupant( character: Character ): int
修复当前载具(恢复最大血量),如果载具已经爆炸则自动调用
vehicle.Respawn()
。
function vehicle.Respawn()
立即完全破坏当前载具。
function vehicle.Kill()
开始燃烧当前载具。
如果参数
time < 0
则表示持续燃烧。
function vehicle.Fire( time: float )
停止燃烧当前载具。
function vehicle.FireOver()
复活\完全重置当前载具,如果载具上有其他角色将会被弹出。
function vehicle.Respawn()
弹出当前载具所有乘员\驾驶员(离开载具)。
function vehicle.EjectAll()
设置载具某个轮胎的状态(如有轮胎)。
function vehicle.SetTyre( index: int, state: int )
状态 | 说明 |
---|---|
0 | 默认,轮胎可见 |
1 | 占位,暂无功能 |
2 | 轮胎消失 |
获取载具某个轮胎的状态(如有轮胎),如轮胎不存在则返回
-1
。
function vehicle.GetTyre( index: int )
设置当前载具原生数据,可用来修改载具部分属性。
对于一些载具属性的调整,可能需要同时调整多个属性才会达到理想中的效果(例如:提升速度
Acceleration
的同时最好也提升MaxSpeed
)。注意:尽管
SetData()
允许修改任何存在的原生数据KeyPath
,但并非所有改动都会生效(例如:轮胎、附件、座位数等不会生效),此方法更适合修改Handling
之类的载具属性。
function vehicle.SetData( keyPath: string, value: any )
let tempVeh = Vehicle.Find(0); tempVeh.SetData("Handling.Acceleration", 300); //将加速属性修改为300,加速应该会更快
补充:更多有关VehicleData
属性和节点信息,请参考《游戏载具扩展》内的Json节点。
获取当前载具原生数据,如果目标节点不存在则返回
null
。
function vehicle.GetData( keyPath: string ): any
重置当前载具默认原生数据,如果原生数据通过
Vehicle.SetSourceData()
更改,则使用被其更改后的原生数据,否则使用引擎\模组最原始数据。
function vehicle.ResetData()