AutoTile 自动拼接(二) 学习与实践

开始代码前,我们要做点准备工作。

下面 跟着我做。

首先我 扣了一个 图。

这个是 做 水的资源,所以是动态的,我把其余两张也扣了出来。

看起来一样,不是,这样看肯定 看不出所以然,你们先放到u3d中。

然后可以在 右下角观看,这些我就不多说了,一般小白 都会。

接着,我们要切片,大家看到我已经把11 的图 切好了。

这个切图,我想 大家应该也会吧。按照上图这样切 正方形。

算了我还是说下吧,按照上图这样 。。。

这样做的目的就是把 图分成小块,老外用矩阵切图,咋工具高级,手动搞定。

下面我们要把 这些切好的图片,保存到 数组中。

之前我写过一个 保存代码。

using UnityEngine;
using System.Collections;
using UnityEngine.UI;
using System.Collections.Generic;

public abstract class DirectionSprite : MonoBehaviour
{

    public float Speed = 0.05f;
    private Sprite m_Image;
    private float m_delta = 0;
    [HideInInspector]
    public int m_curFrame = 0;


    [HideInInspector]
    public bool open = true;

    //一个循环结束
    public abstract void nextSprite();
    private Sprite[,] dict;


    public void StartOpen(bool opens, string path)
    {
        open = opens;
        if (open)
        {
            m_Image = gameObject.GetComponent<SpriteRenderer>().sprite;

            if (m_Image == null)
            {
                m_Image = gameObject.AddComponent<SpriteRenderer>().sprite;
            }

            String_Int_Movie(path);

            show(m_curFrame);

        }
    }

    public int row, col;
    void String_Int_Movie(string path)
    {
        object[] objs = Resources.LoadAll(path);

        dict = new Sprite[row, col];

        int i = 0;
        foreach (object obj in objs)
        {
            Sprite sp = obj as Sprite;
            if (sp != null)
            {
                dict[i / col, i % col] = sp;
                i++;
            }
        }
    }

    public void UpdataSprite()
    {
        if (open)
        {
            m_delta += Time.deltaTime;
            if (m_delta > Speed)
            {
                m_delta = 0;
                m_curFrame++;
                show(m_curFrame);
            }
        }
    }
    //设置
    public void angle_frame(int Angles, int m_curFrames)
    {
        Angle = Angles;
        m_curFrame = m_curFrames;
    }

    public int FrameCount
    {
        get
        {
            return dict.Length;
        }
    }
    [HideInInspector]
    public int Angle;
    public void show(int frame)
    {
        if (frame >= col)
        {
            nextSprite();
            frame = 0;
            m_curFrame = frame;
        }
        if (Angle < 0)
        {
            Angle = 0;
        }
        if (Angle > row - 1)
        {
            Angle = row - 1;
        }
        m_Image = dict[Angle, frame];
        gameObject.GetComponent<SpriteRenderer>().sprite = m_Image;
    }
}

using UnityEngine;
using System.Collections;

public class DirectSprite : DirectionSprite {

    public int StartMovie;
    public string path;  
    void Start()
    { 
        open = true;
        StartOpen(open, path);
    }

    void Update()
    { 
        if (StartMovie>0)
        {
            UpdataSprite();
        } 
    }


    //一个循环结束
    public override void nextSprite()
    {
        StartMovie--;
        open = true;
    } 
}

大致这么样子,回头我再 检查一下,有什么需要改动的地方。

做完以上,保存数据后,接下来的一章,我们开始 编写 核心的 代码。 下一篇再见

posted on 2016-01-23 18:37  太粗难进  阅读(969)  评论(0编辑  收藏  举报