Files
netease-modsdk-wiki/docs/mcdocs/1-ModAPI/接口/特效/粒子.md
2025-03-17 13:24:39 +08:00

785 lines
20 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
---
# 粒子
## Bind
<span style="display:inline;color:#7575f9">客户端</span>
<span id="0"></span>
method in mod.client.component.particleEntityBindComp.ParticleEntityBindComp
- 描述
绑定entity
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| bindEntityId | str | 绑定的entity的ID |
| offset | tuple(float,float,float) | 绑定的偏移量相对绑定entity脚下中心 |
| rot | tuple(float,float,float) | 绑定的旋转角度 |
| correction | bool | 默认不开启,开启后可以使特效的旋转角度准确设置为参照玩家的相对角度 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleEntityBind(particleEntityId)
comp.Bind(entityId, (0, 1, 0), (0, 0, 0))
```
<span id="1"></span>
method in mod.client.component.particleSkeletonBindComp.ParticleSkeletonBindComp
- 描述
绑定骨骼模型
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| modelId | int | 绑定的骨骼模型的ID见model组件的GetModelId |
| boneName | str | 绑定具体骨骼的名称 |
| offset | tuple(float,float,float) | 绑定的偏移量 |
| rot | tuple(float,float,float) | 绑定的旋转角度 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleSkeletonBind(particleEntityId)
comp.Bind(modelId, "root", (0, 1, 0), (0, 0, 0))
```
## CreateEngineParticle
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.system.clientSystem.ClientSystem
- 描述
用于创建粒子特效
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| path | str | 特效资源路径需要加上后缀名一般是json |
| pos | tuple(float,float,float) | 创建位置坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int或None | particleEntityId或者None |
- 备注
- 创建粒子后可以用返回的particleEntityId创建客户端粒子分类中的相关组件设置所需属性以实现各种表现效果。
- 切换维度后会自动隐藏非本维度创建的而且没有绑定实体的粒子, 回到该维度后会自动重新显示
- 粒子创建之后需要调用particleControl组件的Play函数才会播放如果播放非本维度创建的粒子,会同时修改该粒子的创建维度为当前维度
- 示例
```python
import mod.client.extraClientApi as clientApi
class MyClientSystem(ClientSystem):
# 创建
def createParticle(self):
particleEntityId = self.CreateEngineParticle("effects/fire.json", (0,5,0))
particleControlComp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
particleControlComp.Play()
# 删除
def removeParticle(self, particleEntityId):
self.DestroyEntity(particleEntityId)
```
## GetParticleEmissionRate
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
获取粒子发射器每帧发射粒子的频率。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float) | 粒子发射器每帧发射粒子的频率。 |
- 备注
- 该接口所获取的值对应粒子特效json文件中"emissionrate"的值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.GetParticleEmissionRate()
```
## GetParticleMaxNum
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
获取粒子发射器包含的最大粒子数量。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| int | 粒子发射器所包含的最大粒子数量。 |
- 备注
- 该接口所获取的值对应粒子特效json文件中"numparticles"的值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.GetParticleMaxNum()
```
## GetParticleMaxSize
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
获取粒子特效中粒子大小的最大值。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float) | 粒子大小的最大值 |
- 备注
- 该接口获取的值对应粒子特效json文件中"particlesize"的"max"值。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.GetParticleMaxSize()
```
## GetParticleMinSize
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
获取粒子特效中粒子大小的最小值。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float) | 粒子大小的最小值。 |
- 备注
- 该接口获取的值对应粒子特效json文件中"particlesize"的"min"值。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.GetParticleMinSize()
```
## GetParticleVolumeSize
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
获取粒子发射器的体积大小缩放值。
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float) | 粒子发射器的体积大小缩放值。 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.GetParticleVolumeSize()
```
## GetPos
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleTransComp.ParticleTransComp
- 描述
获取粒子发射器的世界坐标位置
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float) | 返回粒子发射器的世界坐标位置 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleTrans(particleEntityId)
comp.GetPos()
```
## GetRot
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleTransComp.ParticleTransComp
- 描述
获取粒子发射器的旋转角度
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| tuple(float,float,float) | 返回粒子发射器的旋转角度 |
- 备注
- 注意当使用SetRotation设置旋转角度时设置的x轴方向的旋转接近90度或者-90度此时会由于旋转的奇异性计算旋转角度时会出现除0的问题因此为了避免这种情况会采用奇异情况下的计算公式来计算这种情况接口返回的是与SetRotUseZXY接口所设置的值等价的旋转角度。
- 该接口获取的旋转值对应接口SetRotUseZXY所设置的旋转值。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleTrans(particleEntityId)
comp.GetRot()
```
## Pause
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
暂停播放粒子定格在当前时刻再次调用Play时继续播放
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.Pause()
```
## Play
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
播放粒子特效
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.Play()
```
## SetFadeDistance
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
设置粒子开始自动调整透明度的距离。粒子与摄像机之间的距离小于该值时会自动调整粒子的透明度,距离摄像机越近,粒子越透明
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| fadeDistance | float | 自动调整透明度的距离,应为正数,负数将视作零来处理 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
# 设置该粒子在与相机距离小于3时会自动调整透明度
comp.SetFadeDistance(3)
```
## SetLayer
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
粒子默认层级为1当层级不为1时表示该特效开启特效分层渲染功能。特效粒子和帧动画分层渲染时层级越高渲染越靠后层级大的会遮挡层级低的且同一层级的特效会根据特效的相对位置产生正确的相互遮挡关系。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| layer | int | 粒子渲染层级总共包含0-15的层级。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 该接口只针对粒子进行设置序列帧特效请使用frameAniControl组件
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
# 设置渲染层级为2
comp.SetLayer(2)
```
## SetParticleEmissionRate
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
设置粒子发射器每帧发射粒子的频率频率越大则每帧发射的粒子数量越多但粒子数量不会超过粒子发射器的粒子容量同时由于性能考虑每帧发射的粒子数量也不会超过100个。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| minRate | float | 每帧发射粒子频率的最小值。每帧发射粒子的频率将在频率最小值和频率最大值之间取随机数进行插值。当该值设置为负值时设置将会失败,且该值不能比粒子频率的最大值大。 |
| maxRate | float | 每帧发射粒子频率的最大值。每帧发射粒子的频率将在频率最小值和频率最大值之间取随机数进行插值。当该值设置为负值时设置将会失败,且该值不能比粒子频率的最小值小。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 该接口所设置的值对应粒子特效json文件中"emissionrate"的值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
# 扩充粒子发射器的粒子容量
comp.SetParticleMaxNum(1000)
# 提高发射粒子的频率
comp.SetParticleEmissionRate(15,20)
```
## SetParticleMaxNum
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
设置粒子发射器的粒子容量,即粒子发射器所包含的最大粒子数量。该数量并不代表目前粒子发射器所发射的粒子数量,如需要增加发射的粒子数量,需同时改变粒子的发射频率。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| num | int | 粒子发射器所包含的最大粒子数量不能为负值粒子的数量最大值不超过100000。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 考虑到性能的原因请注意粒子的数量不要设置过大。该接口设置的值对应粒子特效json文件中"numparticles"的值
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.SetParticleMaxNum(1000)
```
## SetParticleSize
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
设置粒子特效中粒子大小的最小值及最大值。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| minSize | tuple(float,float) | 粒子大小的最小值(x,y)。x值影响粒子的左右拉伸程度y值影响粒子的上下拉伸程度。粒子特效中的粒子大小会在最小值和最大值当中取随机值进行决定。当该值设置为负值时设置将会失败且该值不能比粒子大小的最大值大。 |
| maxSize | tuple(float,float) | 粒子大小的最大值(x,y)。x值影响粒子的左右拉伸程度y值影响粒子的上下拉伸程度。粒子特效中的粒子大小会在最小值和最大值当中取随机值进行决定。当该值设置为负值时设置将会失败且该值不能比粒子大小的最小值小。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 该接口设置的值对应粒子特效json文件中"particlesize"的值。
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.SetParticleSize((0.5,0.5),(0.6,0.6))
```
## SetParticleVolumeSize
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
设置粒子发射器的体积大小缩放,不影响单个粒子的尺寸。粒子发射器的体积越大,则粒子的发射范围越大。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| scale | tuple(float,float,float) | 粒子发射器的体积大小缩放值(x,y,z), x,y,z分别为各个坐标轴方向的缩放值该值越大该方向发射粒子的范围越大。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 当粒子绑定实体时该设置无效
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.SetParticleVolumeSize((1,0,0))
```
## SetPos
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleTransComp.ParticleTransComp
- 描述
设置粒子发射器的世界坐标位置
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| pos | tuple(float,float,float) | 世界坐标 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleTrans(particleEntityId)
comp.SetPos((0, 5, 0))
```
## SetRelative
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
当粒子绑定了entity或骨骼模型时发射出的粒子使用entity坐标系还是世界坐标系。与mcstudio特效编辑器中粒子的“相对挂点运动”选项功能相同。
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| relative | bool | True表示相对坐标系False表示世界坐标系 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
# 使用世界坐标系
comp.SetRelative(False)
```
## SetRotUseZXY
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleTransComp.ParticleTransComp
- 描述
设置粒子发射器的旋转旋转顺序按照绕z,x,y轴旋转
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| rot | tuple(float,float,float) | 绕局部坐标系的+z+x+y轴旋转的角度旋转顺序按照绕z,x,y轴旋转。 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleTrans(particleEntityId)
# 绕z轴旋转90度然后绕y轴旋转90度
comp.SetRotUseZXY((0, 90, 90))
```
## SetUsePointFiltering
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
设置粒子材质的纹理滤波是否使用点滤波方法。默认为使用双线性滤波
- 参数
| 参数名 | <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- | :--- |
| enable | bool | true为使用点滤波方法false为使用默认的双线性滤波 |
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 备注
- 使用点滤波的图像通常边缘清晰、可能会有较强烈的锯齿感;使用双线性插值的图像通常比较平滑、可能会使图像一定程度上变得模糊
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
# 设置使用点滤波
comp.SetUsePointFiltering(True)
comp.Play()
```
## Stop
<span style="display:inline;color:#7575f9">客户端</span>
method in mod.client.component.particleControlComp.ParticleControlComp
- 描述
停止粒子播放
- 参数
- 返回值
| <div style="width: 4em">数据类型</div> | 说明 |
| :--- | :--- |
| bool | 设置是否成功 |
- 示例
```python
import mod.client.extraClientApi as clientApi
comp = clientApi.GetEngineCompFactory().CreateParticleControl(particleEntityId)
comp.Stop()
```