动作

  • 类型:Animation

简介

作用

动作是控制角色在满足特定条件下播放什么动画的对象。

创建和使用

玩家可以在工作区或角色对象下创建动作对象。
通常情况下,动作对象放在相应的角色对象下即可被该角色调用。
动作对象也可放在角色子级的动作文件夹、 角色配件 或者 工具 下。
动作状态为状态机中的动作名,修改此属性可以把当前动作设置为受指定状态触发的动作,例如上传一个动作A,动作ID选择动作A的资源ID,动作名选择跑步,则运行后角色的跑步动作将被替换为动作A。目前的角色状态有:站立、跑步、起跳、下落、攀爬、坐下和驾驶。
如果想要替换动作对象中的动作资源,玩家可以利用编辑器自带的动作编辑器编辑动作并上传到素材箱,也可以点击动作资源ID后面的“+”标志,选择素材箱中的动作或导入.RW格式的动作文件,新导入的动作文件会直接替换现有的动作资源。
除了传统的动作编辑功能,动作编辑器还提供利用动作捕捉制作动作的功能。

特点和注意事项

目前动画的函数与事件只能对非状态对应动画生效,即动作名选择“无”的情况。
非状态对应动画在播放结束前被其他高优先级动画播放替代后无法继续播放或循环(例如:角色播放循环的持枪动作过程中播放了一次性的换弹动作,换弹动作播完不会自动回到持枪,需要再次设置持枪动作的播放属性为True才能重新播持枪)。

其他相关

角色动作
动作捕捉功能

相关链接

  • 教学视频

属性

    ClipId     动作资源ID   string   
    动作文件的唯一标识

    AnimationState     动作状态   Enum.StateType   
    动作所对应的角色状态

    Speed     播放速度   float   
    动画播放的速度

    AnimationTimePosition     播放时间点   float   
    当前动画播放到的时间点

    AnimationLength     动画长度   float    [只读]
    动画长度,单位秒

    IsAnimationPlaying     是否正在播放   bool    [只读]
    当前动画是否正在播放

    UpperBodyPriority     上半身动作优先级   int   
    多个动画同时播放时以优先级判断对应部件播放哪个动画,优先级越大越优先,相同优先级播放后执行的动作,基础动作的优先级均为0

    UnderBodyPriority     下半身动作优先级   int   
    多个动画同时播放时以优先级判断对应部件播放哪个动画,优先级越大越优先,相同优先级播放后执行的动作,基础动作的优先级均为0

    LeftPriority     左手动作优先级   int   
    多个动画同时播放时以优先级判断对应部件播放哪个动画,优先级越大越优先,相同优先级播放后执行的动作,基础动作的优先级均为0

    RightPriority     右手动作优先级   int   
    多个动画同时播放时以优先级判断对应部件播放哪个动画,优先级越大越优先,相同优先级播放后执行的动作,基础动作的优先级均为0

    Play     播放动作   bool   
    播放当前资源中的动作

    Loop     动作循环   bool   
    循环播放当前资源中的动作,单独勾选不能生效,需和播放动作一起勾选

继承自RWObject

    Name     名称   string   
    该对象的自定义名称

    ClassName     类型   string   
    该对象对应的对象类型名称

    Parent     父级   RWObject   
    该对象的父级对象

函数

    PlayAnimation()
    播放当前动画

    StopAnimation()
    停止播放当前动画

    GetAnimationEvent(eventName)
    获取动作中事件

继承自RWObject

    DelAllChild()
    删除所有子对象

    Available()
    检查对象是否可用

    Clone(parent)
    复制自身,若有参数则以参数为父级

    Destroy()
    删除自身

    GetAncestorByName(Name)
    通过对象名字寻找父级对象

    GetAncestorByClassName(className)
    通过对象类型寻找父级对象

    GetChildByName(Name,recursive)
    通过对象名字寻找子级对象

    GetChildByClassName(className,recursive)
    通过对象类型寻找子级对象

    GetAllChild()
    寻找自身所有子级对象,并作为一个列表返回

    GetAllDescendant()
    递归寻找自身所有后代,并作为一个列表返回

    IsAncestor(TarObj)
    判断自身是否为目标对象的祖先

    IsDescendant(TarObj)
    判断自身是否为目标对象的后代

    WaitForChild(childName,timeout)
    寻找自身的子对象。如果没有子对象,在没有填写timeout参数时,会暂停进程直到找到子对象;如果填写了timeout参数,会根据参数时间暂停进程,超出参数时间后,进程照常进行

    Child(childName)
    根据给定的名字寻找自身的子对象

    Equals(TarObj)
    判断自身是否为目标对象,结果为真返回True,结果为假返回False;注意克隆、新建同类型、同名对象,equal结果均为假

    IsClass(className)
    判断自身是否为给定的对象类型

事件

    AnimationLoop()
    动画循环播放完毕,下一次循环开始前,触发此事件

    AnimationComplete()
    动画播放完毕后,触发此事件

    onAvatarAnimationPlayed()
    角色动画播放时,触发此事件

继承自RWObject

    Destroyed()
    删除自身时触发

    ChildAdded(childobject)
    添加子对象时触发

    ChildRemoved(childobject)
    移除子对象时触发

    DescendantAdded(descendantobject)
    添加后代时触发

    DescendantRemoved(descendantobject)
    移除后代时触发

    AncestryChanged(AncestryChanged)
    祖先变更时触发

文档更新时间: 2020-08-25 10:42   作者:刘征