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. Redis常见面试题

    介绍:Redis 是一个开源的使用 ANSI C 语言编写.遵守 BSD 协议.支持网络.可基于内存亦可持久化的日志型.Key-Value 数据库,并提供多种语言的 API的非关系型数据库. 传统数据 ...

  2. Laravel 5 中间件、路由群组、子域名路由、 权限控制的基本使用方法

    创建控制器: php artisan make:controller Admin/IndexController 创建Middleware: php artisan make:middleware T ...

  3. 微信小程序--家庭记账本开发--02

    代码文件的了解 对于一个程序的开发,代码的了解的必须的,不同的后缀名文件有着不同的作用,通过学习,对于微信小程序开发中的文件有了自己的理解. 文件概述 一个微信小程序一般有有pages文件夹,util ...

  4. 关于Function Language(函数式语言是什么?包含哪些语言?为什么函数式语言流行?)

    1.What? Function Language是一种非冯诺依曼式的程序设计语言.函数式语言的主要成分是原始函数.定义函数和函数型. 这种语言具有较强的组织数据结构的能力,可以把某一数据结构(如数组 ...

  5. 自定义MVC实现登录案例

    MVC框架: MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界面显示分离 ...

  6. Nested Dolls 贪心 + dp

    G: Nested Dolls Time Limit: 1 Sec     Memory Limit: 128 Mb     Submitted: 99     Solved: 19 Descript ...

  7. java列表数据基本操作

    列表数据组基本的增删改查 package cn.edu.fhj.day002; import java.util.ArrayList; public class ArrList { // 定义一个主函 ...

  8. GMA Round 1 离心率

    传送门 离心率 P是椭圆$\frac{x^2}{a^2}+\frac{y^2}{b^2}=1$上一点,F1.F2为椭圆左右焦点.△PF1F2内心为M,直线PM与x轴相交于点N,NF1:NF2=4:3. ...

  9. __x__(27)0907第四天__ float 浮动

     float 浮动 块元素脱离文档流,水平排列. 浮动元素 会尽量往左上(left),或者右上(right)浮动,直到遇到 块元素 或者 其他浮动元素. 可选值: none;   默认值,不脱离文档流 ...

  10. FJUT3260

    不是啊..不是说双栈嘛,,怎么是个**题啊. 链接:  http://120.78.128.11/Problem.jsp?pid=3260    从左到右扫一遍,把相交的区间扔到一起算,那么就变成了一 ...