Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/接口/虚拟世界/模型.md
2025-03-17 13:24:39 +08:00

888 lines
28 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
---
# 模型
## ModelCancelAllBoneMask
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
取消动画中的所有骨骼屏蔽。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| animationName | str | 模型的动画 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
virtualWorldComp.ModelCancelAllBoneMask(objId, "attack")
```
## ModelCreateMinecraftObject
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
在虚拟世界中创建微软原版模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| identifier | str | 模型的identifier |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 返回模型对象的id, 失败时返回-1 |
- 备注
- 创建模型后需要使用 ModelUpdateAnimationMolangVariable 为该模型json动作文件里面的所有变量进行赋值不然运行时会有大量非空判断处理会产生性能下降
- 模型创建时初始默认朝向为+z方向, 位置为相机朝向的正前方10个单位建议后续对坐标进行修改
- 创建的原版模型需要改变播放的动作,只能通过 ModelUpdateAnimationMolangVariable 接口修改molang变量进行控制,不兼容组件中的其它动作接口
- 暂不支持的微软原版模型minecraft:horse、minecraft:donkey、minecraft:mule骡子、minecraft:skeleton_horse骷髅马、minecraft:zombie_horse僵尸马、minecraft:llama羊驼、minecraft:tropicalfish热带鱼、minecraft:slime史莱姆、minecraft:magma_cube岩浆怪、minecraft:ghast恶魂、minecraft:shulker潜影贝、minecraft:ender_dragon末影龙、minecraft:thrown_trident三叉戟、minecraft:ender_crystal末影水晶、minecraft:boat、minecraft:tntTNT
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
virtualWorldComp.ModelCreateMinecraftObject("minecraft:sheep")
virtualWorldComp.ModelUpdateAnimationMolangVariable(id, {"variable.state": 2, "variable.liedownamount": 0})
```
## ModelCreateObject
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
在虚拟世界中创建网易骨骼模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelName | str | 模型的资源 |
| animationName | str | 模型的动画 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 返回模型对象的id, 失败时返回-1 |
- 备注
- 模型创建时初始默认朝向为+z方向, 位置为相机朝向的正前方10个单位建议后续对坐标进行修改
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
virtualWorldComp.ModelCreateObject("datiangou", "run")
```
## ModelGetPos
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
获取模型的坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float) | 模型的坐标(x, y, z), 模型不存在的话则返回None |
- 备注
- 若对象绑定到其它对象上,则返回无意义,以绑定时参数为准
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetPos(objId, (0.0, 0.0, -10.0))
pos = virtualWorldComp.ModelGetPos(objId)
```
## ModelGetRot
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
返回模型的旋转角度
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float) | 旋转角度(x, y, z), 模型不存在则返回None |
- 备注
- 若对象绑定到其它对象上,则返回无意义,以绑定时参数为准
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetRot(objId, (0.0, 90.0, 0.0))
rot = virtualWorldComp.ModelGetRot(objId)
```
## ModelIsVisible
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
返回模型可见性
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否可见 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
id = virtualWorldComp.ModelCreateObject("datiangou", "run")
print(virtualWorldComp.ModelIsVisible(id))
```
## ModelMoveTo
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置模型平移运动
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| pos | tuple(float,float,float) | 坐标值(x, y, z) |
| time | float | 单位秒运动时长大于0的浮点数 |
| ease | TimeEaseType | 时间变化函数, 默认值为clientApi.GetMinecraftEnum().TimeEaseType.linear, 参数不在枚举值中也当作linear |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetPos(objId, (0.0, 0.0, 0.0))
virtualWorldComp.ModelMoveTo(objId, (0.0, 0.0, -10.0), 3.0, clientApi.GetMinecraftEnum().TimeEaseType.linear)
```
## ModelPlayAnimation
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
模型播放动画支持动作融合其功能与模型接口ModelPlayAni相同。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| animationName | str | 模型的动画 |
| loop | bool | 是否循环播放 |
| isBlended | bool | 播放时是与当前动画混合还是中止当前动画的播放默认False即中止当前动画播放。设置为True时将允许即将播放的动画进行混合(注意,在没有设置骨骼屏蔽或是设置线性混合参数的情况下不会产生混合效果)。另外动画混合仅在相同层级的动画之间进行。若当前播放的动画与即将播放的动画层级不一样则isBlended参数无效。 |
| layer | int | 设置骨骼动画的层级范围为0~255默认为0。注意如果播放的动画已经存在则会将原有的动画层级覆盖。动画层级越大则优先度越高骨骼模型的骨骼优先播放优先度最高的动画。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelPlayAnimation(objId, "fengxi", True)
```
## ModelRegisterAnim1DControlParam
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
当同时播放多个骨骼动画时新建用于控制动画进行1D线性混合的参数。目前线性混合仅支持对两个动画进行混合。新建的参数值范围为[0,1]。指定的骨骼将会按照这个参数的值对两个动画进行线性混合。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| leftAniName | str | 混合的第一个动画名称当1D参数的值为0时指定的骨骼仅播放这个动画。 |
| rightAniName | str | 混合的第二个动画名称当1D参数的值为1时指定的骨骼仅播放这个动画。 |
| paramName | str | 自定义的1D参数名称。该参数新建后的初始值为0。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 注意如果对某个骨骼使用了骨骼屏蔽则这个1D线性混合将对该骨骼不会生效。另外如果在使用该接口时新建一个已经存在的参数名称则会将原来的参数覆盖。
- 示例
```python
import mod.client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
# 新建1D控制参数用于对attack和walk这两个动画进行线性混合参数的名称为“arm_control_param”。
virtualWorldComp.ModelRegisterAnim1DControlParam(objId, "attack", "walk", "arm_control_param")
# 相继播放这两个动画设置isBlend为True开启动画混合。
virtualWorldComp.ModelPlayAnimation(objId, "attack", True, True)
virtualWorldComp.ModelPlayAnimation(objId, "walk",True, True)
# 改变1D控制参数的值两个动画将根据该值进行线性混合。可根据实际情况进行动态调整。
virtualWorldComp.ModelSetAnim1DControlParam(objId, "arm_control_param", 0.5)
```
## ModelRemove
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
销毁虚拟世界中的模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否销毁成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelRemove(objId)
```
## ModelRotate
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
模型绕某个轴旋转多少度
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| degreeAngle | float | 旋转角度,为了避免数值过大出现浮点误差,建议角度范围控制在-360度到360度 |
| axis | tuple(float,float,float) | 旋转轴(x, y, z) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelRotate(objId, 90.0, (0.0, 1.0, 0.0))
```
## ModelRotateTo
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置模型旋转运动
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| rot | tuple(float,float,float) | 旋转值(x, y, z) |
| time | float | 单位秒运动时长大于0的浮点数 |
| ease | TimeEaseType | 时间变化函数, 默认值为clientApi.GetMinecraftEnum().TimeEaseType.linear, 参数不在枚举值中也当作linear |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetRot(objId, (0.0, 0.0, 0.0))
virtualWorldComp.ModelRotateTo(objId, (0.0, 90.0, 0.0), 3.0, clientApi.GetMinecraftEnum().TimeEaseType.linear)
```
## ModelSetAnim1DControlParam
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
新建动画的1D控制参数后使用该接口对相应的参数进行控制。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | 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
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
# 新建1D控制参数用于对attack和walk这两个动画进行线性混合参数的名称为“arm_control_param”。
virtualWorldComp.ModelRegisterAnim1DControlParam(objId, "attack", "walk", "arm_control_param")
# 相继播放这两个动画设置isBlend为True开启动画混合。
virtualWorldComp.ModelPlayAnimation(objId, "attack", True, True)
virtualWorldComp.ModelPlayAnimation(objId, "walk",True, True)
# 改变1D控制参数的值两个动画将根据该值进行线性混合。可根据实际情况进行动态调整。
virtualWorldComp.ModelSetAnim1DControlParam(objId, "arm_control_param", 0.5)
```
## ModelSetAnimAllBoneMask
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置是否屏蔽动画中所有骨骼的动画若开启骨骼屏蔽后该骨骼将不再播放该动画中的动作。该接口会对该动画中所有骨骼生效可通过参数ignoreBoneList来指定不受影响的骨骼名称。通过屏蔽指定骨骼的动画可实现同一个骨骼模型同时在不同骨骼上播放不同的动作动画从而实现快捷的动作融合。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| animationName | 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
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
# 屏蔽名为attack动画中所有骨骼的动画"l_arm"及"r_arm"这两个不受影响,其子骨骼也不受影响
virtualWorldComp.ModelSetAnimAllBoneMask(objId, "attack", ["l_arm", "r_arm"], False, True)
```
## ModelSetAnimBoneMask
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置是否屏蔽动画中指定的骨骼的动画,若开启骨骼屏蔽后,该骨骼将不再播放该动画中的动作。通过屏蔽指定骨骼的动画可实现同一个骨骼模型同时在不同骨骼上播放不同的动作动画,从而实现快捷的动作融合。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| animationName | 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
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
# 屏蔽名为attack动画中的"l_arm"及"r_arm"的骨骼的动画,对其子骨骼也生效
virtualWorldComp.ModelSetAnimBoneMask(objId, "attack", ["l_arm", "r_arm"], False, True)
```
## ModelSetAnimLayer
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置骨骼动画的层级,动画层级越大,则优先度越高,骨骼模型的骨骼优先播放优先度最高的动画,相同层级的动画则优先播放率先播放的动画。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| animationName | 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
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
virtualWorldComp.ModelSetAnimLayer(objId, "attack", 1)
```
## ModelSetBoxCollider
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置模型的包围盒
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| lengths | tuple(float,float,float) | 模型包围盒各个方向的长度,(x,y,z) |
| offset | tuple(float,float,float) | 模型包围盒中心的偏移,(x,y,z),默认为(0.0,0.0,0.0) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetBoxCollider(objId, (2.0, 2.0, 2.0), (0.0, 0.0, 0.0))
```
## ModelSetPos
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置模型坐标
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| pos | tuple(float,float,float) | 坐标(x, y, z) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 若对象绑定到其它对象上,则修改无效,实际位置以绑定时参数为准
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetPos(objId, (0.0, 0.0, -10.0))
```
## ModelSetRot
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置模型的旋转角度
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| rot | tuple(float,float,float) | 旋转角度(x, y, z)初始默认为(0, 0, 0)指向z轴负方向。 为了避免数值过大出现浮点误差,建议各维度角度控制范围在-360度到360度 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 若对象绑定到其它对象上,则修改无效,实际旋转角度以绑定时参数为准
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetRot(objId, (0.0, 90.0, 0.0))
```
## ModelSetScale
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置模型的缩放值
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| scales | tuple(float,float,float) | 缩放值(x, y, z) |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetScale(objId, (2.0, 2.0, 2.0))
```
## ModelSetVisible
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
设置模型可见性
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| isVisible | bool | 是否可见 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
id = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetVisible(id, False)
```
## ModelStopActions
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
停止模型的移动和旋转运动
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否停止成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
objId = virtualWorldComp.ModelCreateObject("datiangou", "run")
virtualWorldComp.ModelSetPos(objId, (0.0, 0.0, 0.0))
virtualWorldComp.ModelSetRot(objId, (0.0, 0.0, 0.0))
virtualWorldComp.ModelMoveTo(objId, (0.0, 0.0, -10.0), 3.0, clientApi.GetMinecraftEnum().TimeEaseType.linear)
virtualWorldComp.ModelRotateTo(objId, (0.0, 90.0, 0.0), 3.0, clientApi.GetMinecraftEnum().TimeEaseType.linear)
virtualWorldComp.ModelStopActions(objId)
```
## ModelStopAnimation
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
停止播放指定的模型动画。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| animationName | str | 模型的动画 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否暂停成功 |
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
virtualWorldComp.ModelStopAnimation(objId, "fengxi")
```
## ModelUpdateAnimationMolangVariable
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.virtualWorldCompClient.VirtualWorldCompClient
- 描述
更新微软原版模型表达式变量,可控制动作的改变
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| objId | int | 模型对象的id |
| molangDict | dict | 键值对形式的数据 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 是否设置成功 |
- 备注
- 如果创建模型后同一帧内马上调用该接口则客户端实体配置中的scripts/initialize字段不再会执行。
- 示例
```python
import client.extraClientApi as clientApi
virtualWorldComp = clientApi.GetEngineCompFactory().CreateVirtualWorld(clientApi.GetLevelId())
id = virtualWorldComp.ModelCreateMinecraftObject("minecraft:cat")
virtualWorldComp.ModelUpdateAnimationMolangVariable(id, {"variable.state": 2, "variable.liedownamount": 0})
```