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组件路径自动生成的更多相关文章

  1. Unity UI代码自动生成

    最近在做新项目跟同事讨论UI制作方案, 这里就说下根据节点来生成UI代码,  这个工具可以根据预设生成一个分布类.目前组件还不是很完善, 自己使用需要修改部分代码 组件功能如下: 1. 自动设置引用 ...

  2. 将文件夹中的图像路径自动生成txt文件(便于opencv遍历处理图像)

    代码: #include<iostream> #include<vector> #include<io.h> #include<fstream> usi ...

  3. DirectX10安装路径自动生成DXSDK_DIR

    DXSDK_DIR C:\Program Files (x86)\Microsoft DirectX SDK (February 2010)\

  4. Unity 自动生成组件索引类工具

    Unity 自动生成组件索引类工具 需求由来 我们在写UI类时 需要获取预设中的组件 joystick = transform.Find("joystick"); backgrou ...

  5. 自动生成查找组件的lua代码

    本篇主要解决的问题是使用lua脚本编写unity业务逻辑时,自动生成一些查找组件及绑定控件事件的lua代码! 现在很多unity项目都是用ulua作为热更新解决方案,因此需要用lua来写相关的逻辑,经 ...

  6. 组件化框架设计之apt编译时期自动生成代码&动态类加载(二)

    阿里P7移动互联网架构师进阶视频(每日更新中)免费学习请点击:https://space.bilibili.com/474380680 本篇文章将继续从以下两个内容来介绍组件化框架设计: apt编译时 ...

  7. wix在使用heat自动生成wxs时添加windows服务组件

    最近需要给安装包增加一个windows服务组件,按照我的理解,我以为只需要Product.wxs加一段如下的标签就可以了 <Componet Id="myservice"&g ...

  8. Unity自动生成AnimatorController

    上一篇写了如何自动切割动画,这一篇写如何自动生成AnimatorController. 之前网上查了很多资料,看的一直很蒙,看不懂是怎么回事的,这里我先给大家明确几个概念: 画的不好,大家将就着看,写 ...

  9. Unity 导出的android项目自动生成Private Libraries

    如果Unity里面Plugins/Android 添加了 jar 文件,则导出Android 项目时会自动生成 Private Libraries. 而且里面的项还删不掉 然后在网上搜了一下,找到了原 ...

随机推荐

  1. kvm虚拟化2-qemu-kvm

    Kvm  只支持x86 64的硬件虚拟化    要求cpu必须支持硬件虚拟化 HVM Kvm两个组件: 1 kvm.ko模块装入后为/dev/kvm 工作为hypervisor ,在用户空间通过系统调 ...

  2. Fiddler工具使用介绍

    Fiddler基础知识 Fiddler是强大的抓包工具,它的原理是以web代理服务器的形式进行工作的,使用的代理地址是:127.0.0.1,端口默认为8888,我们也可以通过设置进行修改. 代理就是在 ...

  3. django——简介

    1.django的介绍 Django是一个开放源代码的Web应用框架,由Python写成.采用了MVT的软件设计模式,即模型Model,视图View和模板Template.它最初是被开发来用于管理劳伦 ...

  4. web测试注意点

    关于网页测试我们需要注意的地方有: 1.每次测试之前都需要代码更新.清理缓存,测试数据使用新数据. 2.各模块的信息归类是否正确.比如进入一级栏目或二级栏目的列表页,查看左侧栏目名称,右侧文章标题及内 ...

  5. ECMA Script 6_对象的扩展

    对象 1. ES6 允许直接写入变量和函数,作为对象的属性和方法 const foo = 'bar'; /*****************属性的优化********************/ con ...

  6. (86)Wangdao.com第十九天_JavaScript 接口之 ParentNode 和 ChildNode

    ParentNode 接口,ChildNode 接口 节点对象除了继承 Node 接口以外,还会继承其他接口. ParentNode 接口 表示当前节点是一个父节点,提供一些处理子节点的方法. Chi ...

  7. openlayers3 基础(常见方法,类及实现)

    ol3接口大全1.ol.Map类:(地图容器类) 实现: ol.Map(参数) 参数说明:1.1 target,说明地图所在的html元素. 如果没有指定,必须调用ol.Map类的setTarget( ...

  8. Sun SPARC Enterprise M5000 启动步骤

    1.串口线与笔记本连接(需在笔记本上安装串口线的驱动程序,usb口接笔记本,网线水晶头接M5000)2.接通电源.此时XSCF卡充电,自检,前面板XSCF等闪烁.3.登录超级终端,注意波特率要跟主机匹 ...

  9. 使用mysql设计一个全局订单生产计数器

    2018年8月10日08:53:50 一般生产订单号的方式 1,使用时期+随机数1+随机数2 缺点,有可能在并发的时候会出现重复,解决办法就是加唯一索引,在插入数据的做查询是否已经被使用 2,使用时间 ...

  10. X86-32位架构的CPU是不是内存只能到4G

    不是的,可以通过分页机制扩展实现超过4G内存的支持. 什么是分页机制扩展? PAE. 什么是PAE?   PAE如何实现的?