AutoTile 自动拼接(四) 学习与实践
今天主要来说下,数据绑定。
之前第一章,我说到 把 资源图 画成格子,你们应该还有印象吧。
那么,当我 知道 格子数据,能否拿到 资源对应的图片呢?
大家先复习一下 第一章,发现很多格子数据 是相同的,有好多个1,好多个2 等等。
所以这里必须要定义一个方向,比如 左上角的1 ,右上角的1,左下角的1,右下角的1.
好,先把资源加载类,继续优化下
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);OnSortAutoTile("sea", 3);}void Update(){}//对资源图 排序void OnSortAutoTile(string key, int total = 3){Sprite[, ,] dict = GameModel.getInstance().dictSprite[key];for (int j = 0; j < 24; j++){Sprite[] sp = new Sprite[total];for (int i = 0; i < total; i++){sp[i] = dict[i, j / 4, j % 4];}int x1 = j / 4;int y1 = j % 4;GameModel.getInstance().autoTileSprite.Add(x1 + "," + y1 + "," + key, sp);}}//根据 图片名字,键值名字,当前帧 和 总共帧 保存单例中void OnAutoTileSave(string pathName, string key, int current, int total){object[] objs = Resources.LoadAll(pathName);Sprite[, ,] dict;//是否存在 键值if (GameModel.getInstance().dictSprite.ContainsKey(key)){dict = GameModel.getInstance().dictSprite[key];}else{dict = new Sprite[total, 6, 4];GameModel.getInstance().dictSprite.Add(key, dict);}int i = 0;foreach (object obj in objs){Sprite sp = obj as Sprite;if (sp != null){dict[current, i / 4, i % 4] = sp;i++;}}GameModel.getInstance().dictSprite[key] = dict;}}
大家可以看到,我增加了一个 资源排序的方法,因为 资源图 是 固定的 6*4 格子,应该不可能变,所以我也就写死了。
好,下面看看如何调用这个类。
同样,在昨天 那四个 sprite脚本中增加
using UnityEngine; using System.Collections;public class AutoTileShow : MonoBehaviour {public int directions;int i = 0;private Sprite m_Image;bool open = true;Sprite[] sp;void Start(){if (!gameObject.GetComponent<SpriteRenderer>()){m_Image = gameObject.AddComponent<SpriteRenderer>().sprite;}sp = new Sprite[3];//图片数据临时存放 }float timebattle;void Update(){timebattle -= Time.deltaTime;if (timebattle <= 0){timebattle = .2f;//闪烁频率if (i == 3){i = 0;}if (open){sp = OnGetAutoTile(directions, 1);open = false;}m_Image = sp[i];gameObject.GetComponent<SpriteRenderer>().sprite = m_Image;i++;}}//通过 方向 权值 获取 对应图像public Sprite[] OnGetAutoTile(int direction, int weightNumber, string key = "sea"){Sprite[] map = { };ArrayList arr = new ArrayList();switch (weightNumber){case 1:arr.Add(0 + "," + 0 + "," + "sea");arr.Add(1 + "," + 0 + "," + "sea");arr.Add(0 + "," + 1 + "," + "sea");arr.Add(1 + "," + 1 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 2:arr.Add(0 + "," + 0 + "," + "sea");arr.Add(1 + "," + 0 + "," + "sea");arr.Add(0 + "," + 1 + "," + "sea");arr.Add(1 + "," + 1 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 3:arr.Add(0 + "," + 2 + "," + "sea");arr.Add(1 + "," + 2 + "," + "sea");arr.Add(0 + "," + 3 + "," + "sea");arr.Add(1 + "," + 3 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 4:arr.Add(2 + "," + 0 + "," + "sea");arr.Add(5 + "," + 0 + "," + "sea");arr.Add(2 + "," + 3 + "," + "sea");arr.Add(5 + "," + 3 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 5:arr.Add(2 + "," + 1 + "," + "sea");arr.Add(5 + "," + 1 + "," + "sea");arr.Add(2 + "," + 2 + "," + "sea");arr.Add(5 + "," + 2 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 6:arr.Add(3 + "," + 0 + "," + "sea");arr.Add(4 + "," + 0 + "," + "sea");arr.Add(3 + "," + 3 + "," + "sea");arr.Add(4 + "," + 3 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;case 7:arr.Add(3 + "," + 1 + "," + "sea");arr.Add(4 + "," + 1 + "," + "sea");arr.Add(3 + "," + 2 + "," + "sea");arr.Add(4 + "," + 2 + "," + "sea");map = OnDirectionAutoTile(direction, key, arr);break;default: break;}return map;}public Sprite[] OnDirectionAutoTile(int direction, string key, ArrayList arr){Sprite[] mapTile = new Sprite[3];mapTile = GameModel.getInstance().autoTileSprite[arr[direction - 1].ToString()];return mapTile;/***switch (direction){case 1://左上 mapTile = GameModel.getInstance().autoTileSprite[arr[0].ToString()];break;case 2://左下mapTile = GameModel.getInstance().autoTileSprite[1 + "," + 0 + "," + key];break;case 3://右上mapTile = GameModel.getInstance().autoTileSprite[0 + "," + 1 + "," + key];break;case 4://右下mapTile = GameModel.getInstance().autoTileSprite[1 + "," + 1 + "," + key];break;default: break;}* **/} }
增加后,我们在u3d界面中,看到一个方向变量。
我们把 四个图,按照左上左下右上右下 1234,对应起来,大家也可以看看这个脚本,有部分注释的,也是这么定义的。
在
void Update() 中,我们运行 sp = OnGetAutoTile(directions, 1);
注意,这个1 就是 权值,也就是 绑定格子的数据值。
我们可以看到 动画状态的 图,如下。因为 是1 的格子,要求四个方向。
链接:http://pan.baidu.com/s/1c1dOojm 密码:esis
注:OnGetAutoTile方法 写的不是很好,因为我还没找到 规律来优化它,不过反正 只有1-7 这几种,先讲究下吧。
好了,今天先说道这里,下一节是 权值检测,很重要的一章哦
转载于:https://www.cnblogs.com/big-zhou/p/5157047.html
AutoTile 自动拼接(四) 学习与实践相关推荐
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(四)(Python语言基础(2))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(四)(Python语言基础(2)) 第4讲 Python语言基础(2) 4.1 内置数据结构 4.1.1 序列数据结构(sequ ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(十四)(卷积神经网络))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(十四)(卷积神经网络)) 14 卷积神经网络 14.1 深度学习基础 14.1.1 深度学习的基本思想 14.1.2 深度学习三 ...
- 计算机科学与技术学习路线编程基础四大件应用实践编程(含C++学习路线)
计算机科学与技术学习路线&编程基础四大件&应用实践编程(含C++学习路线) 基本介绍 本人211科班出身,目前大学临近毕业,想给迷茫的同行者或者后来人一些建议和推荐,少走弯路.想想自己 ...
- 章节四:BeautifulSoup实践
章节四:BeautifulSoup实践 目录 章节四:BeautifulSoup实践 1. 复习 2. 项目:解密吴氏私厨 3. 分析过程 4. 代码实现(一) 4.1 获取与解析 4.2 提取最小父 ...
- 【PWA学习与实践】(3) 让你的WebApp离线可用
<PWA学习与实践>系列文章已整理至gitbook - PWA学习手册,文字内容已同步至learning-pwa-ebook.转载请注明作者与出处. 本文是<PWA学习与实践> ...
- 《自动驾驶网络解决方案白皮书》研读(一):电信产业自动驾驶网络探索与实践
电信网络发展的机遇与挑战 在历史发展的滚滚长河中,人类追求先进生产力的脚步从不曾停歇.每一次技术革命的出现,都代表了一次生产力的发展更迭,驱动人类社会迈向新的发展纪元.工业革命,电力革命和信息技术革命 ...
- SEO小白学习与实践(二):SEO相关基础知识与自有网站诊断
前言 两年前建网站的时候,一切都是从百度检索开始的,遇到问题就问度娘.后来发现,这样的方法不是很好.度娘可以帮助解决铁定问题,但是非常系统的知识最好还是从书本上获取.于是,这次SEO学习咱就改变思路, ...
- 【神经网络与深度学习-TensorFlow实践】-中国大学MOOC课程(八)(TensorFlow基础))
[神经网络与深度学习-TensorFlow实践]-中国大学MOOC课程(八)(TensorFlow基础)) 8 TensorFlow基础 8.1 TensorFlow2.0特性 8.1.1 Tenso ...
- 产品经理知识体系学习与实践指南
新产品开发管理:从流程到体系 0.3 产品经理:角色与知识体系 产品经理 对产品生命周期的各个阶段,产品的孕育.创意.概念.开发.上市负责,以及对产品线和产品组合负责:不仅对实体产品负责,还要对服务. ...
- 干货 | 弱监督学习框架 Snorkel 在大规模文本数据集自动标注任务中的实践
作者简介 Jay,携程高级算法经理,关注机器学习和深度学习领域在酒店场景可落地的相关技术. 引言 近年来,得益于深度学习的巨大发展,自然语言处理(NLP)领域也爆发了多个如 BERT 等state-o ...
最新文章
- 警告: Could not load driverClass com.mysql.cj.jdbc.Driver
- 抽象类的作用之一:sdk 传递你需要的参数
- 四种主流的 API 架构风格对比
- 每天一个linux命令(50):crontab命令
- 数据挖掘流程(二):数据预处理
- php 5.4日志文件在哪里,我的错误日志文件在哪里?(Where are my error log files?)
- 剑指offer:按之字形打印二叉树(栈|双向队列+中序遍历)
- 消息中间件学习总结(5)——RocketMQ之Apache RocketMQ背后的设计思路与最佳实践
- phpmyadmin的安装和使用
- 用java网络编程中的TCP方式上传文本文件及出现的小问题
- 基于音形码的中文字符串相似度算法(转)
- 【易实战】Spring Cloud微服务架构12要素应用 Twelve‑Factor App
- 软件企业CMMI认证需要什么条件?
- 区块链之门 | Reach on Conflux 2021 黑客松开赛
- u大师装iso系统linux,u大师给苹果电脑装win7win10系统
- Python Basic Grammar
- 使用纯JavaCV实现颜色分割 / 轮廓提取 / 离焦 / 线性旋转变焦模糊 / 灰度化 / 标注等处理
- 【Spark重点难点】你从未深入理解的RDD和关键角色
- AD如何修改图纸大小
- linux里 read函数用法