unity组件路径自动生成
unity 有时候找路径太麻烦 写了一个自动生成脚本的工具
using System.Collections.Generic;
using System.IO;
using System.Text;
using UnityEditor;
using UnityEngine; public class Auto_BuildCode
{
private static string path_dic = Application.dataPath + "/Code";
private static string path_suffix = ".cs";
private static string space_one = " ";
private static string space_two = " "; private static Dictionary<string, string> compon_tranform = new Dictionary<string, string>();
private static Dictionary<string, string> compon_image = new Dictionary<string, string>();
private static Dictionary<string, string> compon_text = new Dictionary<string, string>();
private static Dictionary<string, string> compon_slider = new Dictionary<string, string>(); [MenuItem("Game/BuildCode")]
private static void BuildCode()
{
Object select = Selection.activeObject; if (select != null && select is GameObject)
{
GameObject prefab = (GameObject)select;
Get_All_Compon(prefab.transform);
string code_name = prefab.name;
Code_Create(code_name);
Code_Write(code_name);
} AssetDatabase.Refresh();
} private static void Get_All_Compon(Transform prefab)
{
Transform[] components = prefab.GetComponentsInChildren<Transform>();
for (int i = ; i < components.Length; i++)
{
string compon = components[i].name.Split('_')[];
string compon_path = string.Empty; switch (compon)
{
case "Transform":
compon_path = Get_Compon_Path(prefab, components[i]);
compon_tranform.Add(components[i].name, compon_path);
break;
case "Image":
compon_path = Get_Compon_Path(prefab, components[i]);
compon_image.Add(components[i].name, compon_path);
break;
case "Text":
compon_path = Get_Compon_Path(prefab, components[i]);
compon_text.Add(components[i].name, compon_path);
break;
case "Slider":
compon_path = Get_Compon_Path(prefab, components[i]);
compon_slider.Add(components[i].name, compon_path);
break;
default:
break;
}
}
} private static string Get_Compon_Path(Transform parent, Transform child)
{
StringBuilder sb = new StringBuilder(); while (true)
{
if (child.parent == null)
{
break;
}
else if (child.parent != parent)
{
sb.Insert(, child.name);
sb.Insert(, "/");
}
else
{
sb.Insert(, child.name);
break;
}
child = child.parent;
} return sb.ToString();
} private static void Code_Create(string code_name)
{
if (!Directory.Exists(path_dic))
{
Directory.CreateDirectory(path_dic);
} string path_file = path_dic + "/" + code_name + path_suffix; if (File.Exists(path_file))
{
File.Delete(path_file);
}
} private static void Code_Write(string code_name)
{
string path_file = path_dic + "/" + code_name + path_suffix; FileStream fs = new FileStream(path_file, FileMode.OpenOrCreate);
StreamWriter sw = new StreamWriter(fs); sw.WriteLine("using System;");
sw.WriteLine("using System.Collections;");
sw.WriteLine("using System.Collections.Generic;");
sw.WriteLine("using UnityEngine;");
sw.WriteLine("using UnityEngine.UI;");
sw.WriteLine("");
sw.WriteLine("public class " + code_name + " : MonoBehaviour");
sw.WriteLine("{"); #region 定义变量
foreach (var compon in compon_tranform)
{
sw.WriteLine(space_one + "public Transform " + compon.Key + ";");
} foreach (var compon in compon_image)
{
sw.WriteLine(space_one + "public Image " + compon.Key + ";");
} foreach (var compon in compon_text)
{
sw.WriteLine(space_one + "public Text " + compon.Key + ";");
} foreach (var compon in compon_slider)
{
sw.WriteLine(space_one + "public Slider " + compon.Key + ";");
}
#endregion sw.WriteLine(space_one + "private void Awake()");
sw.WriteLine(space_one + "{"); #region 对UI变量进行赋值
foreach (var compon in compon_tranform)
{
sw.WriteLine(space_two + compon.Key + " = " + "transform.Find(" + '"' + compon.Value + '"' + ");");
} foreach (var compon in compon_image)
{
sw.WriteLine(space_two + compon.Key + " = " + "transform.Find(" + '"' + compon.Value + '"' + ").GetComponent<Image>();");
} foreach (var compon in compon_text)
{
sw.WriteLine(space_two + compon.Key + " = " + "transform.Find(" + '"' + compon.Value + '"' + ").GetComponent<Text>();");
} foreach (var compon in compon_slider)
{
sw.WriteLine(space_two + compon.Key + " = " + "transform.Find(" + '"' + compon.Value + '"' + ").GetComponent<Slider>();");
}
#endregion sw.WriteLine(space_one + "}");
sw.WriteLine("}"); sw.Dispose();
fs.Dispose();
}
}
unity组件路径自动生成的更多相关文章
- Unity UI代码自动生成
最近在做新项目跟同事讨论UI制作方案, 这里就说下根据节点来生成UI代码, 这个工具可以根据预设生成一个分布类.目前组件还不是很完善, 自己使用需要修改部分代码 组件功能如下: 1. 自动设置引用 ...
- 将文件夹中的图像路径自动生成txt文件(便于opencv遍历处理图像)
代码: #include<iostream> #include<vector> #include<io.h> #include<fstream> usi ...
- DirectX10安装路径自动生成DXSDK_DIR
DXSDK_DIR C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\
- Unity 自动生成组件索引类工具
Unity 自动生成组件索引类工具 需求由来 我们在写UI类时 需要获取预设中的组件 joystick = transform.Find("joystick"); backgrou ...
- 自动生成查找组件的lua代码
本篇主要解决的问题是使用lua脚本编写unity业务逻辑时,自动生成一些查找组件及绑定控件事件的lua代码! 现在很多unity项目都是用ulua作为热更新解决方案,因此需要用lua来写相关的逻辑,经 ...
- 组件化框架设计之apt编译时期自动生成代码&动态类加载(二)
阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将继续从以下两个内容来介绍组件化框架设计: apt编译时 ...
- wix在使用heat自动生成wxs时添加windows服务组件
最近需要给安装包增加一个windows服务组件,按照我的理解,我以为只需要Product.wxs加一段如下的标签就可以了 <Componet Id="myservice"&g ...
- Unity自动生成AnimatorController
上一篇写了如何自动切割动画,这一篇写如何自动生成AnimatorController. 之前网上查了很多资料,看的一直很蒙,看不懂是怎么回事的,这里我先给大家明确几个概念: 画的不好,大家将就着看,写 ...
- Unity 导出的android项目自动生成Private Libraries
如果Unity里面Plugins/Android 添加了 jar 文件,则导出Android 项目时会自动生成 Private Libraries. 而且里面的项还删不掉 然后在网上搜了一下,找到了原 ...
随机推荐
- 查看linux空间大小
du -sh : 查看当前目录总共占的容量.而不单独列出各子项占用的容量 du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量.
- 蓝桥杯 全球变暖(dfs)
标题:全球变暖 [题目描述]你有一张某海域NxN像素的照片,"."表示海洋."#"表示陆地,如下所示: 其中"上下左右"四个方向上连在一起的 ...
- selenium webdriver 如何添加cookie
一. webdriver中常用的cookie方法 webdriver中提供了操作cookie的相关方法: get_cookies() 获得cookie信息 add_c ...
- 辅助排序和Mapreduce整体流程
一.辅助排序 需求:先有一个订单数据文件,包含了订单id.商品id.商品价格,要求将订单id正序,商品价格倒序,且生成结果文件个数为订单id的数量,每个结果文件中只要一条该订单最贵商品的数据. 思路: ...
- 下面为初学者分享一下SQL 数据库学习资料
一.基础 1.说明:创建数据库CREATE DATABASE database-name2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份 ...
- LOJ.6504.[雅礼集训2018 Day5]Convex(回滚莫队)
LOJ 莫队.发现只需要维护前驱后继就可以了. 但是加入一个点需要找到它当前的前驱后继,很麻烦还带个\(\log\). 但是如果只有删除某个点,只需要更新一下它的前驱后继即可. 用回滚莫队就好惹. 撤 ...
- UWB DWM1000 智能跟踪小车 --[蓝点无限]
蓝点DWM1000 模块已经打样测试完毕,有兴趣的可以申请购买了,更多信息参见 蓝点论坛 UWB 智能跟踪小车:一共三个UWB模块,手持一个,小车上两个. 通过测量小车上两个模块与手持模块之间的距离, ...
- 作用域和闭包(二)this
this 要在执行时才确认,定义时无法确认 1. 作为构造函数执行 2. 作为对象属性执行 3.作为普通函数执行 4. call,apply,bind 改变this
- Hibernate 双向一对多映射
附代码: public class Order { private Integer id; private String OrderName; private Customer customer; p ...
- PeopleSoft如何查找jar包冲突
PeopleSoft要查找jar包冲突问题,不像maven可以打印出所有依赖,但既然是在JVM上运行,就可以启用JVM参数 路经:%ps_cfg_home%\appserv\Domain 文件名:ps ...