meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
| 两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
| scripting:world:model [2023/09/19 12:55] – bibiboxs | scripting:world:model [2025/08/11 23:17] (当前版本) – bibiboxs | ||
|---|---|---|---|
| 行 11: | 行 11: | ||
| > | > | ||
| > **补充:**静态实例默认不具备**动态对象特性**,如果部分静态对象有世界交互& | > **补充:**静态实例默认不具备**动态对象特性**,如果部分静态对象有世界交互& | ||
| + | |||
| + | |||
| + | |||
| + | ## Event | ||
| + | |||
| + | ### OnModelDamage( model, damage, from, type, isImmunity, localHitPos ) | ||
| + | |||
| + | > 当模型对象被攻击时调用,**攻击检测应该优先考虑此事件**。 | ||
| + | |||
| + | ```javascript | ||
| + | function OnModelDamage( model: Model, damage: int, from: Entity, type: int, isImmunity: bool, localHitPos: | ||
| + | /* | ||
| + | model:触发实例 | ||
| + | damage:伤害值 | ||
| + | from:造成伤害的对象(可能null,例如碰撞) | ||
| + | type:伤害类型 | ||
| + | isImmunity:是否免疫伤害(如果为true,则表示没有造成伤害,可能被Immunity\Group拦截了) | ||
| + | localHitPos:受击位置的本地坐标 | ||
| + | */ | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### OnModelCollision( model, from ) | ||
| + | |||
| + | > 当模型对象被其他实体对象碰撞时调用。 | ||
| + | |||
| + | ```javascript | ||
| + | function OnModelCollision( model: Mode, from: Entity ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### OnModelHealthChange( model, oldHealth, newHealth ) | ||
| + | |||
| + | > 当模型对象血量发生改变时调用。 | ||
| + | > | ||
| + | > 由于模型对象的特殊性,通常默认`Health`为0,所以很可能被攻击时不会调用此事件(因为默认值与最小值是0,数值没有发生改变)。 | ||
| + | > | ||
| + | > **检测攻击应该优先考虑`OnModelDamage()`事件**。 | ||
| 行 56: | 行 96: | ||
| ```javascript | ```javascript | ||
| model.Group = 0; //int | model.Group = 0; //int | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.Tag | ||
| + | |||
| + | > 设置模型对象标签,此处的`Model.Tag`与基类`Entity.Tag`共用属性,并非单独的Tag属性。 | ||
| + | > | ||
| + | > 此属性设置为**非空值**将会同步提交到`TagList`(可使用API遍历),空值(默认)不会进行提交。 | ||
| + | |||
| + | ```javascript | ||
| + | model.Tag = ""; | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.ModelID | ||
| + | |||
| + | > 获取(只读)对象的模型ID。 | ||
| + | |||
| + | ```javascript | ||
| + | model.ModelID: | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.Health | ||
| + | |||
| + | > 设置模型对象实例血量(**仅有属性作用**,没有受击及伤害效果,具体逻辑需要开发者自行编写),默认值与最小值为`0`。 | ||
| + | |||
| + | ```javascript | ||
| + | model.Health = 0; //int | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.Flags | ||
| + | |||
| + | > 设置模型对象的`Flags`属性值(可叠加位Flag),参考[《模型对象特殊属性》](reference/ | ||
| + | |||
| + | ```javascript | ||
| + | model.Flags = 0; //int | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.Immunity | ||
| + | |||
| + | > 设定模型对象的[免疫属性](reference/ | ||
| + | |||
| + | ```javascript | ||
| + | model.Immunity = 0; //int | ||
| + | |||
| + | // | ||
| + | // | ||
| + | model.Immunity = 2 + 4; // | ||
| ``` | ``` | ||
| 行 122: | 行 218: | ||
| ### model.Collision | ### model.Collision | ||
| - | > 设置模型对象是否存在碰撞逻辑,默认为`false`,通常情况下不需要进行修改。 | + | > 设置模型对象是否开启碰撞逻辑,默认为`true`。 |
| ```javascript | ```javascript | ||
| 行 140: | 行 236: | ||
| - | ### model.IsShine | + | ### model.Enum |
| - | > 设置模型对象明亮模式(始终保持亮度,不受光照及阴影影响)。 | + | > 设置模型对象的`Enum`属性值,不同类型的模型可能有不同的作用(或默认值)。 |
| - | > | + | |
| - | > **注意:此选项会和`Emission`模式冲突,两者只能同时生效一个,自发光优先。** | + | |
| ```javascript | ```javascript | ||
| - | model.IsShine | + | model.Enum = 0; //int |
| ``` | ``` | ||
| - | ### model.BoundSize | + | ### model.BoolValue |
| - | > 获取模型原始尺寸计算值(只计算原始模型,不计算附加子物体等)。 | + | > 设置模型对象的`BoolValue`属性值,不同类型的模型可能有不同的作用(或默认值)。 |
| ```javascript | ```javascript | ||
| - | model.BoundSize: float //数字越大表示尺寸越大,根据内置标准的尺寸规范计算 | + | model.BoolValue = false; |
| ``` | ``` | ||
| - | ### model.Emission | + | ### model.StringValue |
| - | > 设置模型对象自发光开关(低配玩家可能不会启用附带的光源效果)。 | + | > 设置模型对象的`StringValue`属性值,不同类型的模型可能有不同的作用(或默认值)。 |
| - | > | + | |
| - | > **注意:此选项会和`IsShine`模式冲突,两者只能同时生效一个,自发光优先。** | + | |
| ```javascript | ```javascript | ||
| - | model.Emission | + | model.StringValue |
| ``` | ``` | ||
| - | ### model.EmissionColor | + | ### model.Range |
| - | > 设置模型对象自发光颜色,默认为白色`Color(255, | + | > 设置模型对象的`Range`属性值,不同类型的模型可能有不同的作用(或默认值)。 |
| ```javascript | ```javascript | ||
| - | model.EmissionColor | + | model.Range = 0.0; //float |
| ``` | ``` | ||
| - | ### model.EmissionIntensity | + | ### model.Intensity |
| - | > 设置模型对象自发光强度,默认为`1.0`。 | + | > 设置模型对象的`Intensity`属性值,不同类型的模型可能有不同的作用(或默认值)。 |
| ```javascript | ```javascript | ||
| - | model.EmissionIntensity | + | model.Intensity |
| ``` | ``` | ||
| + | |||
| + | |||
| + | ### model.BoundSize | ||
| + | |||
| + | > 获取模型原始尺寸计算值(类似面积),会随着对象缩放尺寸而改变。 | ||
| + | |||
| + | ```javascript | ||
| + | model.BoundSize: | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.HasParent | ||
| + | |||
| + | > 获取模型是否拥有绑定的父物体或节点(只读)。 | ||
| + | |||
| + | ```javascript | ||
| + | model.HasParent: | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.Emission | ||
| + | |||
| + | > 设置模型对象**发光亮度倍数**,默认为`0.0`(原始亮度),如果希望增加亮度(或者高光)至少需要修改数值> | ||
| + | > | ||
| + | > **注意:这里的“高光”仅指亮度渲染效果,实际光源渲染与`Light`有区别,不会有真正的光源照射效果。** | ||
| + | |||
| + | ```javascript | ||
| + | model.Emission = 0.0; //float | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | model.Emission = 0.0; //Disable | ||
| + | model.Emission = 1.0; //Enable, but default(1*1=1) | ||
| + | model.Emission = 2.0; //Enable, brightness(1*2=2) | ||
| + | ``` | ||
| 行 198: | 行 327: | ||
| ### Model.Create() | ### Model.Create() | ||
| - | > 生成一个新的模型对象实例(由此生成的全部为动态对象)。 | + | > 生成一个新的**模型对象实例**(由此生成的全部为动态对象)。 |
| ```javascript | ```javascript | ||
| 行 212: | 行 341: | ||
| - | ### Model.Find() | + | ### Model.CreateEffect() |
| - | > 寻找一个模型对象实例(通过ID),不存在则返回`null`。 | + | [note2] |
| + | 此方法在V0.8+被弃用。 | ||
| + | [/note] | ||
| + | |||
| + | > 生成一个新的**效果对象实例(粒子等)**(由此生成的全部为动态对象),效果索引参考**[《世界资源实例汇总——粒子效果表格》](reference/ | ||
| + | > | ||
| + | > 不同索引代表的效果样式不同,效果周期可能是**循环播放、单次播放**等,==由此代码生成的**单次播放**对象会在播放结束后自动销毁,但**循环播放**的对象永远不会,直到手动`Remove()`对象==。 | ||
| + | > | ||
| + | > **注意:此方法相当于`Model.Create()`的扩展快速方法,帮助开发者快速生成效果对象,其原理仍然基于`Model`类。** | ||
| + | |||
| + | [note3] | ||
| + | 注意:此方法在内部基于`Model+DynamicObject`实现,因此有**额外的性能开销**。 | ||
| + | |||
| + | 如果不需要关于`Model API`的相关功能,建议优先使用`World.CreateEffect() | Client.CreateEffect()`生成效果对象实例。 | ||
| + | [/note] | ||
| ```javascript | ```javascript | ||
| - | function Model.Find( id: int ): Model | + | function Model.CreateEffect( effect: int, pos: Vector, angle: float|vector |
| ``` | ``` | ||
| + | ```javascript | ||
| + | // | ||
| + | CreateEffect(3, | ||
| + | ``` | ||
| - | ### Model.FindByUUID() | ||
| - | > 寻找一个模型对象实例(通过UUID),不存在则返回`null`。 | + | ### Model.Find() |
| + | |||
| + | > 寻找一个模型对象实例(通过ID),不存在则返回`null`。 | ||
| ```javascript | ```javascript | ||
| - | function Model.FindByUUID( uuid: string | + | function Model.Find( id: int ): Model |
| ``` | ``` | ||
| - | ### Model.FindByIndex() | + | ### Model.FindByUUID() |
| - | > 寻找一个模型对象实例(通过索引),不存在则返回`null`。 | + | > 寻找一个模型对象实例(通过UUID),不存在则返回`null`。 |
| ```javascript | ```javascript | ||
| - | function Model.FindByIndex( index: int ): Model | + | function Model.FindByUUID( uuid: string |
| ``` | ``` | ||
| 行 258: | 行 406: | ||
| ```javascript | ```javascript | ||
| function Model.Get( index: int ): Model | function Model.Get( index: int ): Model | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Model.GetTagCount() | ||
| + | |||
| + | > 获取当前所有满足`Tag`筛选的模型对象数量(所有`Tag`为xxx的模型对象数量)。 | ||
| + | |||
| + | ```javascript | ||
| + | function Model.GetTagCount( tag: string ): int | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### Model.GetByTag() | ||
| + | |||
| + | > 获取当前所有满足`Tag`筛选的模型对象,通常搭配`GetTagCount()`遍历使用。 | ||
| + | |||
| + | ```javascript | ||
| + | function Model.GetByTag( tag: string, index: int = 0 ): Model | ||
| ``` | ``` | ||
| 行 287: | 行 455: | ||
| > 以标准方式攻击当前模型对象实例,**有关`Reason`原因,请参考[《世界资源实例汇总——伤害触发类型》](reference/ | > 以标准方式攻击当前模型对象实例,**有关`Reason`原因,请参考[《世界资源实例汇总——伤害触发类型》](reference/ | ||
| + | > | ||
| + | > **注意:Model对象默认是没有受击逻辑的,即使血量为0也不会触发任何效果,此类内容需要开发者自行编写。** | ||
| ```javascript | ```javascript | ||
| - | function model.Damage( damage: int, from: Entity = null, reason: int = 0 ) | + | function model.Damage( damage: int, from: Entity = null, reason: int = 0, localHitPos: |
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.ExistFlag() | ||
| + | |||
| + | > 获取模型对象`Flags`是否已激活指定的`Flag`。 | ||
| + | |||
| + | ```javascript | ||
| + | function model.ExistFlag( flag: int ): bool | ||
| ``` | ``` | ||
| 行 305: | 行 485: | ||
| ```javascript | ```javascript | ||
| - | let obj = model.Create(...); | + | let obj = Model.Create(...); |
| - | obj.AddForce( Vector(0, 3, 0) ); //载具立即向上冲刺一段距离(y) | + | obj.AddForce( Vector(0, 3, 0) ); //对象立即向上冲刺一段距离(y) |
| ``` | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.AddTurnForce() | ||
| + | |||
| + | > 增加一个当前对象的物理旋转力,默认为本地坐标系(根据参数`isLocal`)。 | ||
| + | > | ||
| + | > **注意:此方法只有【动态物体+激活物理`Physics == true`】的对象可使用。** | ||
| + | |||
| + | ```javascript | ||
| + | function model.AddTurnForce( force: Vector, isLocal: bool = true ) | ||
| + | ``` | ||
| + | |||
| + | ```javascript | ||
| + | let obj = Model.Create(...); | ||
| + | obj.AddTurnForce( Vector(0, 10, 0) ); // | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.MoveTo() | ||
| + | |||
| + | > 将当前模型对象过渡移动到目标位置。 | ||
| + | > | ||
| + | > **(停止过渡:不填写任何参数,执行一次)** | ||
| + | |||
| + | ```javascript | ||
| + | function model.MoveTo( pos: Vector, time: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.RotateTo() | ||
| + | |||
| + | > 将当前模型对象过渡旋转到目标欧拉角。 | ||
| + | > | ||
| + | > **(停止过渡:不填写任何参数,执行一次)** | ||
| + | |||
| + | ```javascript | ||
| + | function model.RotateTo( euler: Vector, time: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.RotateAroundTo() | ||
| + | |||
| + | > 将当前模型对象过渡旋转到目标欧拉角(基于锚点)。 | ||
| + | > | ||
| + | > **(停止过渡:不填写任何参数,执行一次)** | ||
| + | |||
| + | ```javascript | ||
| + | function model.RotateAroundTo( pivot: Vector, euler: Vector, time: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | ### model.ScaleTo() | ||
| + | |||
| + | > 将当前模型对象过渡缩放到目标尺寸。 | ||
| + | > | ||
| + | > **(停止过渡:不填写任何参数,执行一次)** | ||
| + | |||
| + | ```javascript | ||
| + | function model.ScaleTo( scale: Vector, time: float ) | ||
| + | ``` | ||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| + | |||
| </ | </ | ||