Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/接口/模型.md
2025-03-18 14:46:12 +08:00

2318 lines
80 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
sidebarDepth: 1
---
# 模型
# 索引
包括骨骼模型相关接口
---
| 接口 | <div style="width: 3em"></div> | 描述 |
| --- | --- | --- |
| [BindItemToBone](模型.md#binditemtobone) | <span style="display:inline;color:#7575f9">客户端</span> | 将使用了骨骼模型的玩家的手持物绑定到指定的骨骼上 |
| [BindModelToEntity](模型.md#bindmodeltoentity) | <span style="display:inline;color:#7575f9">客户端</span> | 实体替换骨骼模型后,再往上挂接其他骨骼模型。 |
| [BindModelToModel](模型.md#bindmodeltomodel) | <span style="display:inline;color:#7575f9">客户端</span> | 在骨骼模型上挂接其他骨骼模型 |
| [CancelAllBoneMask](模型.md#cancelallbonemask) | <span style="display:inline;color:#7575f9">客户端</span> | 取消动画中的所有骨骼屏蔽。 |
| [CreateFreeModel](模型.md#createfreemodel) | <span style="display:inline;color:#7575f9">客户端</span> | 创建自由的模型无需绑定Entity |
| [GetAllBindModelToEntity](模型.md#getallbindmodeltoentity) | <span style="display:inline;color:#7575f9">客户端</span> | 获取实体上某个骨骼上挂接的所有骨骼模型的id |
| [GetAnimLength](模型.md#getanimlength) | <span style="display:inline;color:#7575f9">客户端</span> | 获取某个骨骼动画的长度,单位为秒 |
| [GetBonePositionFromMinecraftObject](模型.md#getbonepositionfromminecraftobject) | <span style="display:inline;color:#7575f9">客户端</span> | 获取原版模型的骨骼世界坐标 |
| [GetBoneWorldPos](模型.md#getboneworldpos) | <span style="display:inline;color:#7575f9">客户端</span> | 获取骨骼的坐标 |
| [GetEntityBoneWorldPos](模型.md#getentityboneworldpos) | <span style="display:inline;color:#7575f9">客户端</span> | 获取换了骨骼模型的实体的骨骼坐标 |
| [GetEntityScale](模型.md#getentityscale) | <span style="display:inline;color:#ff5555">服务端</span> | 获取实体的放缩比例大小 |
| [GetExtraUniformValue](模型.md#getextrauniformvalue) | <span style="display:inline;color:#7575f9">客户端</span> | 获取在骨骼模型shader中使用的自定义变量Uniform的值 |
| [GetModelId](模型.md#getmodelid) | <span style="display:inline;color:#7575f9">客户端</span> | 获取骨骼模型的Id主要用于特效绑定骨骼模型 |
| [GetModelMaterial](模型.md#getmodelmaterial) | <span style="display:inline;color:#7575f9">客户端</span> | 获取骨骼模型的正在使用的材质名称,也可获取骨骼模型中指定骨骼所使用的<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#7.模型使用自定义材质及更多贴图">材质名称</a>。如果获取指定骨骼所使用的材质需要先在netease_model.json下设置"useSplitMeshes"字段为true。 |
| [GetModelName](模型.md#getmodelname) | <span style="display:inline;color:#ff5555">服务端</span> | 获取实体的模型名称 |
| [GetModelStyle](模型.md#getmodelstyle) | <span style="display:inline;color:#7575f9">客户端</span> | 获取模型类型 |
| [GetPlayingAnimList](模型.md#getplayinganimlist) | <span style="display:inline;color:#7575f9">客户端</span> | 获取指定的骨骼模型中正处于播放状态的骨骼动画名称列表 |
| [GetTexture](模型.md#gettexture) | <span style="display:inline;color:#7575f9">客户端</span> | 获取骨骼模型的贴图路径 |
| [HideModel](模型.md#hidemodel) | <span style="display:inline;color:#7575f9">客户端</span> | 隐藏纯模型 |
| [ModelPlayAni](模型.md#modelplayani) | <span style="display:inline;color:#7575f9">客户端</span> | 纯骨骼播放动作。 支持骨骼动画混合可参考SetAnimationBoneMask接口以及RegisterAnim1DControlParam接口说明。 |
| [ModelStopAni](模型.md#modelstopani) | <span style="display:inline;color:#7575f9">客户端</span> | 暂停指定的骨骼动画 |
| [PlayAnim](模型.md#playanim) | <span style="display:inline;color:#7575f9">客户端</span> | 播放骨骼动画 |
| [RegisterAnim1DControlParam](模型.md#registeranim1dcontrolparam) | <span style="display:inline;color:#7575f9">客户端</span> | 当同时播放多个骨骼动画时新建用于控制动画进行1D线性混合的参数。目前线性混合仅支持对两个动画进行混合。新建的参数值范围为[0,1]。指定的骨骼将会按照这个参数的值对两个动画进行线性混合。 |
| [RegisterAnim1DMultiControlParam](模型.md#registeranim1dmulticontrolparam) | <span style="display:inline;color:#7575f9">客户端</span> | 当同时播放多个骨骼动画时,注册用于根据权重控制多动画进行混合的参数 |
| [RemoveAnim1DMultiControlParam](模型.md#removeanim1dmulticontrolparam) | <span style="display:inline;color:#7575f9">客户端</span> | 删除用于根据权重控制多动画进行混合的参数 |
| [RemoveFreeModel](模型.md#removefreemodel) | <span style="display:inline;color:#7575f9">客户端</span> | 移除自由模型 |
| [ResetModel](模型.md#resetmodel) | <span style="display:inline;color:#7575f9">客户端</span> | 恢复实体为原版模型 |
| [SetAnim1DControlParam](模型.md#setanim1dcontrolparam) | <span style="display:inline;color:#7575f9">客户端</span> | 新建动画的1D控制参数后使用该接口对相应的参数进行控制。 |
| [SetAnim1DMultiControlParam](模型.md#setanim1dmulticontrolparam) | <span style="display:inline;color:#7575f9">客户端</span> | 新建动画的1D控制参数后设置用于根据权重控制多动画进行混合的参数 |
| [SetAnimLayer](模型.md#setanimlayer) | <span style="display:inline;color:#7575f9">客户端</span> | 设置骨骼动画的层级,动画层级越大,则优先度越高,骨骼模型的骨骼优先播放优先度最高的动画,相同层级的动画则优先播放率先播放的动画。 |
| [SetAnimSpeed](模型.md#setanimspeed) | <span style="display:inline;color:#7575f9">客户端</span> | 设置某个骨骼动画的播放速度 |
| [SetAnimationAllBoneMask](模型.md#setanimationallbonemask) | <span style="display:inline;color:#7575f9">客户端</span> | 设置是否屏蔽动画中所有骨骼的动画若开启骨骼屏蔽后该骨骼将不再播放该动画中的动作。该接口会对该动画中所有骨骼生效可通过参数ignoreBoneList来指定不受影响的骨骼名称。通过屏蔽指定骨骼的动画可实现同一个骨骼模型同时在不同骨骼上播放不同的动作动画从而实现快捷的动作融合。 |
| [SetAnimationBoneMask](模型.md#setanimationbonemask) | <span style="display:inline;color:#7575f9">客户端</span> | 设置是否屏蔽动画中指定的骨骼的动画,若开启骨骼屏蔽后,该骨骼将不再播放该动画中的动作。通过屏蔽指定骨骼的动画可实现同一个骨骼模型同时在不同骨骼上播放不同的动作动画,从而实现快捷的动作融合。 |
| [SetBrightness](模型.md#setbrightness) | <span style="display:inline;color:#7575f9">客户端</span> | 设置实体的亮度 |
| [SetEntityOpacity](模型.md#setentityopacity) | <span style="display:inline;color:#7575f9">客户端</span> | 设置骨骼模型的透明度,只能对骨骼模型生效,如果设置的是原版模型,则模型的影子会被隐藏。 |
| [SetEntityScale](模型.md#setentityscale) | <span style="display:inline;color:#ff5555">服务端</span> | 设置实体的放缩比例大小设置比例过大会导致游戏卡顿建议控制在20倍以内 |
| [SetEntityShadowShow](模型.md#setentityshadowshow) | <span style="display:inline;color:#7575f9">客户端</span> | 设置实体打开/关闭影子渲染 |
| [SetExtraUniformValue](模型.md#setextrauniformvalue) | <span style="display:inline;color:#7575f9">客户端</span> | 设置shader中特定Uniform的值 |
| [SetFreeModelAniSpeed](模型.md#setfreemodelanispeed) | <span style="display:inline;color:#7575f9">客户端</span> | 设置自由模型动画的播放速度 |
| [SetFreeModelBoundingBox](模型.md#setfreemodelboundingbox) | <span style="display:inline;color:#7575f9">客户端</span> | 设置自由模型的包围盒 |
| [SetFreeModelPos](模型.md#setfreemodelpos) | <span style="display:inline;color:#7575f9">客户端</span> | 设置自由模型的位置 |
| [SetFreeModelRot](模型.md#setfreemodelrot) | <span style="display:inline;color:#7575f9">客户端</span> | 设置自由模型的方向 |
| [SetFreeModelScale](模型.md#setfreemodelscale) | <span style="display:inline;color:#7575f9">客户端</span> | 设置自由模型的大小 |
| [SetLegacyBindRot](模型.md#setlegacybindrot) | <span style="display:inline;color:#7575f9">客户端</span> | 用于修复特效挂接到骨骼时的方向 |
| [SetModel](模型.md#setmodel) | <span style="display:inline;color:#ff5555">服务端</span> | 设置骨骼模型 |
| [SetModel](模型.md#setmodel) | <span style="display:inline;color:#7575f9">客户端</span> | 替换实体的骨骼模型 |
| [SetModelMaterial](模型.md#setmodelmaterial) | <span style="display:inline;color:#7575f9">客户端</span> | 设置骨骼模型所使用的的材质,除了可以设置骨骼模型所使用的<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#7.模型使用自定义材质及更多贴图">自定义材质</a>以外,也可对单个骨骼设置所使用的<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#7.模型使用自定义材质及更多贴图">自定义材质</a>。如果需要设置单个骨骼所使用的材质需要先在netease_model.json下设置"useSplitMeshes"字段为true。 |
| [SetModelMultiPassMaterial](模型.md#setmodelmultipassmaterial) | <span style="display:inline;color:#7575f9">客户端</span> | 设置骨骼模型多pass中使用到的<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#9.骨骼模型自定义多pass">材质列表</a>也可对单个骨骼设置所使用的自定义多Pass材质。如果需要设置单个骨骼所使用的多Pass材质需要先在netease_model.json下设置"useSplitMeshes"字段为true。 |
| [SetModelOffset](模型.md#setmodeloffset) | <span style="display:inline;color:#ff5555">服务端</span> | 设置骨骼模型相对于局部坐标系的偏移量,初始值为(0, 0, 0) |
| [SetModelOffset](模型.md#setmodeloffset) | <span style="display:inline;color:#7575f9">客户端</span> | 模型增加偏移量 |
| [SetModelPartVisible](模型.md#setmodelpartvisible) | <span style="display:inline;color:#7575f9">客户端</span> | 对骨骼模型中指定的骨骼进行渲染屏蔽,屏蔽后该骨骼不会被渲染出来。 |
| [SetModelPerspectiveEffect](模型.md#setmodelperspectiveeffect) | <span style="display:inline;color:#7575f9">客户端</span> | 设置模型透视效果。注:只对自定义骨骼模型生效 |
| [SetModelTexture](模型.md#setmodeltexture) | <span style="display:inline;color:#ff5555">服务端</span> | 设置骨骼模型贴图该接口与SetTexture功能相同但属于服务端接口。 |
| [SetShowArmModel](模型.md#setshowarmmodel) | <span style="display:inline;color:#7575f9">客户端</span> | 设置使用骨骼模型后切换至第一人称时是否显示手部模型。需要先为骨骼模型定义arm_modelarm_model的定义可参考demo示例-AwesomeMod中的resourcePack/models/netease_models.json中的大天狗模型定义 |
| [SetTexture](模型.md#settexture) | <span style="display:inline;color:#7575f9">客户端</span> | 设置骨骼模型的贴图该接口与SetModelTexture功能相同但属于客户端接口。 |
| [ShowCommonHurtColor](模型.md#showcommonhurtcolor) | <span style="display:inline;color:#ff5555">服务端</span> | 设置挂接骨骼模型的实体是否显示通用的受伤变红效果 |
| [ShowCommonHurtColor](模型.md#showcommonhurtcolor) | <span style="display:inline;color:#7575f9">客户端</span> | 设置挂接骨骼模型的实体是否显示通用的受伤变红效果 |
| [ShowModel](模型.md#showmodel) | <span style="display:inline;color:#7575f9">客户端</span> | 显示纯模型 |
| [UnBindModelToEntity](模型.md#unbindmodeltoentity) | <span style="display:inline;color:#7575f9">客户端</span> | 取消实体上挂接的某个骨骼模型。取消挂接后这个modelId的模型便会销毁无法再使用如果是临时隐藏可以使用HideModel |
| [UnBindModelToModel](模型.md#unbindmodeltomodel) | <span style="display:inline;color:#7575f9">客户端</span> | 取消骨骼模型上挂接的某个骨骼模型。取消挂接后这个modelId的模型便会销毁无法再使用如果是临时隐藏可以使用HideModel |
## BindItemToBone
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
将使用了骨骼模型的玩家的手持物绑定到指定的骨骼上
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 指定挂接的骨骼模型id |
| boneName | str | 指定骨骼模型的骨骼名 |
| bindSlot | int | 绑定手持物的slot0为主手1为副手默认值为0 |
| offset | tuple(float,float,float) | 偏移量,默认值为(0,0,0) |
| rotation | tuple(float,float,float) | 旋转角度,默认值为(0,0,0) |
| scale | tuple(float,float,float) | 缩放,默认值为(1,1,1) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 旋转顺序为先绕z轴的顺时针方向、再绕x轴的顺时针方向、最后绕y轴的逆时针方向
- 如果需要[SetLegacyBindRot](#setlegacybindrot)需先调用SetLegacyBindRot再调用本接口
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.BindItemToBone(1, "rightHand", 0, (2.5,0,2), (0,0,0), (1,1.5,1))
```
## BindModelToEntity
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
实体替换骨骼模型后,再往上挂接其他骨骼模型。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| boneName | str | 挂接的骨骼名称 |
| modelName | str | 要挂接的骨骼模型名称 |
| offset | tuple(float,float,float) | 偏移量 |
| rot | tuple(float,float,float) | 旋转 |
| scale | tuple(float,float,float) | 缩放 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 挂到骨骼上的骨骼模型的Id失败返回-1 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 把名称为gun的骨骼模型挂接到rightHand骨骼上
gunModelId = comp.BindModelToEntity("rightHand", "gun")
```
## BindModelToModel
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
在骨骼模型上挂接其他骨骼模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| boneName | str | 挂接的骨骼名称 |
| modelName | str | 要挂接的骨骼模型名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 挂到骨骼上的骨骼模型的Id失败返回-1 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(11)
# 把名称为gun的骨骼模型挂接到modelId为11的模型的rightHand骨骼上
gunModelId = comp.BindModelToModel("rightHand", "gun")
```
## CancelAllBoneMask
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
取消动画中的所有骨骼屏蔽。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要设置的模型id包括实体模型以及自由模型 |
| aniName | str | 动画名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.CancelAllBoneMask(modelId, "attack")
```
## CreateFreeModel
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
创建自由的模型无需绑定Entity
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelName | str | 模型名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 创建成功返回 modelId创建失败返回 0 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
model = comp.CreateFreeModel(modelName)
```
## GetAllBindModelToEntity
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取实体上某个骨骼上挂接的所有骨骼模型的id
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| boneName | str | 要获取的骨骼名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(int) | 骨骼模型的id的列表 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
modelIds = comp.GetAllBindModelToEntity("rightHand")
```
## GetAnimLength
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取某个骨骼动画的长度,单位为秒
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| aniName | str | 骨骼动画名称 |
| modelId | int | 需要指定的模型id默认为None表示使用CreateModel时传入的entityID挂接的模型 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| float | 骨骼动画长度 |
- 示例
```python
import mod.client.extraClientApi as clientApi
# 操作实体目前加载的模型
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 获取run动画的长度
animLength = comp.GetAnimLength('run')
# 指定模型id操作id对应的模型(创建组件时使用levelId)
import mod.client.extraClientApi as clientApi
modelId = 1
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
# 获取run动画的长度
animLength = comp.GetAnimLength('run', modelId)
```
## GetBonePositionFromMinecraftObject
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取原版模型的骨骼世界坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| boneName | str | 骨骼名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float) | 世界坐标, 未找到骨骼时返回None |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
pos = comp.GetBonePositionFromMinecraftObject("rightleg")
```
## GetBoneWorldPos
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取骨骼的坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| boneName | str | 骨骼名称 |
| modelId | int | 需要指定的模型id默认为None表示使用CreateModel时传入的entityID挂接的模型 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float) | 位置坐标 |
- 示例
```python
import mod.client.extraClientApi as clientApi
# 操作实体目前加载的模型
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
bPos = comp.GetBoneWorldPos(boneName)
# 指定模型id操作id对应的模型(创建组件时使用levelId)
import mod.client.extraClientApi as clientApi
modelId = 1
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
bPos = comp.GetBoneWorldPos(boneName, modelId)
```
## GetEntityBoneWorldPos
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取换了骨骼模型的实体的骨骼坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 实体id |
| boneName | str | 骨骼名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float) | 位置坐标 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
bPos = comp.GetEntityBoneWorldPos(entityId, boneName)
```
## GetEntityScale
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.scaleCompServer.ScaleComponentServer
- 描述
获取实体的放缩比例大小
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| float | 比例因子 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateScale(entityId)
result = comp.GetEntityScale()
```
## GetExtraUniformValue
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取在骨骼模型shader中使用的自定义变量Uniform的值
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要查询的骨骼模型modelId |
| uniformIndex | int | 需要设置的自定义变量的下标值范围为1~4分别对应Shader中的EXTRA_VECTOR1,EXTRA_VECTOR2,EXTRA_VECTOR3,EXTRA_VECTOR4 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float,float) | 返回的对应自定义变量的值。获取失败则返回None。 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
modelId = comp.GetModelId()
# 获取该骨骼模型shader中使用的EXTRA_VECTOR1这个自定义变量的值
print comp.GetExtraUniformValue(modelId, 1)
# 获取该骨骼模型shader中使用的EXTRA_VECTOR4这个自定义变量的值
print comp.GetExtraUniformValue(modelId, 4)
```
## GetModelId
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取骨骼模型的Id主要用于特效绑定骨骼模型
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 当前骨骼模型实例的id |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
modelId = comp.GetModelId()
```
## GetModelMaterial
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取骨骼模型的正在使用的材质名称,也可获取骨骼模型中指定骨骼所使用的<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#7.模型使用自定义材质及更多贴图">材质名称</a>。如果获取指定骨骼所使用的材质需要先在netease_model.json下设置"useSplitMeshes"字段为true。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要进行设置材质操作的骨骼模型Id。 |
| boneName | str | 骨骼模型中的骨骼名称。默认值为空字符串。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(str) | 正在使用的材质名称列表 |
- 备注
- 如果需要查询的骨骼模型开启了骨骼拆分即在netease_model.json下设置"useSplitMeshes"字段为true后使用该接口查询骨骼模型的材质时如果不指定boneName则此时获取的是本体模型正在使用的材质。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 创建大天狗骨骼模型。
modelId = comp.SetModel("datiangou")
# 所有使用到的自定义材质都需已定义在resource_pack/materials/entity.material中。
# 查询骨骼模型正在使用的材质。
print comp.GetModelMaterial(modelId)
# 查询骨骼模型中指定骨骼正在使用的材质。
# 注意需要用户先在资源包resource_pack/model/netease_model.json中对骨骼模型配置字段"useSplitMeshes"为true以及"splitBonesGroup"中指定了该骨骼,该效果才会生效,否则不生效。
print comp.GetModelMaterial(modelId, "L_wing01")
```
## GetModelName
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.modelCompServer.ModelComponentServer
- 描述
获取实体的模型名称
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 模型名称 |
- 备注
- 在服务端获取,客户端不生效
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
modelName = comp.GetModelName()
```
## GetModelStyle
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.actorRenderCompClient.ActorRenderCompClient
- 描述
获取模型类型
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | normal 表示正常slim 表示纤细custom表示自定义 |
- 备注
- 当玩家的模型被个性化皮肤、接口等修改为非Steve、Alex的其他类型后返回custom。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateActorRender(playerId)
comp.GetModelStyle()
```
## GetPlayingAnimList
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取指定的骨骼模型中正处于播放状态的骨骼动画名称列表
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 骨骼模型Id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| list(str) | 骨骼动画名称列表 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
playingAnimList = comp.GetPlayingAnimList(modelId)
```
## GetTexture
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
获取骨骼模型的贴图路径
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要指定的模型id默认为None表示使用CreateModel时传入的entityID挂接的模型 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| str | 贴图路径, 以textures\models为当前路径的相对路径 |
- 示例
```python
import mod.client.extraClientApi as clientApi
# 操作实体目前加载的模型
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
texturePath = comp.GetTexture()
# 指定模型id操作id对应的模型(创建组件时使用levelId)
import mod.client.extraClientApi as clientApi
modelId = 1
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
texturePath = comp.GetTexture(modelId)
```
## HideModel
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
隐藏纯模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要隐藏的modelId |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| None | 无返回值 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.HideModel(modelId)
```
## ModelPlayAni
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
纯骨骼播放动作。 支持骨骼动画混合可参考SetAnimationBoneMask接口以及RegisterAnim1DControlParam接口说明。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要设置的模型id包括实体模型以及自由模型。 |
| aniName | str | 要设置的动画名称 |
| isLoop | bool | 是否循环播放,默认为 False |
| isBlended | bool | 播放时是与当前动画混合还是中止当前动画的播放默认False即中止当前动画播放。设置为True时将允许即将播放的动画进行混合。注意动画混合仅在相同层级的动画之间进行。若当前播放的动画与即将播放的动画层级不一样则isBlended参数无效。 |
| layer | int | 设置骨骼动画的层级范围为0~255默认为0。注意如果播放的动画已经存在则会将原有的动画层级覆盖。动画层级越大则优先度越高骨骼模型的骨骼优先播放优先度最高的动画。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 在动画的层级相同的情况下动画的优先度播放顺序则首先按照1.是否与需要其他动画进行混合。2.是否率先播放 这两个因素来先后决定。例如我们首先对动画A动画B使用接口RegisterAnim1DControlParam注册1D线性混合参数alpha 然后对动画A和动画C使用接口RegisterAnim1DControlParam注册线性混合参数beta。接着先后播放动画A, 动画C动画B动画D。这时由于动画A动画C具有混合需要并且率先播放因此骨骼模型会率先播放动画A和动画C的混合动画注意1D线性混合参数的初始值为0因此此时混合动画的表现还是动画A如果此时再暂停动画C则会播放动画A与动画B的混合动画。接着暂停动画B则会播放动画A最后再暂停动画A则才会播放动画D。
- 如动画需要参与混合必须将isBlended设为True否则可能会出现调用RegisterAnim1DControlParam或RegisterAnim1DMultiControlParam接口返回值异常或功能失效的情况
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.ModelPlayAni(modelId, 'run', True, False, 0)
```
## ModelStopAni
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
暂停指定的骨骼动画
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要设置的模型id包括实体模型以及自由模型 |
| aniName | str | 动画名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.ModelStopAni(modelId, "attack")
```
## PlayAnim
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
播放骨骼动画
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| aniName | str | 动画名称 |
| isLoop | bool | 是否循环播放 |
| modelId | int | 需要指定的模型id默认为None表示使用CreateModel时传入的entityID挂接的模型 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
# 操作实体目前加载的模型
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.PlayAnim("run", True)
# 指定模型id操作id对应的模型(创建组件时使用levelId)
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
modelId = 1
comp.PlayAnim("run", True, modelId)
```
## RegisterAnim1DControlParam
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
当同时播放多个骨骼动画时新建用于控制动画进行1D线性混合的参数。目前线性混合仅支持对两个动画进行混合。新建的参数值范围为[0,1]。指定的骨骼将会按照这个参数的值对两个动画进行线性混合。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 骨需要设置的模型id包括实体模型以及自由模型。 |
| leftAniName | str | 混合的第一个动画名称当1D参数的值为0时指定的骨骼仅播放这个动画。 |
| rightAniName | str | 混合的第二个动画名称当1D参数的值为1时指定的骨骼仅播放这个动画。 |
| paramName | str | 自定义的1D参数名称。该参数新建后的初始值为0。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 注意如果对某个骨骼使用了骨骼屏蔽则这个1D线性混合将对该骨骼不会生效。另外如果在使用该接口时新建一个已经存在的参数名称则会将原来的参数覆盖。
- 在动画的层级相同的情况下动画的优先度播放顺序则首先按照1.是否与需要其他动画进行混合。2.是否率先播放 这两个因素来先后决定。例如我们首先对动画A动画B使用接口RegisterAnim1DControlParam注册1D线性混合参数alpha 然后对动画A和动画C使用接口RegisterAnim1DControlParam注册线性混合参数beta。接着先后播放动画A, 动画C动画B动画D。这时由于动画A动画C具有混合需要并且率先播放因此骨骼模型会率先播放动画A和动画C的混合动画注意由于1D线性混合参数的初始值为0因此此时混合动画的表现还是动画A如果此时再暂停动画C则会播放动画A与动画B的混合动画。接着暂停动画B则会播放动画A最后再暂停动画A则才会播放动画D。
- 另一种需要注意的情况如果我们首先对动画A动画B使用接口RegisterAnim1DControlParam注册1D线性混合参数alpha 然后对动画A和动画C使用接口RegisterAnim1DControlParam注册线性混合参数beta。接着先后播放动画A, 动画B动画C。这时我们调用SetAnim1DControlParam接口设置参数beta的值为0.5。此时模型仍然是播放动画A这是由于动画A和动画B具有混合需求并且率先播放的即率先凑齐了参数混合两个动画因此此时模型实际上是在进行动画A和动画B的混合但是由于alpha的值为0因此模型还是表现为动画A如果此时再用SetAnim1DControlParam接口设置参数alpha的值为0.5则能够看到动画A和动画B的混合动画了。
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 新建1D控制参数用于对attack和walk这两个动画进行线性混合参数的名称为“arm_control_param”。
comp.RegisterAnim1DControlParam(modelId, "attack", "walk", "arm_control_param")
# 相继播放这两个动画设置isBlend为True开启动画混合。
comp.ModelPlayAni(modelId, "attack", True, True)
comp.ModelPlayAni(modelId, "walk",True, True)
# 改变1D控制参数的值两个动画将根据该值进行线性混合。可根据实际情况进行动态调整。
comp.SetAnim1DControlParam(modelId, "arm_control_param", 0.5)
```
## RegisterAnim1DMultiControlParam
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
当同时播放多个骨骼动画时,注册用于根据权重控制多动画进行混合的参数
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 模型id |
| paramName | str | 自定义的多动作混合参数名称 |
| animList | list(str) | 需要混合的动作列表 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 相继播放这三个动画设置isBlend为True开启动画混合。
comp.ModelPlayAni(modelId, "attack", True, True)
comp.ModelPlayAni(modelId, "walk",True, True)
comp.ModelPlayAni(modelId, "run",True, True)
# 新建多动作混合控制参数用于对attack、walk和run这三个动画根据权重进行混合参数的名称为"multi_blend_key"。
comp.RegisterAnim1DMultiControlParam(modelId, "multi_blend_key", ["attack", "walk", "run"])
# 改变多动作混合控制参数的值将根据dict中每个动画的权重进行混合。可根据实际情况进行动态调整。
comp.SetAnim1DMultiControlParam(modelId, "multi_blend_key", {"walk":0.5, "run":0.3, "attack":0.2})
```
## RemoveAnim1DMultiControlParam
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
删除用于根据权重控制多动画进行混合的参数
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 模型id |
| paramName | str | 自定义的多动作混合参数名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置删除成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.RemoveAnim1DMultiControlParam(modelId, "multi_blend_key")
```
## RemoveFreeModel
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
移除自由模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要移除的modelId |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功移除 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp.RemoveFreeModel(modelId)
```
## ResetModel
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
恢复实体为原版模型
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.ResetModel()
```
## SetAnim1DControlParam
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
新建动画的1D控制参数后使用该接口对相应的参数进行控制。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要设置的模型id包括实体模型以及自由模型。 |
| paramName | str | 使用接口RegisterAnim1DControlParam所新建的自定义1D参数名称。该参数新建后的初始值为0。 |
| value | float | 参数的值,范围为[0,1]。当1D参数的值为0时仅播放接口RegisterAnim1DControlParam中的leftAniName参数指定的动画当1D参数的值为1时仅播放接口RegisterAnim1DControlParam中的rightAniName参数指定的动画 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 注意如果对某个骨骼使用了骨骼屏蔽则这个1D线性混合将对该骨骼不会生效。
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 新建1D控制参数用于对attack和walk这两个动画进行线性混合参数的名称为“arm_control_param”。
comp.RegisterAnim1DControlParam(modelId, "attack", "walk", "arm_control_param")
# 相继播放这两个动画设置isBlend为True开启动画混合。
comp.ModelPlayAni(modelId, "attack", True, True)
comp.ModelPlayAni(modelId, "walk",True, True)
# 改变1D控制参数的值两个动画将根据该值进行线性混合。可根据实际情况进行动态调整。
comp.SetAnim1DControlParam(modelId, "arm_control_param", 0.5)
```
## SetAnim1DMultiControlParam
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
新建动画的1D控制参数后设置用于根据权重控制多动画进行混合的参数
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 模型id |
| paramName | str | 自定义的多动作混合参数名称 |
| animWeightDict | dict | 动作权重表,可在表中设置每个动作的混合权重 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 相继播放这三个动画设置isBlend为True开启动画混合。
comp.ModelPlayAni(modelId, "attack", True, True)
comp.ModelPlayAni(modelId, "walk",True, True)
comp.ModelPlayAni(modelId, "run",True, True)
# 新建多动作混合控制参数用于对attack、walk和run这三个动画根据权重进行混合参数的名称为"multi_blend_key"。
comp.RegisterAnim1DMultiControlParam(modelId, "multi_blend_key", ["attack", "walk", "run"])
# 改变多动作混合控制参数的值将根据dict中每个动画的权重进行混合。可根据实际情况进行动态调整。
comp.SetAnim1DMultiControlParam(modelId, "multi_blend_key", {"walk":0.5, "run":0.3, "attack":0.2})
```
## SetAnimLayer
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置骨骼动画的层级,动画层级越大,则优先度越高,骨骼模型的骨骼优先播放优先度最高的动画,相同层级的动画则优先播放率先播放的动画。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要设置的模型id包括实体模型以及自由模型 |
| aniName | str | 动画名称 |
| layer | int | 动画层级, 正整数范围为0~255 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 注意设置层级相同的情况下不会改变当前的优先播放序列。举个例子当前存在动画A及动画B动画A的层级为1动画B的层级为0此时骨骼模型播放的动画为动画A。如果将动画A的层级设置为0即动画A及动画B的层级相同则当前仍然会播放动画A因为层级相同的情况下不会改变目前的优先播放序列。要想让骨骼模型播放动画B则需要动画B的层级比动画A的层级高。
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetAnimLayer(modelId, "attack", 1)
```
## SetAnimSpeed
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置某个骨骼动画的播放速度
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| aniName | str | 骨骼动画名称 |
| speed | float | 速度倍率 |
| modelId | int | 需要指定的模型id默认为None表示使用CreateModel时传入的entityID挂接的模型 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
# 操作实体目前加载的模型
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# run动作三倍速
comp.SetAnimSpeed("run", 3.0)
# 指定模型id操作id对应的模型(创建组件时使用levelId)
import mod.client.extraClientApi as clientApi
modelId = 1
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
# run动作三倍速
comp.SetAnimSpeed("run", 3.0, modelId)
```
## SetAnimationAllBoneMask
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置是否屏蔽动画中所有骨骼的动画若开启骨骼屏蔽后该骨骼将不再播放该动画中的动作。该接口会对该动画中所有骨骼生效可通过参数ignoreBoneList来指定不受影响的骨骼名称。通过屏蔽指定骨骼的动画可实现同一个骨骼模型同时在不同骨骼上播放不同的动作动画从而实现快捷的动作融合。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要设置的模型id包括实体模型以及自由模型 |
| aniName | str | 动画名称 |
| ignoreBonesList | list(str) | 忽视的骨骼名称列表。在这个列表中的骨骼将不会被影响。输入空列表时则对所有骨骼执行这次设置。 |
| enable | bool | 是否启用该骨骼的动画。True为不屏蔽启动该骨骼的动画。False为屏蔽不启动该骨骼的动画。 |
| applyToChild | bool | True为对ignoreBoneList中的骨骼的子骨骼也生效False为仅对ignoreBoneList中的骨骼生效默认为True。若ignoreBoneList为空列表则applyToChild无效果。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 在使用该接口屏蔽上下半身的动画时如果骨骼当中存在root骨骼并且root骨骼的子骨骼包含上下半身的骨骼的话root骨骼往往会控制整体骨骼模型的移动要注意root骨骼对其他骨骼的影响。
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 屏蔽名为attack动画中所有骨骼的动画"l_arm"及"r_arm"这两个不受影响,其子骨骼也不受影响
comp.SetAnimationAllBoneMask(modelId, "attack", ["l_arm", "r_arm"], False, True)
```
## SetAnimationBoneMask
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置是否屏蔽动画中指定的骨骼的动画,若开启骨骼屏蔽后,该骨骼将不再播放该动画中的动作。通过屏蔽指定骨骼的动画可实现同一个骨骼模型同时在不同骨骼上播放不同的动作动画,从而实现快捷的动作融合。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要设置的模型id包括实体模型以及自由模型 |
| aniName | str | 动画名称 |
| boneNamesList | list(str) | 骨骼名称列表 |
| enable | bool | 是否启用该骨骼的动画。True为不屏蔽启动该骨骼的动画。False为屏蔽不启动该骨骼的动画。 |
| applyToChild | bool | True为对该骨骼及其子骨骼生效False为仅对该骨骼生效默认为True |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 在使用该接口屏蔽上下半身的动画时如果骨骼当中存在root骨骼并且root骨骼的子骨骼包含上下半身的骨骼的话root骨骼往往会控制整体骨骼模型的移动要注意root骨骼对其他骨骼的影响。
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 屏蔽名为attack动画中的"l_arm"及"r_arm"的骨骼的动画,对其子骨骼也生效
comp.SetAnimationBoneMask(modelId, "attack", ["l_arm", "r_arm"], False, True)
```
## SetBrightness
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.brightnessCompClient.BrightnessCompClient
- 描述
设置实体的亮度
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| brightness | float | 0纯黑<br>1正常亮度<br>1-14较亮甚至纯白<br>超过14通常为纯白即使数值改变也没有明显变化 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | True:设置成功 False:设置失败 |
- 备注
- 目前只支持修改替换了骨骼模型的实体亮度,使用游戏原生模型的实体暂不予支持。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateBrightness(entityId)
success = comp.SetBrightness(0.5)
```
## SetEntityOpacity
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置骨骼模型的透明度,只能对骨骼模型生效,如果设置的是原版模型,则模型的影子会被隐藏。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| opacity | float | 透明度值,取值范围为[0, 1],值越小越透明 |
- 返回值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetEntityOpacity(0.2)
```
## SetEntityScale
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.scaleCompServer.ScaleComponentServer
- 描述
设置实体的放缩比例大小设置比例过大会导致游戏卡顿建议控制在20倍以内
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| entityId | str | 要设置的实体 |
| scale | float | 比例因子 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 成功返回1失败返回-1 |
- 备注
- 该接口支持设置实体替换骨骼模型后的大小以及受minecraft:scale组件影响的原版模型如矿车三叉戟则无效
- 使用该接口设置大小后则不再受minecraft:scale组件控制
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateScale(entityId)
result = comp.SetEntityScale(entityId, scale)
```
## SetEntityShadowShow
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置实体打开/关闭影子渲染
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| flag | bool | True为打开影子渲染False为关闭影子渲染 |
- 返回值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetEntityShadowShow(False)
```
## SetExtraUniformValue
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置shader中特定Uniform的值
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要设置的modelId |
| uniformIndex | int | 要设置的uniform下标目前支持4个范围为1到4。分别对应Shader中的EXTRA_VECTOR1,EXTRA_VECTOR2,EXTRA_VECTOR3,EXTRA_VECTOR4 |
| vec4data | tuple(float,float,float,float) | 要设置的vec4的值。初始值为(0.0, 0.0, 0.0, 0.0) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 若在游戏运行过程中修改shader文件需要调用clientApi.ReloadAllShaders()或者重启游戏才会生效
- 示例
```python
# python代码
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
modelId = comp.GetModelId()
#可向shader传rgba代表红色
comp.SetExtraUniformValue(modelId, 1, (1.0, 0.0, 0.0, 1.0))
// shader代码(分两步):
//第一步, include头文件
#include "uniformExtraVectorConstants.h"
//第二步, shader中直接使用设置的值
void main()
{
vec4 pythonColor = EXTRA_VECTOR1;
...(此处省略无关代码)
}
```
## SetFreeModelAniSpeed
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置自由模型动画的播放速度
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要设置的modelId |
| aniName | str | 要设置的动画名称 |
| speed | float | 播放速度,速度上限为动画帧数,正负数效果相同 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功设置 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(clientApi.GetLevelId())
# 在玩家脚下位置创建自由模型
playerId = clientApi.GetLocalPlayerId()
posComp = clientApi.GetEngineCompFactory().CreatePos(playerId)
playerPos = posComp.GetPos()
modelId = comp.CreateFreeModel("alloy_barrier_1_1_set")
comp.SetFreeModelPos(modelId, playerPos[0], playerPos[1]-3, playerPos[2])
# 需要模型对应的动画在播放才能设置动画速度
comp.ModelPlayAni(modelId, "recover", True)
comp.SetFreeModelAniSpeed(modelId, "recover", 10)
```
## SetFreeModelBoundingBox
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置自由模型的包围盒
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要设置的modelId |
| min | tuple(float,float,float) | 包围盒最小点 |
| max | tuple(float,float,float) | 包围盒最大点 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 成功返回True失败返回False |
- 备注
- min的元素一定要比对应的max的元素小。
- 模型包围盒用于判断渲染剔除:判断一个模型要不要渲染,要看它在不在视野范围内,也就是看游戏摄像机的视锥体(摄像机拍到的范围)和这个包围盒有没有交集。有则说明在视野范围内,反之则不在视野范围内。进而可以剔除掉该模型,不进行渲染。
例如创建的自由模型显示上的大小是3x3x3个方块那么需要将包围盒大小也设置为3x3x3否则如果包围盒比较小例如使用了默认的1x1x1包围盒那么当模型处于屏幕的边缘模型就会不渲染。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp.SetFreeModelBoundingBox(modelId, (-1, -0.9, -0.8), (1, 1, 1))
```
## SetFreeModelPos
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置自由模型的位置
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要设置的modelId |
| x | float | 要设置的位置X轴参数 |
| y | float | 要设置的位置Y轴参数 |
| z | float | 要设置的位置Z轴参数 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功设置 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp.SetFreeModelPos(modelId, 0, 0, 0)
```
## SetFreeModelRot
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置自由模型的方向
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要设置的modelId |
| x | float | 沿X方向的旋转参数 |
| y | float | 沿Y方向的旋转参数 |
| z | float | 沿Z方向的旋转参数 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功设置 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp.SetFreeModelRot(modelId, 0, 0, 0)
```
## SetFreeModelScale
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置自由模型的大小
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要设置的modelId |
| x | float | 沿X方向的比例因子 |
| y | float | 沿Y方向的比例因子 |
| z | float | 沿Z方向的比例因子 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功设置 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp.SetFreeModelScale(modelId, 1, 1, 1)
```
## SetLegacyBindRot
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
用于修复特效挂接到骨骼时的方向
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| enable | bool | 设置为False时可以使特效与骨骼方向一致 |
| modelId | int | 需要指定的模型id默认为None表示使用CreateModel时传入的entityID挂接的模型 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 在挂接特效前调用即可
- 示例
```python
import mod.client.extraClientApi as clientApi
# 操作实体目前加载的模型
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetLegacyBindRot(False)
# 指定模型id操作id对应的模型(创建组件时使用levelId)
import mod.client.extraClientApi as clientApi
modelId = 1
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp.SetLegacyBindRot(False, modelId)
```
## SetModel
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.component.modelCompServer.ModelComponentServer
- 描述
设置骨骼模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelName | str | 模型名称,值为""时重置模型 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置结果 |
- 示例
```python
#设置名称
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModel("xuenv")
```
### 客户端接口
<span id="c0"></span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
替换实体的骨骼模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelName | str | 骨骼模型的名称 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 替换的骨骼模型实例的id。失败返回-1 |
- 备注
- 要恢复原版模型请使用ResetModel接口
- 使用客户端组件更换模型不会同步及存盘仅是纯客户端表现如需要同步及存盘请使用服务器的model组件
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModel("xuenv")
```
## SetModelMaterial
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置骨骼模型所使用的的材质,除了可以设置骨骼模型所使用的<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#7.模型使用自定义材质及更多贴图">自定义材质</a>以外,也可对单个骨骼设置所使用的<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#7.模型使用自定义材质及更多贴图">自定义材质</a>。如果需要设置单个骨骼所使用的材质需要先在netease_model.json下设置"useSplitMeshes"字段为true。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要进行设置材质操作的骨骼模型Id。 |
| material | str | 需要设置的自定义材质的名称。该材质为GPU骨骼渲染下所使用的材质大多数情况下只会使用到这个材质。 |
| materialcpu | str | 需要设置的自定义材质的名称该材质为针对部分低端机设备所使用的CPU蒙皮材质大多数情况下不会使用到这个参数默认值为空字符串。如果该参数为空或者所填入的CPU材质名称不存在则会使用GPU材质替代。因此此时如果GPU材质设置成功则接口也会返回True. |
| boneName | str | 骨骼模型中的骨骼名称。默认值为空字符串。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- CPU蒙皮材质的说明可看<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#7.模型使用自定义材质及更多贴图">自定义材质</a>目前大多数设备都不会用到CPU蒙皮材质仅在部分低端安卓设备中会使用CPU蒙皮材质。如果开发者如无需要都可以不设置CPU蒙皮材质。如开发者有需要则可以参考官方骨骼模型材质data/vanilla_netease/materials/entity.material中的”entity_for_skeleton_cpu“制作自己的CPU蒙皮材质。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 创建大天狗骨骼模型。
modelId = comp.SetModel("datiangou")
# 所有使用到的自定义材质都需已定义在resource_pack/materials/entity.material中。
# 对该骨骼模型设置自己所定义的材质。
print comp.SetModelMaterial(modelId, "my_custom_mat")
# 对该骨骼模型设置自己所定义的材质及低端设备使用到的CPU蒙皮材质。
print comp.SetModelMaterial(modelId, "my_custom_mat", "my_custom_mat_cpu")
# 对该骨骼模型中的某个骨骼设置自己所定义的材质。
# 注意需要用户先在资源包resource_pack/model/netease_model.json中对骨骼模型配置字段"useSplitMeshes"为true以及"splitBonesGroup"中指定了该骨骼,该效果才会生效,否则不生效。
print comp.SetModelMaterial(modelId, "my_custom_mat", "", "L_wing01")
```
## SetModelMultiPassMaterial
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置骨骼模型多pass中使用到的<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#9.骨骼模型自定义多pass">材质列表</a>也可对单个骨骼设置所使用的自定义多Pass材质。如果需要设置单个骨骼所使用的多Pass材质需要先在netease_model.json下设置"useSplitMeshes"字段为true。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要进行设置材质操作的骨骼模型Id。 |
| materialList | list(str) | 多pass所使用的材质列表。 |
| materialCpuList | list(str) | 多pass所使用的CPU蒙皮材质列表。这些材质为针对部分低端机设备所使用的CPU蒙皮材质。默认值为None。大多数情况下不会使用到这个参数如果该参数为None或者为空列表或者所填入的CPU材质名称不存在则会使用GPU材质替代。因此此时如果GPU材质设置成功则接口也会返回True. |
| boneName | str | 骨骼模型中的骨骼名称。默认值为空字符串。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 注意材质列表中的首个材质将会覆盖骨骼模型原本的默认材质。例如使用了SetModelMaterial接口设置了自定义材质A再使用SetModelMultiPassMaterial设置多Pass材质B,C,D则这个自定义材质A将会被B覆盖。骨骼模型此时生效的材质为B,C,D。
- CPU蒙皮材质的说明可看<a href="../../../mcguide/16-美术/6-模型和动作/04-骨骼模型的使用.html#7.模型使用自定义材质及更多贴图">自定义材质</a>目前大多数设备都不会用到CPU蒙皮材质仅在部分低端安卓设备中会使用CPU蒙皮材质。如果开发者如无需要都可以不设置CPU蒙皮材质。如开发者有需要则可以参考官方骨骼模型材质data/vanilla_netease/materials/entity.material中的”entity_for_skeleton_cpu“制作自己的CPU蒙皮材质。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 创建大天狗骨骼模型。
modelId = comp.SetModel("datiangou")
# 设置所使用的到的多pass材质列表
print comp.SetModelMultiPassMaterial(modelId, ["my_mat_default", "my_mat_for_pass_1", "my_mat_for_pass_2"])
# 对该骨骼模型中的某个骨骼设置自己所定义的多pass材质列表。
# 注意需要用户先在资源包resource_pack/model/netease_model.json中对骨骼模型配置字段"useSplitMeshes"为true以及"splitBonesGroup"中指定了该骨骼,该效果才会生效,否则不生效。
print comp.SetModelMultiPassMaterial(modelId, ["my_mat_default", "my_mat_for_pass_1", "my_mat_for_pass_2"], None, "L_wing01")
```
## SetModelOffset
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.component.modelCompServer.ModelComponentServer
- 描述
设置骨骼模型相对于局部坐标系的偏移量,初始值为(0, 0, 0)
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| offset | tuple(float,float,float) | 偏移量 |
- 返回值
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModelOffset((0, 3, 0))
```
### 客户端接口
<span id="c0"></span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
模型增加偏移量
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| offset | tuple(float,float,float) | 偏移向量 |
- 返回值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModelOffset((0, 1, 0))
```
## SetModelPartVisible
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
对骨骼模型中指定的骨骼进行渲染屏蔽,屏蔽后该骨骼不会被渲染出来。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 需要进行屏蔽操作的骨骼模型Id。 |
| boneName | str | 骨骼模型中的骨骼名称。 |
| visible | bool | 显示或者屏蔽。True为显示False为屏蔽 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
# 创建大天狗骨骼模型。
modelId = comp.SetModel("datiangou")
# 屏蔽指定骨骼
print comp.SetModelPartVisible(modelId, "r_wing01", False)
# 注意需要用户先在资源包resource_pack/model/netease_model.json中对骨骼模型配置以下字段"useSplitMeshes"以及"splitBonesGroup",该接口才会生效,否则不生效。
# 例子:
# "datiangou": {
# "skeleton": "skeleton/datiangou_skeleton.json",
# "mesh": "mesh/datiangou_mesh.json",
# "animation": {
# "idle": "animation/datiangou_animation_run.json",
# "fengxi": "animation/datiangou_animation_fengxi.json",
# "run": "animation/datiangou_animation_run.json"
# },
# "arm_model": "datiangou_arm",
#
# // "useSplitMeshes"设为true时读取该模型的时候将按bones来分别生成和存储mesh而不会按以往方法来合成一整个mesh
# // 分离mesh后骨骼模型渲染时也会按照所包含的meshes来逐个渲染因此如果不是需要使用骨骼渲染屏蔽功能建议不要将这个字段设置为true否则会增加性能消耗。
# "useSplitMeshes": true,
# // 分离骨骼组
# "splitBonesGroup": {
# // 指定需要分离出来的骨骼名称指定后能够使用SetModelPartVisible接口进行渲染屏蔽。需要与该骨骼模型的skeleton.json文件中存在的骨骼名称一致大小写一致。
# "R_wing01":{},
# "L_wing01":{},
# "R_arm":{}
# }
# },
```
## SetModelPerspectiveEffect
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置模型透视效果。注:只对自定义骨骼模型生效
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| isPerspective | bool | 是否显示透视颜色 |
| color | tuple(float,float,float,float) | 透视颜色的RGBA值范围0-1 |
- 返回值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModelPerspectiveEffect(True, (1, 0.9, 0, 0.2))
```
## SetModelTexture
<span style="display:inline;color:#ff5555">服务端</span>
method in mod.server.component.modelCompServer.ModelComponentServer
- 描述
设置骨骼模型贴图该接口与SetTexture功能相同但属于服务端接口。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| texture | str | 贴图路径以textures\models为当前路径的相对路径 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置结果 |
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetModelTexture("Osteve")
```
## SetShowArmModel
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置使用骨骼模型后切换至第一人称时是否显示手部模型。需要先为骨骼模型定义arm_modelarm_model的定义可参考demo示例-AwesomeMod中的resourcePack/models/netease_models.json中的大天狗模型定义
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 模型id |
| show | bool | 是否显示 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
modelId = comp.SetModel(datiangou)
# 隐藏手部模型
comp.SetShowArmModel(modelId, False)
```
## SetTexture
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置骨骼模型的贴图该接口与SetModelTexture功能相同但属于客户端接口。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| texture | str | 贴图路径以textures\models为当前路径的相对路径 |
| modelId | int | 需要指定的模型id默认为None表示使用CreateModel时传入的entityID挂接的模型 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
# 操作实体目前加载的模型
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.SetTexture("Osteve")
# 指定模型id操作id对应的模型(创建组件时使用levelId)
import mod.client.extraClientApi as clientApi
modelId = 1
comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp.SetTexture("Osteve", modelId)
```
## ShowCommonHurtColor
<span style="display:inline;color:#ff5555">服务端</span><span style="display:inline;color:#7575f9">客户端</span>
### 服务端接口
<span id="s0"></span>
method in mod.server.component.modelCompServer.ModelComponentServer
- 描述
设置挂接骨骼模型的实体是否显示通用的受伤变红效果
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| show | bool | 是否显示 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 引擎默认打开该选项,需要改变受伤效果可以关闭之后再进行定制
- 示例
```python
import mod.server.extraServerApi as serverApi
comp = serverApi.GetEngineCompFactory().CreateModel(entityId)
comp.ShowCommonHurtColor(True)
```
### 客户端接口
<span id="c0"></span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
设置挂接骨骼模型的实体是否显示通用的受伤变红效果
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| show | bool | 是否显示 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 引擎默认打开该选项,需要改变受伤效果可以关闭之后再进行定制
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.ShowCommonHurtColor(False)
```
## ShowModel
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
显示纯模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要显示的modelId |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| None | 无返回值 |
- 示例
```python
import mod.client.extraClientApi as clientApi
## 当需要自由模型时建议使用LevelId
# comp = clientApi.GetEngineCompFactory().CreateModel(levelId)
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.ShowModel(modelId)
```
## UnBindModelToEntity
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
取消实体上挂接的某个骨骼模型。取消挂接后这个modelId的模型便会销毁无法再使用如果是临时隐藏可以使用HideModel
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要取消挂接的骨骼模型的id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 取消挂接是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(entityId)
comp.UnBindModelToEntity(gunModelId)
```
## UnBindModelToModel
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.modelCompClient.ModelComponentClient
- 描述
取消骨骼模型上挂接的某个骨骼模型。取消挂接后这个modelId的模型便会销毁无法再使用如果是临时隐藏可以使用HideModel
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 要取消挂接的骨骼模型的id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateModel(11)
# subModelId已经绑定在modelId为11的骨骼模型上
comp.UnBindModelToModel(subModelId)
```