Spine输出资源一键入Unity3D工具代码

2024-08-20 16:18

本文主要是介绍Spine输出资源一键入Unity3D工具代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

原文链接http://www.cnblogs.com/hellohuan/p/3926016.html,http://www.cnblogs.com/hellohuan/p/3716346.html



初尝2D骨骼动画编辑工具SPINE,并into Unity3D

一、SPINE使用

研究2D骨骼动画,CYou的朋友介绍我SPINE这个工具,开发自Esoteric Software的一款专门制作2D动画的软件,网络上的资料还很少,我这从半吊子美术技术的角度简单说一下使用教程。

有几个不错的地方:
1、美术制作前准备的贴图为一堆小切片图。不用非得拼成一张atlas,spine会做这一步,详见步骤七,
导出数据时会动态的将切片合并到同一个到N个atlas中,合并的策略会考虑我们设置的atlas的尺寸。
2、方便换装和BODYPART:
SPINE的数据结构中包括Bone和SLOT。其中Bone既为骨骼节点数据,Slot槽理解为挂接在Bone上的虚拟点。同一个骨骼节点或者槽下只能有一张贴图切片。
因此如果某骨骼上需要有两把刀的情况,可以是骨骼上设置Slot来辅助实现。不过有如下一些约束:

        同一个骨骼下只能有一张贴图,且spine貌似没提供关闭这张帖图的方法,因此理解为这个图为必有得骨架贴图。

 

 

         
同一个SLOT下可以有多张图,例如SLOT2,左边的灰点儿表示现在那张图正在使用中。

3、 DrawOrder,可以通过拖动控制切片的渲染顺序。例如控制眼睛要画在脸前面。
4、可以制作多个SKIN,SKIN可以满足整个SKIN的切换。

二、TO Unity

Spine 自带了预制运行库 Spine runtimes,这是一个奇妙的方式“在你的游戏中添加读取 Spine 文件的代码,然后它为创建动画。”Spine 的运行库,支持目前主流的游戏引擎 Unity3D, Sprite Kit, cocos2d 等等。
我这里把做好的SPINE示例导入到UNITY中,并使用API实现换武器和头部。



Spine输出资源一键入Unity3D工具代码

之前预研过2D骨骼动画编辑工具SPINE,感觉其比cocosStudio及Unity3D自带的骨骼动画编辑器(原生Sprite Tree或Uni2D)要更适合有3DSMax习惯的美术,即Spine更容易被美术上手。因为当时教程极少,官网的文字说明还是英文,所以写了一个简明扼要的文档,还是抛砖引玉。之后我就把具体的研究工作交给技术美术了。虽然项目一直还没使用上,但是如果做手机上性价比极高表现力极强的2D骨骼动画,想干掉刀塔传奇动画效果、为妹子加点儿乳摇裙摆无锯齿动画的,非常推荐,曾经写DEMO使用过Spine的资源,把一堆美术输出的文件导入SPINE真是好累。于是我写了一个算是两键Import Unity的工具,贴代码片段吧,工程就不发了。还是抛砖引玉,以下是双键的代码。

第一键、批量修改SPine输出的JSON文件后缀:我用PY写的脚本,脚本直接贴了。然后将修改好的文件覆盖到UNITY3D的资源目录内。

# -*- coding: cp936 -*-
#hElloHuAn
 
import os
import string
 
dirName = os.getcwd()
print(dirName)
 
li=os.listdir(dirName)
for filename in li:
    newname = filename
    #print (newname)
    filtername = newname.split(".")
    if filtername[-1]=="atlas":
        print (filtername)
        newname = newname + ".txt"
        os.rename(filename,newname)
        print newname,  "+txt successfully"
 
    if filtername[-1]=="json":
        print (filtername)
        newname = newname + ".txt"
        os.rename(filename,newname)
        print newname,  "+txt successfully"

第二键,在Unity的Project面板找到刚刚拷贝的Spine资源目录,右键进行生成UNITY3D直接使用的Spine数据,并在Scene窗口中预览:


资源来源于其它手游,通过技术手段获取,仅用于技术交流

第二键的代码也比较简单:需要满足一定的制作规范:

/// 制作规范:统一模型所有的不同类型的资源的名称必须相同,并与目录名一致:
/// SPINENAME下有SPINENAME.png\ SPINENAME.json.txt\ SPINENAME.atlas.txt

[MenuItem("Assets/batchCreateSpineData")]
static public void BatchCreateSpineData()
{
    string dirName = "";
    string spineFileName = BatchCreateSpineDataMethod(ref dirName);
    Debug.Log(spineFileName);
    Debug.Log(dirName);
 
    string textureName = dirName + spineFileName + ".png";
    string jsonFileName = dirName + spineFileName + ".json.txt";
    string atlasFileName = dirName + spineFileName + ".atlas.txt";
 
    Material mat;
    ///1、 创建材质,并指贴图和shader
    {
        Shader shader = Shader.Find("Unlit/Alpha_zorro");
        mat = new Material(shader);
        Texture tex = Resources.LoadAssetAtPath(textureName, typeof(Texture)) as Texture;
        mat.SetTexture("_MainTex", tex);
        AssetDatabase.CreateAsset(mat, dirName + spineFileName + ".mat");
        AssetDatabase.SaveAssets();
    }
      
    ///2、 创建atlas,并指xx
    AtlasAsset m_AtlasAsset = AtlasAsset.CreateInstance<AtlasAsset>();
    AssetDatabase.CreateAsset(m_AtlasAsset, dirName + spineFileName + ".asset");
    Selection.activeObject = m_AtlasAsset;
 
    TextAsset textAsset = Resources.LoadAssetAtPath(atlasFileName, typeof(TextAsset)) as TextAsset;
    m_AtlasAsset.atlasFile = textAsset;
    m_AtlasAsset.materials = new Material[1];
    m_AtlasAsset.materials[0] = mat;
    AssetDatabase.SaveAssets();
 
 
    ///3、 创建SkeletonDataAsset,并指相关
    SkeletonDataAsset m_skeltonDataAsset = SkeletonDataAsset.CreateInstance<SkeletonDataAsset>();
    AssetDatabase.CreateAsset(m_skeltonDataAsset, dirName + spineFileName + " AnimationData.asset");
    Selection.activeObject = m_skeltonDataAsset;
 
    m_skeltonDataAsset.atlasAsset = m_AtlasAsset;
    TextAsset m_jsonAsset = Resources.LoadAssetAtPath(jsonFileName, typeof(TextAsset)) as TextAsset;
    m_skeltonDataAsset.skeletonJSON = m_jsonAsset;
    AssetDatabase.SaveAssets();
 
 
    /// 创建场景物件
    GameObject gameObject = new GameObject(spineFileName, typeof(SkeletonAnimation)) ;
    EditorUtility.FocusProjectWindow();
    Selection.activeObject = gameObject;
 
    SkeletonAnimation m_skelAnim = gameObject.GetComponent<SkeletonAnimation>();
    m_skelAnim.skeletonDataAsset = m_skeltonDataAsset;
}

于是双键合璧了。 

 说一下写这个的意义:

对于美术资源导入UNITY3D中,一般都是美术来做,这个仍然属于资源输出的范畴,而美术人员对于新工具复杂使用的抗拒能力,繁冗流程,重复劳动的效率浪费,心情落差,对于个人以及集体都是一种损失。当然写这个的最初动机是因为,美术将资源导入UNITY做不好,会给程序员留坑来查,或者会推给程序员来做,我为了让自己省事儿!所以我写了这个工具,流程变得简单,操作变得轻松,美术与程序关系变得激情和谐。

我所做的是一种变相提高美术工具用户体验的事情,是当前移动互联网下技术改变世界改变生产力的必然产物。没几行代码,简单算一下,一个Spine资源的导入会节省10分钟时间,且不说会有无穷的迭代和返工,即使项目周期的五十个SPINE资源,这已经为团队节约了500分钟8个小时几百上千块钱的成本,还带来了舒爽的心情,和谐的关系。这个帐一算太值了。

OVER。



这篇关于Spine输出资源一键入Unity3D工具代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/1090554

相关文章

基于Python实现简易视频剪辑工具

《基于Python实现简易视频剪辑工具》这篇文章主要为大家详细介绍了如何用Python打造一个功能完备的简易视频剪辑工具,包括视频文件导入与格式转换,基础剪辑操作,音频处理等功能,感兴趣的小伙伴可以了... 目录一、技术选型与环境搭建二、核心功能模块实现1. 视频基础操作2. 音频处理3. 特效与转场三、高

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho

基于Python开发一个图像水印批量添加工具

《基于Python开发一个图像水印批量添加工具》在当今数字化内容爆炸式增长的时代,图像版权保护已成为创作者和企业的核心需求,本方案将详细介绍一个基于PythonPIL库的工业级图像水印解决方案,有需要... 目录一、系统架构设计1.1 整体处理流程1.2 类结构设计(扩展版本)二、核心算法深入解析2.1 自

MySQL进行数据库审计的详细步骤和示例代码

《MySQL进行数据库审计的详细步骤和示例代码》数据库审计通过触发器、内置功能及第三方工具记录和监控数据库活动,确保安全、完整与合规,Java代码实现自动化日志记录,整合分析系统提升监控效率,本文给大... 目录一、数据库审计的基本概念二、使用触发器进行数据库审计1. 创建审计表2. 创建触发器三、Java

Python办公自动化实战之打造智能邮件发送工具

《Python办公自动化实战之打造智能邮件发送工具》在数字化办公场景中,邮件自动化是提升工作效率的关键技能,本文将演示如何使用Python的smtplib和email库构建一个支持图文混排,多附件,多... 目录前言一、基础配置:搭建邮件发送框架1.1 邮箱服务准备1.2 核心库导入1.3 基础发送函数二、

基于Python实现一个图片拆分工具

《基于Python实现一个图片拆分工具》这篇文章主要为大家详细介绍了如何基于Python实现一个图片拆分工具,可以根据需要的行数和列数进行拆分,感兴趣的小伙伴可以跟随小编一起学习一下... 简单介绍先自己选择输入的图片,默认是输出到项目文件夹中,可以自己选择其他的文件夹,选择需要拆分的行数和列数,可以通过

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

在Linux中改变echo输出颜色的实现方法

《在Linux中改变echo输出颜色的实现方法》在Linux系统的命令行环境下,为了使输出信息更加清晰、突出,便于用户快速识别和区分不同类型的信息,常常需要改变echo命令的输出颜色,所以本文给大家介... 目python录在linux中改变echo输出颜色的方法技术背景实现步骤使用ANSI转义码使用tpu

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.