• 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

  • 相关阅读:
    HTTP 与 HTTPS 的区别
    cookie 和session 的区别详解
    IntelliJ远程调试教程
    selenium 自动化测试面试题及答案
    性能测试总结(一)---基础理论篇(转载)
    性能测试总结(二)---测试流程篇(转载)
    性能测试总结(三)--工具选型篇
    eclipse调试的基本意义
    控制反转(IOC)和依赖注入(DI)
    前端框架layui
  • 原文地址:https://www.cnblogs.com/big-zhou/p/5155343.html
Copyright © 2020-2023  润新知