zoukankan      html  css  js  c++  java
  • 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;
        } 
    }

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

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

  • 相关阅读:
    使用鼠标
    TCP编程函数和步骤
    ASP.NET MVC+EF框架+EasyUI实现
    线性表简介
    一个项目的简单开发流程——需求、数据库、编码
    图像处理网络资源
    OPENCV 中的图像旋转与缩放
    命令行下面使用MAKEFILE方式编译OPENCV程序
    OpenCV In Thanksgiving Day
    OpenCV 下面的图像亮度变换 Intensity transformation
  • 原文地址:https://www.cnblogs.com/big-zhou/p/5153774.html
Copyright © 2011-2022 走看看