从虚幻4动画系统与控制器交互理解数据驱动(一)古老的写法-创新互联

游戏开发中古老的思想是认为,游戏是程序和数据来构成的,程序加载数据,并根据当前游戏的各种“状态”来调用对应的代码分支,由对应的代码分支来控制数据的使用,重要的数据之一就是动画。具体表现为,在游戏开发中对于动画会大量的使用状态机。

从网站建设到定制行业解决方案,为提供网站制作、网站建设服务体系,各种行业企业客户提供网站建设解决方案,助力业务快速发展。创新互联公司将不断加快创新步伐,提供优质的建站服务。

我们先看古老游戏的动画系统,在后面我们再讨论虚幻4的动画……

一个古老的游戏动画库伪码大概是这样的:

Class 动画数据
{
    void 创建(动画数据文件路径)
    void 释放()
    
    void 播放()
    void 绘制()
    ...
}


Class 动画播放器//状态机
{
    void 创建(动画数据句柄)
    void 释放()
    
    状态码 获得当前动画状态()
    void 切换动画状态(状态码)
    void 更新动画()
    void 绘制()
    void 绑定回调(...)
    ...
}

然后我们在实际使用的时候,找个游戏做例子,比如:

老板说:我们抄一个《×××人》

从虚幻4动画系统与控制器交互理解数据驱动(一)古老的写法

根据需求,我们的主角需要如下动画资源:

角色向上行走动画

角色向下行走动画

角色向左行走动画

角色向右行走动画(可由镜像获得 )

角色死亡动画

这已经把动画素材的需求量减到最小了,至少需要这么多资源

然后我们来实现主角类

Class 主角
{
    void 创建()
    {
        动画播放器句柄 = 动画播放器.创建(主角的动画数据句柄)
    }
    
    void 更新()
    void 绘制()
    
    动画播放器句柄
    ...
}

在更新函数中,我们使用状态机来控制分支代码,分支结构有各种各样的写法:函数指针组,if-else,switch-case,状态模式,等等……

用最傻的写法switch-case实现主角::更新()

//需要我们添加一些状态码来记录角色状态,这也是一个状态机——角色的状态机
Class 主角
{
    角色朝向枚举
    {
        上
        下
        左
        右
    }
    
    角色动作枚举
    {
        站立
        行走
        死亡        
    }
    
    角色当前动作状态码
    角色当前朝向状态码
}

void 主角::更新()
{
    switch(角色当前动作状态码)
    case 站立:
        站立的处理输入()//可能会触发从站立到移动切换、埋雷
        //站立状态没有动画刷新
    case 移动:
        移动的处理输入()//可能会触发从移动到站立切换、埋雷
        移动的逻辑刷新()//比如:处理角色位移(可能有碰撞)
        移动的刷新动画数据()//根据当前角色当前朝向状态码刷新移动动画
    case 死亡:      
        //死亡状态不接受输入
        //死亡状态没有逻辑刷新
        死亡的刷新动画数据()//刷新死亡动画
}

void 主角::绘制()
{
    动画播放器句柄.绘制()
}

最后,我们在游戏主循环,刷新角色

游戏循环(true)
{
    主角句柄.更新()
    ...
    
    主角句柄.绘制()
    ...
}

然后我们就可以执行游戏来测试了,代码似乎也算清晰可用。

然而,完全不是那么回事

  1. 角色的状态很复杂,而且角色状态和动画状态都不是完全对应

  2. 每个状态下都要处理,输入,逻辑更新,动画更新,绘制,这些都用函数封装,这些不同层次的代码,混在一起显得很乱,别人不好读,要脑补很多东西

  3. 没有使用OO的特点,每个角色状态实际上是不同的对象来驱动,用函数既没有类,函数也含有副作用,这几乎没有实现复用

以上代码,对于简单的游戏可以,但是随着游戏需求越来越复杂,最后代码会变得一团乱麻

也许你会想到,我们重构代码来解决这个问题,然而真的能做到吗?我们下篇再讲——

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


本文题目:从虚幻4动画系统与控制器交互理解数据驱动(一)古老的写法-创新互联
URL标题:http://pwwzsj.com/article/dpsodg.html