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工具代码,布布扣,bubuko.com

时间: 2024-10-11 13:06:21

Spine输出资源一键入Unity3D工具代码的相关文章

使用Python2.x,在Pycharm工具下,如果存在中文等非英文字符输出或注释时,运行代码,会出现提示:SyntaxError: Non-ASCII character &#39;\xe7&#39;

在Python文件开头,第一行代码,有两种写法: 1.使用#coding=UTF-8(等号也可以换为“:”)  2.或者  #-- coding:UTF-8 -- 备注:python的默认编码文件是用的ASCII码,在Python 3.X中没有这种错误. 使用Python2.x,在Pycharm工具下,如果存在中文等非英文字符输出或注释时,运行代码,会出现提示:SyntaxError: Non-ASCII character '\xe7' 原文地址:https://www.cnblogs.com

ASP.net 资源请求漏洞利用工具PadBuster

ASP.net 资源请求漏洞利用工具PadBuster 在ASP.net 网站中,为了便于部署网站项目,开发者往往会将资源(图片.Javascript文件)嵌入到dll文件中.而网页中,会使用WebResource.axd?d=XXX的形式请求资源.其中,XXX采用CBC-R加密的方式生成的访问密钥.由于CBC-R算法存在Padding Oracle漏洞,所以导致渗透人员可以非法访问网站敏感文件,如web.config.PadBuster是Kali Linux提供的一款专向工具.该工具使用Per

网页小工具代码

各种工具代码如下 1.QQ添加链接 <a target="_blank" href="http://wpa.qq.com/msgrd?v=3&uin=XXXXXXXX&site=qq&menu=yes"><img border="0" src="http://wpa.qq.com/pa?p=1:XXXXXXXX:13" alt="有事您Q我" title="

(转)unity3D 如何提取游戏资源 (反编译)+代码反编译

原帖:http://bbs.9ria.com/thread-401140-1-1.html 首先感谢 雨松MOMO 的一篇帖子 教我们怎么提取 .ipa 中的游戏资源.教我们初步的破解unity3d资源的基本方法附上原帖的链接:http://www.xuanyusong.com/archives/2584 下面我会从头介绍一下提取的全过程: 步骤一:首先从 https://github.com/ata4/disunity/releases 下载 DisUnity v0.3.1也可以直接用工具下载

Service系统服务(六):rsync基本用法、rsync+SSH同步、配置rsync服务端、访问rsync共享资源、使用inotifywait工具、配置Web镜像同步、配置并验证Split分离解析

一.rsync基本用法 目标: 本例要求掌握远程同步的基本操作,使用rsync命令完成下列任务: 1> 将目录 /boot 同步到目录 /todir 下   2> 将目录 /boot 下的文档同步到目录 /todir 下   3> 在目录 /boot 下新增文件 a.txt,删除 /todir 下的子目录 grub2,再次同步使 /todir 与 /boot 一致   4> 验证 -a.-n.-v.--delete 选项的含义 方案: 本地同步操作: rsync [选项...] 本

【跟我一起学Unity3D】代码中切割图片并且加载帧序列动画

在Cocos2dx中,对大图的处理已经封装好了一套自己的API,但是在Unity3D中貌似没有类似的API,或者说我没找到.不过这也在情理之中,毕竟Unity3D是做3D的,要切割图片的地方还是很少的. 因为我用Unity3D主要是用于做2D游戏的(PS:很蛋疼吧?我也觉得),所以就不得不考虑切图和播放序列帧这两个在2D上常见的功能了,下面废话不多说.我的任务是把下面这张图切割成16块,并且按照动画的序列播放出来. 查Unity3D的使用手册的过程中,我发现了一个类:Texture2D,他是继承

Unity3d 常用代码

//创建一个名为"Player"的游戏物体 //并给他添加刚体和立方体碰撞器. player=new GameObject("Player"); player.AddComponent("Rigidbody"); player.AddComponent("BoxCollider"); //创建一个没有名称的游戏物体 //并给他添加刚体和立方体碰撞器.Transform总是被添加到该游戏物体. player=new GameOb

【跟我一起学Unity3D】代码中分割图片而且载入帧序列动画

在Cocos2dx中.对大图的处理已经封装好了一套自己的API,可是在Unity3D中貌似没有类似的API(好吧,实际上是有的,并且功能更强大),或者说我没找到. 只是这也在情理之中,毕竟Unity3D是做3D的.要分割图片的地方还是非常少的. 由于我用Unity3D主要是用于做2D游戏的(PS:非常蛋疼吧?我也认为),所以就不得不考虑切图和播放序列帧这两个在2D上常见的功能了,以下废话不多说. 我的任务是把以下这张图分割成16块.而且依照动画的序列播放出来. 查Unity3D的使用手冊的过程中

(转) Unity3D常用代码收集总结

1 //创建一个名为"Player"的游戏物体 2 //并给他添加刚体和立方体碰撞器. 3 player=new GameObject("Player"); 4 player.AddComponent("Rigidbody"); 5 player.AddComponent("BoxCollider"); 6 7 //创建一个没有名称的游戏物体 8 //并给他添加刚体和立方体碰撞器.Transform总是被添加到该游戏物体. 9