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. 而且里面的项还删不掉 然后在网上搜了一下,找到了原 ...
随机推荐
- 手动部署 kubernetes HA 集群
前言 关于kubernetes HA集群部署的方式有很多种(这里的HA指的是master apiserver的高可用),比如通过keepalived vip漂移的方式.haproxy/nginx负载均 ...
- jquery动态添加的元素不能直接应用事件方法的时候
对于由 jQuery 动态生成的元素,如用 jQuery 给元素添加 class,或者直接添加一对 p 标签,不能直接绑定常用的事件,如 click.因为这些元素属于动态生成,除非采用 onclick ...
- 带URL的XML解析方式
XmlDocument xml = new XmlDocument(); xml.LoadXml(responseString); XmlNode root = xml.DocumentElement ...
- Hierarchical clustering:利用层次聚类算法来把100张图片自动分成红绿蓝三种色调—Jaosn niu
#!/usr/bin/python # coding:utf-8 from PIL import Image, ImageDraw from HierarchicalClustering import ...
- webpack打包后的文件
用了webpack打包工具,你是不是有时会疑惑,写了一个很简单的函数,结果生成那么多东西,而且还没有问题?下面,我从三种情况来分析打包后的入口文件,帮助自己理解webpack打包,也为平时定位产出目录 ...
- 【整理】Java 8新特性总结
闲语: 相比于今年三月份才发布的Java 10 ,发布已久的Java 8 已经算是老版本了(传闻Java 11将于9月25日发布....).然而很多报道表明:Java 9 和JJava10不是 LTS ...
- Java 基础 Java平台的3个版本
Java平台有3个版本:适用于小型设备和智能卡的JavaME(Java Platform Micro Edition,Java微型版).适用于桌面系统的JavaSE(Java Platform Sta ...
- node.js官方文档解析 01—assert 断言
assert-------断言 new assert.AssertionError(options) Error 的一个子类,表明断言的失败. options(选项)有下列对象 message < ...
- vue_组件间通信:自定义事件、消息发布与订阅、槽
自定义事件 只能用于 子组件 向 父组件 发送数据 可以取代函数类型的 props 在父组件: 给子组件@add-todo-event="addTodo" 在子组件: 相关方法中, ...
- CSS 使用absolute 是<div>居中
<style> .col-center-block { position: absolute; top: 50%; ...