近期热门
粉丝908
关注 204
获赞 1005
Spine输出资源一键入Unity3D工具代码

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

[复制链接]
9319 11 0 4 10年前 举报

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

曾经写DEMO使用过Spine的资源,把一堆美术输出的文件导入SPINE真是好累。于是我写了一个算是两键Import Unity的工具,贴代码片段吧,工程就不发了。还是抛砖引玉,以下是双键的代码。


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

0.jpg

[size=1em]
[backcolor=rgb(244, 244, 244) !important]1

2

[backcolor=rgb(244, 244, 244) !important]3

4

[backcolor=rgb(244, 244, 244) !important]5

6

[backcolor=rgb(244, 244, 244) !important]7

8

[backcolor=rgb(244, 244, 244) !important]9

10

[backcolor=rgb(244, 244, 244) !important]11

12

[backcolor=rgb(244, 244, 244) !important]13

14

[backcolor=rgb(244, 244, 244) !important]15

16

[backcolor=rgb(244, 244, 244) !important]17

18

[backcolor=rgb(244, 244, 244) !important]19

20

[backcolor=rgb(244, 244, 244) !important]21

22

[backcolor=rgb(244, 244, 244) !important]23

24

[backcolor=rgb(244, 244, 244) !important]25

[backcolor=rgb(244, 244, 244) !important]# -*- coding: cp936 -*-
#hElloHuAn

import os
[backcolor=rgb(244, 244, 244) !important]import string

[backcolor=rgb(244, 244, 244) !important]dirName = os.getcwd()
print(dirName)

li=os.listdir(dirName)
[backcolor=rgb(244, 244, 244) !important]for filename in li:
    newname = filename
[backcolor=rgb(244, 244, 244) !important]    #print (newname)
    filtername = newname.split(".")
[backcolor=rgb(244, 244, 244) !important]    if filtername[-1]=="atlas":
        print (filtername)
[backcolor=rgb(244, 244, 244) !important]        newname = newname + ".txt"
        os.rename(filename,newname)
[backcolor=rgb(244, 244, 244) !important]        print newname,  "+txt successfully"

[backcolor=rgb(244, 244, 244) !important]    if filtername[-1]=="json":
        print (filtername)
[backcolor=rgb(244, 244, 244) !important]        newname = newname + ".txt"
        os.rename(filename,newname)
[backcolor=rgb(244, 244, 244) !important]        print newname,  "+txt successfully"  




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

1.jpg

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


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

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

[size=1em]
[backcolor=rgb(244, 244, 244) !important]1

2

[backcolor=rgb(244, 244, 244) !important]3

4

[backcolor=rgb(244, 244, 244) !important]5

6

[backcolor=rgb(244, 244, 244) !important]7

8

[backcolor=rgb(244, 244, 244) !important]9

10

[backcolor=rgb(244, 244, 244) !important]11

12

[backcolor=rgb(244, 244, 244) !important]13

14

[backcolor=rgb(244, 244, 244) !important]15

16

[backcolor=rgb(244, 244, 244) !important]17

18

[backcolor=rgb(244, 244, 244) !important]19

20

[backcolor=rgb(244, 244, 244) !important]21

22

[backcolor=rgb(244, 244, 244) !important]23

24

[backcolor=rgb(244, 244, 244) !important]25

26

[backcolor=rgb(244, 244, 244) !important]27

28

[backcolor=rgb(244, 244, 244) !important]29

30

[backcolor=rgb(244, 244, 244) !important]31

32

[backcolor=rgb(244, 244, 244) !important]33

34

[backcolor=rgb(244, 244, 244) !important]35

36

[backcolor=rgb(244, 244, 244) !important]37

38

[backcolor=rgb(244, 244, 244) !important]39

40

[backcolor=rgb(244, 244, 244) !important]41

42

[backcolor=rgb(244, 244, 244) !important]43

44

[backcolor=rgb(244, 244, 244) !important]45

46

[backcolor=rgb(244, 244, 244) !important]47

48

[backcolor=rgb(244, 244, 244) !important]49

50

[backcolor=rgb(244, 244, 244) !important]51

52

[backcolor=rgb(244, 244, 244) !important]53

54

[backcolor=rgb(244, 244, 244) !important][MenuItem("Assets/batchCreateSpineData")]
static public void BatchCreateSpineData()
[backcolor=rgb(244, 244, 244) !important]{
    string dirName = "";
[backcolor=rgb(244, 244, 244) !important]    string spineFileName = BatchCreateSpineDataMethod(ref dirName);
    Debug.Log(spineFileName);
[backcolor=rgb(244, 244, 244) !important]    Debug.Log(dirName);

[backcolor=rgb(244, 244, 244) !important]    string textureName = dirName + spineFileName + ".png";
    string jsonFileName = dirName + spineFileName + ".json.txt";
[backcolor=rgb(244, 244, 244) !important]    string atlasFileName = dirName + spineFileName + ".atlas.txt";

[backcolor=rgb(244, 244, 244) !important]    Material mat;
    ///1、 创建材质,并指贴图和shader
[backcolor=rgb(244, 244, 244) !important]    {
        Shader shader = Shader.Find("Unlit/Alpha_zorro");
[backcolor=rgb(244, 244, 244) !important]        mat = new Material(shader);
        Texture tex = Resources.LoadAssetAtPath(textureName, typeof(Texture)) as Texture;
[backcolor=rgb(244, 244, 244) !important]        mat.SetTexture("_MainTex", tex);
        AssetDatabase.CreateAsset(mat, dirName + spineFileName + ".mat");
[backcolor=rgb(244, 244, 244) !important]        AssetDatabase.SaveAssets();
    }
[backcolor=rgb(244, 244, 244) !important]      
    ///2、 创建atlas,并指xx
[backcolor=rgb(244, 244, 244) !important]    AtlasAsset m_AtlasAsset = AtlasAsset.CreateInstance<AtlasAsset>();
    AssetDatabase.CreateAsset(m_AtlasAsset, dirName + spineFileName + ".asset");
[backcolor=rgb(244, 244, 244) !important]    Selection.activeObject = m_AtlasAsset;

[backcolor=rgb(244, 244, 244) !important]    TextAsset textAsset = Resources.LoadAssetAtPath(atlasFileName, typeof(TextAsset)) as TextAsset;
    m_AtlasAsset.atlasFile = textAsset;
[backcolor=rgb(244, 244, 244) !important]    m_AtlasAsset.materials = new Material[1];
    m_AtlasAsset.materials[0] = mat;
[backcolor=rgb(244, 244, 244) !important]    AssetDatabase.SaveAssets();


    ///3、 创建SkeletonDataAsset,并指相关
[backcolor=rgb(244, 244, 244) !important]    SkeletonDataAsset m_skeltonDataAsset = SkeletonDataAsset.CreateInstance<SkeletonDataAsset>();
    AssetDatabase.CreateAsset(m_skeltonDataAsset, dirName + spineFileName + " AnimationData.asset");
[backcolor=rgb(244, 244, 244) !important]    Selection.activeObject = m_skeltonDataAsset;

[backcolor=rgb(244, 244, 244) !important]    m_skeltonDataAsset.atlasAsset = m_AtlasAsset;
    TextAsset m_jsonAsset = Resources.LoadAssetAtPath(jsonFileName, typeof(TextAsset)) as TextAsset;
[backcolor=rgb(244, 244, 244) !important]    m_skeltonDataAsset.skeletonJSON = m_jsonAsset;
    AssetDatabase.SaveAssets();


[backcolor=rgb(244, 244, 244) !important]    /// 创建场景物件
    GameObject gameObject = new GameObject(spineFileName, typeof(SkeletonAnimation)) ;
[backcolor=rgb(244, 244, 244) !important]    EditorUtility.FocusProjectWindow();
    Selection.activeObject = gameObject;

    SkeletonAnimation m_skelAnim = gameObject.GetComponent<SkeletonAnimation>();
[backcolor=rgb(244, 244, 244) !important]    m_skelAnim.skeletonDataAsset = m_skeltonDataAsset;
}



于是双键合璧了。 

 说一下写这个的意义:

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

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

OVER。



0
点赞
0
打赏
4
添加到收藏夹

0

点击复制链接

使用微信扫码分享
一次扣10个券
全部评论11
您需要登录后才可以回帖 登录

好地方看看看看看看
6年前
回复

使用道具 举报

群主 你发的代码和是用方法不知道怎么用怎么办?因为是纯美术所以确实看不太懂,能否做个视频教程{:3_65:}
8年前
回复

使用道具 举报

啥也不说了,楼主就是给力!
8年前
回复

使用道具 举报

看完这篇帖子,除了给LZ大大一个大大的赞! 我已经无法用语言来表达此刻的心情~ 如果程序员都有LZ此等心态,那改变世界真的很近了~
9年前
回复

使用道具 举报

什么东西。学习学习
9年前
回复

使用道具 举报

直接给网址就好了。这样粘贴过来丢失好多啊
9年前
回复

使用道具 举报

谢谢...分享
9年前
回复

使用道具 举报

吊炸天!!!
9年前
回复

使用道具 举报

看了LZ的帖子,我只想说一句很好很强大!
9年前
回复

使用道具 举报

数据加载中....
没有更多评论了
您当前使用的浏览器IE内核版本过低会导致网站显示错误

请使用高速内核浏览器或其他浏览器