meta data for this page
📚 差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
scripting:world:model [2023/08/17 16:53] – bibiboxs | scripting:world:model [2025/05/25 15:56] (当前版本) – 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()`事件**。 | ||
行 46: | 行 86: | ||
```javascript | ```javascript | ||
model.World = 0; //int | model.World = 0; //int | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.Group | ||
+ | |||
+ | > 设置模型对象实例组,当前版本对于Model实例暂无功能意义。 | ||
+ | |||
+ | ```javascript | ||
+ | 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; // | ||
``` | ``` | ||
行 112: | 行 218: | ||
### model.Collision | ### model.Collision | ||
- | > 设置模型对象是否存在碰撞逻辑,默认为`false`,通常情况下不需要进行修改。 | + | > 设置模型对象是否开启碰撞逻辑,默认为`true`。 |
```javascript | ```javascript | ||
行 120: | 行 226: | ||
- | ### model.IsShine | + | ### model.Physics |
- | > 设置模型对象是否明亮(始终高亮度,不受光照影响)。 | + | > 设置模型对象物理模式开关,默认关闭,只有动态对象可以使用此属性。 |
```javascript | ```javascript | ||
- | model.IsShine | + | model.Physics |
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.Enum | ||
+ | |||
+ | > 设置模型对象的`Enum`属性值,不同类型的模型可能有不同的作用(或默认值)。 | ||
+ | |||
+ | ```javascript | ||
+ | model.Enum = 0; //int | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.BoolValue | ||
+ | |||
+ | > 设置模型对象的`BoolValue`属性值,不同类型的模型可能有不同的作用(或默认值)。 | ||
+ | |||
+ | ```javascript | ||
+ | model.BoolValue = false; //bool | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.StringValue | ||
+ | |||
+ | > 设置模型对象的`StringValue`属性值,不同类型的模型可能有不同的作用(或默认值)。 | ||
+ | |||
+ | ```javascript | ||
+ | model.StringValue = ""; | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.Range | ||
+ | |||
+ | > 设置模型对象的`Range`属性值,不同类型的模型可能有不同的作用(或默认值)。 | ||
+ | |||
+ | ```javascript | ||
+ | model.Range = 0.0; //float | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.Intensity | ||
+ | |||
+ | > 设置模型对象的`Intensity`属性值,不同类型的模型可能有不同的作用(或默认值)。 | ||
+ | |||
+ | ```javascript | ||
+ | model.Intensity = 0.0; //float | ||
``` | ``` | ||
行 132: | 行 288: | ||
### model.BoundSize | ### model.BoundSize | ||
- | > 获取模型原始尺寸计算值(只计算原始模型,不计算附加子物体等)。 | + | > 获取模型原始尺寸计算值(类似面积),会随着对象缩放尺寸而改变。 |
```javascript | ```javascript | ||
行 138: | 行 294: | ||
``` | ``` | ||
+ | |||
+ | |||
+ | ### 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) | ||
+ | ``` | ||
行 144: | 行 327: | ||
### Model.Create() | ### Model.Create() | ||
- | > 生成一个新的模型对象实例(由此生成的全部为动态对象)。 | + | > 生成一个新的**模型对象实例**(由此生成的全部为动态对象)。 |
```javascript | ```javascript | ||
行 154: | 行 337: | ||
let newModel = Model.Create(0, | let newModel = Model.Create(0, | ||
let newModel2 = Model.Create(0, | let newModel2 = Model.Create(0, | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### Model.CreateEffect() | ||
+ | |||
+ | [note2] | ||
+ | 此方法在V0.8+被弃用。 | ||
+ | [/note] | ||
+ | |||
+ | > 生成一个新的**效果对象实例(粒子等)**(由此生成的全部为动态对象),效果索引参考**[《世界资源实例汇总——粒子效果表格》](reference/ | ||
+ | > | ||
+ | > 不同索引代表的效果样式不同,效果周期可能是**循环播放、单次播放**等,==由此代码生成的**单次播放**对象会在播放结束后自动销毁,但**循环播放**的对象永远不会,直到手动`Remove()`对象==。 | ||
+ | > | ||
+ | > **注意:此方法相当于`Model.Create()`的扩展快速方法,帮助开发者快速生成效果对象,其原理仍然基于`Model`类。** | ||
+ | |||
+ | [note3] | ||
+ | 注意:此方法在内部基于`Model+DynamicObject`实现,因此有**额外的性能开销**。 | ||
+ | |||
+ | 如果不需要关于`Model API`的相关功能,建议优先使用`World.CreateEffect() | Client.CreateEffect()`生成效果对象实例。 | ||
+ | [/note] | ||
+ | |||
+ | ```javascript | ||
+ | function Model.CreateEffect( effect: int, pos: Vector, angle: float|vector ): Model | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | // | ||
+ | CreateEffect(3, | ||
``` | ``` | ||
行 178: | 行 390: | ||
- | ### Model.FindByIndex() | + | ### Model.GetCount() |
- | > 寻找一个模型对象实例(通过索引),不存在则返回`null`。 | + | > 获取当前所有存在模型对象数量(不包括静态对象)。 |
```javascript | ```javascript | ||
- | function Model.FindByIndex( index: int ): Model | + | function Model.GetCount(): int |
``` | ``` | ||
- | ### Model.GetCount() | + | ### Model.Get() |
- | > 获取当前所有存在模型对象数量(不包括静态对象)。 | + | > 获取当前存在的指定索引模型对象,通常搭配`GetCount()`遍历使用。 |
```javascript | ```javascript | ||
- | function Model.GetCount(): int | + | function Model.Get( index: int ): Model |
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### Model.GetTagCount() | ||
+ | |||
+ | > 获取当前所有满足`Tag`筛选的模型对象数量(所有`Tag`为xxx的模型对象数量)。 | ||
+ | |||
+ | ```javascript | ||
+ | function Model.GetTagCount( tag: string | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### Model.GetByTag() | ||
+ | |||
+ | > 获取当前所有满足`Tag`筛选的模型对象,通常搭配`GetTagCount()`遍历使用。 | ||
+ | |||
+ | ```javascript | ||
+ | function Model.GetByTag( tag: string, index: int = 0 ): Model | ||
``` | ``` | ||
行 217: | 行 449: | ||
function model.Remove() | function model.Remove() | ||
``` | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.Damage() | ||
+ | |||
+ | > 以标准方式攻击当前模型对象实例,**有关`Reason`原因,请参考[《世界资源实例汇总——伤害触发类型》](reference/ | ||
+ | > | ||
+ | > **注意:Model对象默认是没有受击逻辑的,即使血量为0也不会触发任何效果,此类内容需要开发者自行编写。** | ||
+ | |||
+ | ```javascript | ||
+ | function model.Damage( damage: int, from: Entity = null, reason: int = 0, localHitPos: | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.ExistFlag() | ||
+ | |||
+ | > 获取模型对象`Flags`是否已激活指定的`Flag`。 | ||
+ | |||
+ | ```javascript | ||
+ | function model.ExistFlag( flag: int ): bool | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### model.AddForce() | ||
+ | |||
+ | > 增加一个当前对象的物理作用力,默认为本地坐标系(根据参数`isLocal`)。 | ||
+ | > | ||
+ | > **注意:此方法只有【动态物体+激活物理`Physics == true`】的对象可使用。** | ||
+ | |||
+ | ```javascript | ||
+ | function model.AddForce( force: Vector, isLocal: bool = true ) | ||
+ | ``` | ||
+ | |||
+ | ```javascript | ||
+ | let obj = Model.Create(...); | ||
+ | obj.AddForce( Vector(0, 3, 0) ); // | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | ### 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.ScaleTo() | ||
+ | |||
+ | > 将当前模型对象过渡缩放到目标尺寸。 | ||
+ | > | ||
+ | > **(停止过渡:不填写任何参数,执行一次)** | ||
+ | |||
+ | ```javascript | ||
+ | function model.ScaleTo( scale: Vector, time: float ) | ||
+ | ``` | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
</ | </ |