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

今天把 图像数据保存完善了一下。天冷,没打多少字,见谅。

接着昨天说的,首先我们打开u3d,做一个空物体gameobject,然后做几个sprite,如下图所示

 

上面的sprite 排成四个 正方形。

资源,你可以用昨天 我说的切好的图像,随意放里面。

 

下面我们给 gameobject 添加 代码

using UnityEngine;
using System.Collections;

public class ResourcesSprite : MonoBehaviour
{

    void Start()
    {
        OnAutoTileSave("11", "sea", 0, 3);
        OnAutoTileSave("22", "sea", 1, 3);
        OnAutoTileSave("33", "sea", 2, 3);
    }


    void Update()
    {

    }

    //根据 图片名字,键值名字,当前帧 和 总共帧 保存单例中
    void OnAutoTileSave(string path, string name, int current, int total)
    {
        object[] objs = Resources.LoadAll(path);
        Sprite[, ,] dict;
        //是否存在 键值
        if (GameModel.getInstance().dictSprite.ContainsKey(name))
        {
            dict = GameModel.getInstance().dictSprite[name];
        }
        else
        {
            dict = new Sprite[total, 4, 6];
            GameModel.getInstance().dictSprite.Add(name, dict);
        }

        int i = 0;
        foreach (object obj in objs)
        {
            Sprite sp = obj as Sprite;
            if (sp != null)
            {

                dict[current, i / 6, i % 6] = sp;
                i++;
            }
        } 
        GameModel.getInstance().dictSprite[name] = dict;
    }
}

这个代码很简单,里面用到了单例,我也贴出来,防止小白不懂

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


public class GameModel
{ 
    public Dictionary<string, Sprite[, ,]> dictSprite;
    private static GameModel model; 
    public static GameModel getInstance()
    {
        if (model == null)
        {
            model = new GameModel();

            model.init();
        }
        return model;
    }

    private void init()
    {
        dictSprite = new Dictionary<string, Sprite[, ,]>();
    }
}

 

单例我就不说了,说说 ResourcesSprite类,

它的功能主要是 加载资源,然后放到 字典里面去,为什么要这么写法,原因是为了 显示更加方便。

废话不多说,我们给 下面 四个 sprite,分别添加 脚本

using UnityEngine;
using System.Collections;

public class AutoTileShow : MonoBehaviour
{
    int i = 0;
    private Sprite m_Image;
    void Start()
    {
        if (!gameObject.GetComponent<SpriteRenderer>())
        {
            m_Image = gameObject.AddComponent<SpriteRenderer>().sprite;
        }
    }

    float timebattle;
    void Update()
    {
        timebattle -= Time.deltaTime;
        if (timebattle <= 0)
        {
            timebattle = .2f;//闪烁频率


            if (i == 3)
            {
                i = 0;
            }
            m_Image = GameModel.getInstance().dictSprite["sea"][i, 2, 3];
            gameObject.GetComponent<SpriteRenderer>().sprite = m_Image;
            i++;
        } 
    }
}

 

这里 的作用是 从 单例的字典里面 找到并  显示出来。

为了让update 播放的 别这么快,我就 添加了 0.2秒 换一张图。

换图?是的,现在 显示出来的是  动画的 水,你们 按照昨天我这么搞的,结合今天的,就能看出是动画的水了。

 

今天先到这,打这几个字,手基本就冻麻木了,明天继续吧。

链接:http://pan.baidu.com/s/1eQSoMl0 密码:8c7m

 

posted on 2016-01-24 16:33  太粗难进  阅读(826)  评论(0编辑  收藏  举报