当前位置: 首页 > article >正文

U3D游戏开发之骨骼动画相关

目录

 1 作为U3D程序如何制作骨骼动画

 2 骨骼动画程序代码相关


这个内容我在很久之前就想写了,很多项目也与骨骼动画挂钩,今天我们揭秘的是2D骨骼动画。来聊一聊大家可能非常关注的两个问题:作为程序如何制作骨骼动画?接到美术的骨骼动画之后应该如何制作骨骼动画的代码相关。

于是我们带着这个问题,开始今天的讲解:

首先在使用骨骼动画之前,要导入骨骼动画的Spine库,登录官方选择unity的位置下载,然后将其放置到unity内部即可。官方地址:http://zh.esotericsoftware.com/

 1 作为U3D程序如何制作骨骼动画

我们在游戏开发过程中,可能会突然想参加很多各种各样的游戏比赛,这些比赛大家一起组队,各司其职。但是往往在组队过程中,你会发现美术的数量非常稀缺,甚至你可能组队不到美术。然而项目可能需要大量的美术内容。这个时候,骨骼动画就派上用场了,这可以大大降低美术的工作量。(至少在动画方面)

我在制作聚光灯项目的时候就是遇到了美术不够的情况,于是我开始使用unity制作骨骼动画。(虽然不专业,但是看起来能用,至少可以应对这些突发情况)

以下我讲解的内容都在unity内部进行。

当我们拿到美术素材的时候,第一时间将其放入unity,并且设置为2D and UI的模式,然后点击编辑模式开始制作骨骼动画:

点开之后你会看到这个页面:(将左上角设置为:Skinning Editor)

设置完骨骼之后:

此时,就自动给你蒙皮并且自动给出了权重,这个时候你可以移动骨骼查看动画情况,如果发现动画被拉伸严重就说明权重不对,需要重刷权重:

然后反复确认动画情况即可,最后点击Apply保存。

制作好之后将图片拖出,并且挂载这个脚本,并且点击自动生成骨骼:

这个时候你可以在编辑器之中随意操控骨骼,然后利用unity自带的动画Animation:

如此,一个简易版骨骼动画制作完成。

 2 骨骼动画程序代码相关

如果你团队有专业动画师,制作了spine动画,你将如何使用代码控制呢?

骨骼动画直接播放的代码:(以眼睛跟随为例)

关联骨骼,对骨骼进行代码上的位移控制:

骨骼动画事件相关:

一小段示例代码:

/// <summary>
        /// 玩家攻击
        /// </summary>
        private void PlayerAttack()
        {
            if (_ePlayerTypes != EPlayerType.Attack)
            {
                _ePlayerTypes = EPlayerType.Attack;
                _attackNum+=1;
                switch (_attackNum)
                {
                    case 1:
                        ReSetTimeAttack();
                        _sa.AnimationState.SetAnimation(0, "6_Attack_1", false);
                        break;
                    case 2:
                        ReSetTimeAttack();
                        _sa.AnimationState.SetAnimation(0, "7_Attack_2", false);
                        break;
                    case 3:
                        ReSetTimeAttack();
                        _sa.AnimationState.SetAnimation(0, "8_Attack_3", false);
                        break;
                    case 4:
                        ReSetTimeAttack();
                        _sa.AnimationState.SetAnimation(0, "9_Attack_4", false);
                        _attackNum = 0;
                        break;
                }
                _sa.AnimationState.Complete+= (t) =>
                {
                    Spine_Complete();
                };
            }
        }
        /// <summary>
        /// 动画结束时调用的方法
        /// </summary>
        private void Spine_Complete()
        {
            if (_ePlayerTypes == EPlayerType.Attack||_ePlayerTypes==EPlayerType.Dodge)
            {
                Idle();
                //_ePlayerTypes = EPlayerType.Null;
            }
        }

作者将持续更新,创作不易,请点一个小红心支持一下吧!关注我,了解更多精彩!


http://www.kler.cn/a/385937.html

相关文章:

  • 超好用shell脚本NuShell mac安装
  • 自存 关于RestController请求传参数 前端和后端相关
  • SpringBoot 应用出错 Comparison method violates its general contract!
  • ubuntu16.04配置网卡
  • SystemVerilog学习——构造函数new
  • hrnet人体关键点检测模型适配atlas笔记
  • Linux内核USB2.0驱动框架分析--USB设备枚举过程
  • 有功功率,无功功率,视在功率,额定功率关系
  • TSMI252012PMX-2R2MT电子元器件详解
  • 理想汽车Android面试题及参考答案
  • 【Linux内核】trigger_load_balance(struct rq *rq)内核函数
  • C 语言学习-05【数组】
  • multiprocessing
  • [MySQL]索引
  • RK3568平台开发系列讲解(字符设备驱动篇)创建设备节点实验
  • ENAS和DARTs的比较
  • 1、了解家庭网络历史
  • InfluxDB性能优化指南
  • 用 Collections.synchronizedSet 创建线程安全的 HashSet
  • 健尔康在A股上市:市值84亿元,陈国平、陈麒宇父女成大赢家
  • 机器学习之集成学习算法
  • Mac M1下运行端到端语音模型Mini-Omni
  • 虚拟化数据恢复—XenServer虚拟机中SQL Server数据库数据恢复案例
  • STM32 BootLoader 刷新项目 (九) 跳转指定地址-命令0x55
  • GEE 案例——利用哨兵-2 图像时间序列和谷歌地球引擎云计算自动绘制和监测香港海洋水质参数
  • 蓝桥杯 Python组-神奇闹钟(datetime库)