untiy3d小工具——修改scene与prefab中的sprite
- 坑1:因为替换图片要获取所有包含image的组件,开始我使用的是gameobject.getComponents<Image>()和FindObjectsOfType<Image>()
- 然鹅~getcomponts只能得到gameobject本身Image类型的所有组件,无法获取子物体上的。
- FindObjectsOfType<Image>()只能获取所有激活的image类型的物体,image的enable未开启也可以获取。
- 使用GetComponentsInChildren<Image>(true)可以获得所有image组件,true的作用是将未激活的物体的也包含在集合中,不填写默认为FALSE。
- 以下是测试结果

- 坑2:很好,现在所有预设的图片都替换好了,并且ctrl+S,重新开了一遍工程,你会发现所有预设又回去了,为什么呢?我也不太清楚:-D。总之需要在代码里保存,在所有图片替换完毕后加一句EditorUtility.SetDirty(go); unity文档说明:如果您通过其他方式修改非场景对象,并且不希望为您的修改创建撤消条目时可以使用。
- 坑3:记得加上场景保存代码EditorApplication.SaveScene();
以下附上替换脚本,将脚本放在Editor文件夹下,如何获取需要修改的文件可以去查一下AssetDatabase的用法
using UnityEngine;
using UnityEditor;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEngine.SceneManagement; public class AssetReplace : EditorWindow{
[MenuItem("工具/替换Sprite")]
public static void SpriteReplace(){
EditorWindow.GetWindow<AssetReplace> (title:"SpriteReplace").Show ();
} /// <summary>
/// 老资源
/// </summary>
Sprite sp0; /// <summary>
/// 新资源
/// </summary>
Sprite sp1;
string s; void Update(){ } void OnGUI()
{ GUILayout.Label ("oldSprite");
sp0 = EditorGUILayout.ObjectField(sp0, typeof(Sprite)) as Sprite;
GUILayout.Label ("newSprite");
sp1 = EditorGUILayout.ObjectField (sp1, typeof(Sprite)) as Sprite; if(GUILayout.Button("替换预设Sprite")){
Debug.LogError ("替换预设中的Sprite");
ChangeSpriteInPrefab();
} if (GUILayout.Button ("替换场景Sprite")) {
Debug.LogError ("替换场景中的Sprite");
ChangeSpriteInScene();
} }
void ChangeSpriteInPrefab( )
{
List<string> ss = FileTool.getFiles(Application.dataPath, "prefab");
if (ss.Count > )
{
for (int i = ; i < ss.Count; i++)
ss[i] = ss[i].Replace(Application.dataPath, "Assets");
} for (int i = ; i < ss.Count; i++)
{
GameObject go= AssetDatabase.LoadAssetAtPath<GameObject>(ss[i]);
if (go == null)
{
continue;
} Image[] imgs =go.GetComponentsInChildren<Image>(true);
if (imgs == null) continue;
for (int j = ; j < imgs.Length; j++)
{
if (imgs[j].sprite == sp0)
{
imgs[j].sprite = sp1;
}
}
EditorUtility.SetDirty (go);
}
} void ChangeSpriteInScene()
{
Canvas[] cns = FindObjectsOfType<Canvas>();
foreach (Canvas item in cns)
{
Image[] imgs = item.GetComponentsInChildren<Image> (true);
foreach(Image img in imgs){
if (img.sprite == sp0)
img.sprite = sp1;
}
}
EditorApplication.SaveScene ();
} }
ps:一点体会,最近在做游戏界面,差不多完工到了整资源的时候,(菜鸟(是我)做界面就是会出很多错误)发现很多图片重复,一个个修改太麻烦了,前辈就让我写个小工具一起替换。没错!不知天高地厚的我以为这是个很简单的事情,于是交了一份全是漏洞的代码上去,前辈帮我指出错误的时候那叫一个羞愧啊冏rz。所以作为一个菜鸟,即使你很菜也一定要心细,不要眼高手低,呆在自己挖的井里就以为这是全世界了。
untiy3d小工具——修改scene与prefab中的sprite的更多相关文章
- node.js小工具--修改Xcode 'Create by'作者名称
简介 用Xcode创建源文件时会自动在文件开始位置加入如下注释: // // ISSImageCycleScrollView.m // SoftTravel // // Created by iss1 ...
- 【java小工具】从.java文件中筛选出方法,并计算出方法在这些文件中出现的次数
package getMethod; import java.io.*; import java.util.*; import java.util.regex.Matcher; import java ...
- 用C语言实现解析简单配置文件的小工具
本文介绍作者写的一个小工具,简单的代码中包含了C语言对字符串的处理技巧,对文本文件的简单解析,二进制文件的数据复制的方法,以及格式化输出文本文件的示例. 工具的输入是如下内容的配置文件: ;资源管理器 ...
- C#7.2——编写安全高效的C#代码 c# 中模拟一个模式匹配及匹配值抽取 走进 LINQ 的世界 移除Excel工作表密码保护小工具含C#源代码 腾讯QQ会员中心g_tk32算法【C#版】
C#7.2——编写安全高效的C#代码 2018-11-07 18:59 by 沉睡的木木夕, 123 阅读, 0 评论, 收藏, 编辑 原文地址:https://docs.microsoft.com/ ...
- 小工具:天气查询 Vs自定义设置 DevGridControl中GridView排序问题 小工具:火车票查询 小工具:邮件发送 小工具:截图&简单图像处理
小工具:天气查询 开发一个天气查询的工具主要由两步构成,一是数据的获取,二是数据的展示. 一.数据获取 数据获取又可以分为使用其它公司提供的API和手动抓取其它网站数据. 1. 某公司提供的AP ...
- Confluence 6 从外部小工具中注册访问
希望从 Confluence 中删除一个小工具,你可以选择小工具边上的 URL ,然后单击删除(Delete). 如果你希望取消订阅一个应用的小工具,你需要删除整个订阅.你不能仅仅删除你订阅中的某一个 ...
- Confluence 6 外部小工具在其他应用中设置可信关系
为了在你的 Confluence 中与其他应用建立外部小工具,我们建议你在 2 个应用之间设置 OAuth 或者信任的应用连接关系.在这个例子中,外部应用为小工具的服务器(服务器提供者)和 Confl ...
- 如何通过C#开发调用Skyline软件中提供的小工具
熟悉Skyline的朋友会知道,在TerraBuilder和TerraExplorer Pro软件的安装目录里,提供了很多个小工具(exe程序): 虽然我们看不到这些小工具的源代码,但我们还是可以在自 ...
- C# JSON使用过程中开发的小工具
我在用JSON的过程中,经常要去看一下JSON的结构,而JSON串大不部分时候都是未格式化的数据,一次我不得不用一些网页上的在线解析和格式化工具来进行格式化查看,但是这些网页有时候并不好用:因此就结合 ...
随机推荐
- 并发编程---线程 ;python中各种锁
一,概念 在传统操作系统中,每个进程有一个地址空间,而且默认就有一个控制线程 线程顾名思义,就是一条流水线工作的过程,一条流水线必须属于一个车间,一个车间的工作过程是一个进程 --车间负责把资源整合到 ...
- CentOS 下安装 Hexo 博客
前言: 之前一直使用Wordpress架构作为博客网站架构,但是现在频频爆出漏洞.实在是不敢用也不想用了,然后群里面有小伙伴用的是 Github 搭建 Hexo 架构博客.就写了这个教程,给自己做个参 ...
- easyui里面的加载tree的两种方式
第一种: 使用EasyUI中Tree 符合EasyUI中Tree的Json格式,我们先看一下,格式是如何的 [{ "id":1, "text":"My ...
- docker搭建elk+cerebro环境
ELK的帮助手册 Docker Hub官网:https://hub.docker.com/r/sebp/elk/ Docker ELK使用文档:http://elk-docker.readthedoc ...
- python 获取文件路径
一种是获取当前你正在操作文件的路径 一种是获取你执行文件的路径(比如你在你调用的包里面更改了,执行的时候就不会找你的包的路径,而是你执行文件的路径)
- tomcat正常启动后http://localhost:8080/报错404
病症: tomcat在eclipse里面能正常启动,而在浏览器中访问http://localhost:8080/不能访问,且报404错误.同时其他项目页面也不能访问.关闭eclipse里面的tomca ...
- python全栈开发_day5_字符串及列表类型
一:字符串 1)优先掌握知识点. a=" 21j3:b12jk:b3j12:3bjk12 " #内置方法之strip print(a.strip(" ")) # ...
- python函数参数类型及其顺序
根据inspect模块官文文档中关于函数参数类型的相关说明,python函数参数共有五种类型,按顺序分别为:POSITIONAL_ONLY.POSITIONAL_OR_KEYWORD.VAR_POSI ...
- 关于:Mac下IDEA更换Maven仓库
一.MAC安装配置maven环境变量 1.下载maven包: 下载链接:
- prim和kruskal算法
//邻接矩阵 int n,G[MAXV][MAXN]; int d[MAXV];//表示到树的距离 bool vis[MAXV]={false}; int prim(){ fill(d,d+MAXV, ...