先描述一下我正在做的这个项目,是跑酷类音游。

那么跑酷类音游在绘制跑道上的时候,就要考虑不同的砖块显示问题。假设我有了一个节奏列表,那么我们怎么将不同的贴图贴到不同的砖块上去呢?

我花了好几个小时才搞清楚里面的门路,且听我慢慢道来。

首先我们建立一个地图,在上面新建一个Empty Object,将所有的Road砖块全部划分到这个分组里。

效果图如下:

我们得到了一些预制块,接下来我们要将其染上色。

首先的问题是,我们怎么遍历这些砖块呢?很简单,用Tag。我们将所有的砖块打上一个特别的tag,“road”。

接下来我们寻找一个GameObject,在它的Start函数里添加我们需要的东西。满足需求的Object可以是环境光,也可以是任意一个空项目。

我新建了一个Texture Render的C#脚本,接下来我们使用这个函数,获取所有的砖块:

var roads = GameObject.FindGameObjectsWithTag("road");

接下来这个roads变量就是一个list,其成员便是所有的Tag为road的GameObject。而且更巧的是,它是按照顺序寻找的,这样我们就可以方便地从头到尾按顺序遍历所有砖块。

有关Find各种变种函数的问题,可以移步Document进行查看。

下一步是找出Texture到底是在哪个属性里。我一开始也不明白到底贴图应该是赋什么值好,最后得出结论,应该是赋给这个属性:

roads[i].GetComponent<Renderer>().material.mainTexture

老版本的Unity,可能直接使用

renderer.material.mainTexture

但是这个用法已经过时了。

第三步,我们怎么正确将贴图加载进来。

我翻阅了很多资料,最后发现Resource.Load函数可以胜任这个工作。

首先我们将需要的资源文件放到根目录的Assets/Resources文件夹里。如果没有的话需要创建新文件夹。为什么呢?因为Load()函数的Path是相对地址,而它是从Resource目录找起的。请务必记住这个坑。

现在我在里面放了一些素材,之后我们这么调用。

Resources.Load("rockA") as Texture2D;

as起到了类型转换的作用。我们也可以这么写。

(Texture2D)Resources.Load("rockA");

接下来将加载的资源赋给Object的属性。

roads[i].GetComponent<Renderer>().material.mainTexture = Resources.Load("rockA") as Texture2D;

接下来,我们写一个遍历就可以了。

var roads = GameObject.FindGameObjectsWithTag("road");
for (int i = ; i < roads.Length; i++)
{
roads[i].GetComponent<Renderer>().material.mainTexture = Resources.Load("grassB") as Texture2D;
}

这里只使用了一个素材,最后渲染出来的效果是这样的:

这样我们就做到了动态加载贴图。

我之前提到过,这是一个音乐游戏。我通过自己的节奏算法,将节奏以list形式存储。

那么我只需要再写一个转换算法,将对应的砖块换成特别的砖块,这样就可以很方便地加载各种各样的音乐。

P.S. Debug.Log()真的很好用,在Unity中,这个功能基本替代了断点功能和变量监视。

Unity使用脚本进行批量动态加载贴图的更多相关文章

  1. (转)Unity 导出XML配置文件,动态加载场景

    参考:http://www.xuanyusong.com/archives/1919 http://www.omuying.com/article/48.aspx   主要功能: 1.导出场景的配置文 ...

  2. Unity动态加载和内存管理(三合一)

    原址:http://game.ceeger.com/forum/read.php?tid=4394#info 最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Re ...

  3. Unity3D动态加载外部资源

    最近一直在和这些内容纠缠,把心得和大家共享一下: Unity里有两种动态加载机制:一是Resources.Load,一是通过AssetBundle,其实两者本质上我理解没有什么区别.Resources ...

  4. unity3d动态加载dll的API以及限制

    Unity3D的坑系列:动态加载dll 一.使用限制 现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Androi ...

  5. Unity3D的坑系列:动态加载dll

    我现在参与的项目是做MMO手游,目标平台是Android和iOS,iOS平台不能动态加载dll(什么原因找乔布斯去),可以直接忽略,而在Android平台是可以动态加载dll的,有了这个就可以实现代码 ...

  6. 动态加载js和css

    开发过程中经常需要动态加载js和css,今天特意总结了一下常用的方法. 1.动态加载js 方法一:动态加载js文件 // 动态加载js脚本文件 function loadScript(url) { v ...

  7. Echarts使用及动态加载图表数据 折线图X轴数据动态加载

    Echarts简介 echarts,缩写来自Enterprise Charts,商业级数据图表,一个纯JavaScript的图表库,来自百度...我想应该够简洁了 使用Echarts 目前,就官网的文 ...

  8. Unity学习笔记(5):动态加载Prefab

    第一种方法,从Resources文件夹读取Prefab Assets/Resources文件夹是Unity中的一个特殊文件夹,在博主当前的认知里,放在这个文件夹里的Prefab可以被代码动态加载 直接 ...

  9. unity动态加载(翻译) .

    AssetBundles are files which you can export from Unity to contain assets of your choice. These files ...

随机推荐

  1. ssr 服务端安装教程

    1 ShadowsocksR 多用户版服务端安装教程(SS-Panel后端) 2 ShadowsocksR 单用户版服务端安装教程

  2. 改数据库编码latin1为utf8

    因为建数据库的时候没有选utf8,所以默认是latin1 在网上查了好多资料 ,试了很多种方法,都不奏效,有用的一个竟然要一列一列的改, 最后在评论里发现了这个,抱着试一试的心态竟然成功改过来了,在这 ...

  3. js和jquery设置disabled属性为true使按钮失效

    设置disabled属性为true即为不可用状态. JS: document.getElementByIdx("btn").disabled=true;   Jquery: $(& ...

  4. python web开发-flask中的url带斜线和不带斜线区别详解

    通过flask进行路由配置的时候,有一个细节,就是同样的url,带上"/"和不带"/"有什么区别. 举例说明: 比如有个url,名字为"/url&qu ...

  5. 九度OJ题目1003:A+B

    while(cin>>str1>>str2)就行了,多简单,不得不吐槽,九度的OJ真奇葩 题目描述: 给定两个整数A和B,其表示形式是:从个位开始,每三位数用逗号", ...

  6. springboot 整合 MongoDB 实现登录注册,html 页面获取后台参数的方法

    springboot简介: Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不 ...

  7. CentOS 7主机名的弯弯绕绕

    在CentOS 6中,修改主机名方式很简单,临时修改主机名使用hostname命令,永久修改主机名直接写进文件/etc/sysconfig/network中即可. 但在CentOS 7中,主机名就没那 ...

  8. 学习 CosmosDB (NoSql)

    Microsoft Azure官网 学习cosmos DB,也称作 documentDB,NoSql,不是关系型数据库,数据以Json的格式存储,灵活性强. 1.DLL 2.Connector set ...

  9. iOS加密算法总结

    常用加密算法: DES:Data Encryption Standard,即数据加密算法,它是IBM公司于1975年研究成功并公开发表的. DES(数据加密标准)原理: DES是一个分组加密算法,它以 ...

  10. ibatis annotations 注解方式返回刚插入的自增长主键ID的值

    mybatis提供了注解方式编写sql,省去了配置并编写xml mapper文件的麻烦,今天遇到了获取自增长主键返回值的问题,发现相关问答比较少,还好最后还是圆满解决了,现把重点记录一下,解决问题的关 ...