# 客户端表现实体创建

注意,以下特效的创建仅在客户端有效,如果想要多人同时看到某个特效,需要服务端通过事件系统发送消息到对应的客户端。

# 特效

# 创建序列帧特效

CreateEngineSfx

  • 描述

    用于创建序列帧特效

  • 参数

    参数名 数据类型 说明
    path str 特效资源路径,不用后缀名
    pos tuple(float,float,float) 创建位置,可选,没传则可以创建完用frameAniTrans组件设置
    rot tuple(float,float,float) 角度,可选,没传则可以创建完用frameAniTrans组件设置
    scale float 缩放系数,可选,没传则可以创建完用frameAniTrans组件设置
  • 返回值

    数据类型 说明
    int或None frameEntityId或者None
  • 备注

    • 创建序列帧后,可以用返回的frameEntityId创建序列帧分类中的相关组件,设置所需属性,以实现各种表现效果
    • 切换维度后会自动隐藏非本维度创建的而且没有绑定实体的序列帧, 回到该维度后会自动重新显示
    • 需要注意,序列帧创建之后需要调用frameAniControl组件的play函数才会播放,如果播放非本维度创建的序列帧,会同时修改该序列帧的创建维度为当前维度
  • 示例

import mod.client.extraClientApi as clientApi
compFactory = clientApi.GetEngineCompFactory()
class MyClientSystem(ClientSystem):
    # 创建
    def createSfx(self):
        frameEntityId = self.CreateEngineSfx("textures/sfxs/snow_3")
        frameAniTransComp = compFactory.CreateFrameAniTrans(frameEntityId)
        frameAniTransComp.SetPos((10,10,10))
        frameAniTransComp.SetRot((0,0,0))
        frameAniTransComp.SetScale((1,1,1))
        frameAniControlComp = compFactory.CreateFrameAniControl(frameEntityId)
        frameAniControlComp.Play()

    # 删除
    def removeSfx(self, frameEntityId):
        self.DestroyEntity(frameEntityId)

# 创建模型特效

CreateEngineEffect

  • 描述

    指用编辑器保存资源包中models/effect/xxx_effect.json生成编辑好的所有挂点的所有特效。生成的特效会自动进行挂接及播放,编辑器中设为不可见的特效也会进行播放。并且使用这种方式创建的特效,开发者不用维护entity进出视野导致的挂接特效被移除,引擎会在entity每次进入视野时自动创建所有特效。

  • 参数

    参数名 数据类型 说明
    path str 特效配置路径,需要包含json后缀名
    bindEntity str 绑定实体的Id
    aniName str 选择使用哪个模型动作的特效
  • 返回值

    数据类型 说明
    int或None effectEntityId或者None
  • 备注

    • 创建特效前需要将entity的骨骼模型替换为编辑器中的一致(或者其他骨骼相同的模型),否则将挂接失败,替换模型见服务端和客户端的model组件。
    • 暂不支持挂接原版史蒂夫的特效。
  • 示例

class MyClientSystem(ClientSystem):
    # 创建
    def createEffect(self):
        # 绑定在本地玩家身上的模型特效
        effectEntityId = self.CreateEngineEffect("models/effect/xuenv_effect.json", extraClientApi.GetLocalPlayerId(), 'idle')

    # 删除
    def removeEffect(self, effectEntityId):
        self.DestroyEntity(effectEntityId)

# 创建特效编辑器编辑的序列帧特效

CreateEngineSfxFromEditor

  • 描述

    指使用资源包中effects/xxx.json,按照编辑器中编辑好的参数创建序列帧。支持环状序列帧

  • 参数

    参数名 数据类型 说明
    path str 特效配置路径,需要为"effects/xxx.json","xxx"为编辑器创建序列帧时填写的名称
    pos tuple(float,float,float) 创建位置,可选,没传则可以创建完用frameAniTrans组件设置,一般需要设置播放的位置
    rot tuple(float,float,float) 角度,可选,没传则可以创建完用frameAniTrans组件设置
    scale float 缩放系数,可选,没传则可以创建完用frameAniTrans组件设置
  • 返回值

    数据类型 说明
    int或None frameEntityId或者None
  • 备注

    • 创建序列帧后,可以用返回的frameEntityId创建序列帧分类中的相关组件,设置所需属性,以实现各种表现效果
    • 需要注意,序列帧创建之后需要调用frameAniControl组件的play函数才会播放
    • 根据editor配置生成序列帧后还需要设置位置或绑定,以及进行播放。
  • 示例

import mod.client.extraClientApi as clientApi
compFactory = clientApi.GetEngineCompFactory()
class MyClientSystem(ClientSystem):
    # 创建
    def createSfxFromEditor(self):
        frameEntityId = self.CreateEngineSfxFromEditor("effects/mySfx.json")
        frameAniTransComp = compFactory.CreateFrameAniTrans(frameEntityId)
        frameAniTransComp.SetPos((10,10,10))
        frameAniTransComp.SetRot((0,0,0))
        frameAniTransComp.SetScale((1,1,1))
        frameAniControlComp = compFactory.CreateFrameAniControl(frameEntityId)
        frameAniControlComp.Play()

    # 删除
    def removeSfx(self, frameEntityId):
        self.DestroyEntity(frameEntityId)

# 创建粒子特效

CreateEngineParticle

  • 描述

    用于创建粒子特效

  • 参数

    参数名 数据类型 说明
    path str 特效资源路径,需要加上后缀名(一般是json)
    pos tuple(float,float,float) 创建位置坐标
  • 返回值

    数据类型 说明
    int或None particleEntityId或者None
  • 备注

    • 创建粒子后,可以用返回的particleEntityId创建客户端粒子分类中的相关组件,设置所需属性,以实现各种表现效果。
    • 切换维度后会自动隐藏非本维度创建的而且没有绑定实体的粒子, 回到该维度后会自动重新显示
    • 粒子创建之后需要调用particleControl组件的Play函数才会播放,如果播放非本维度创建的粒子,会同时修改该粒子的创建维度为当前维度
  • 示例

import mod.client.extraClientApi as clientApi
compFactory = clientApi.GetEngineCompFactory()
class MyClientSystem(ClientSystem):
    # 创建
    def createParticle(self):
        particleEntityId = self.CreateEngineParticle("effects/fire.json", (0,5,0))
        particleControlComp = compFactory.CreateParticleControl(particleEntityId)
        particleControlComp.Play()

    # 删除
    def removeParticle(self, particleEntityId):
        self.DestroyEntity(particleEntityId)