【Unity3D日常开发】提供开发效率系列之工具类的建立
发布日期:2021-06-30 11:40:08 浏览次数:2 分类:技术文章

本文共 9066 字,大约阅读时间需要 30 分钟。

推荐阅读

一、导言

在开发中,我们会将调用次数比较多的函数单独提出来写到一个类中,比如字符串转16进制,给字符串加密这些都是比较常用的,就可以将这些常用的函数提取出来,放到工具类中,方便调用

二、工具类

2-1、查找对象

根据父物体对象,找到指定名字的子物体,返回GameObject对象

//child 是要查询的物体的父节点,name是要查询的子物体的名字    public static GameObject Find(GameObject child, string name)    {
//定义一个Transform 变量it用来接收查询到子物体 Transform it = child.transform.Find(name); if (it != null) {
return it.gameObject; } if (child.transform.childCount == 0) {
return null; } //查找子对象的子对象 for (int i = 0; i < child.transform.childCount; i++) {
//递归查询 定义一个Transform 变量its用来接收查询到子物体 GameObject its = Find(child.transform.GetChild(i).gameObject, name); //如果不为空,就是存在次物体返回该物体 if (its != null) {
return its.gameObject; } } return null; }

根据父物体对象,找到指定组件的指定的名字的子对象,返回的是指定组件的对象

//child 是要查询的物体的父节点,name是要查询的子物体的名字 返回的是一个泛型    public static T Find
(GameObject child, string name) {
//定义一个Transform 变量it用来接收查询到子物体 Transform it = child.transform.Find(name); if (it != null) {
return it.GetComponent
(); } if (child.transform.childCount == 0) {
return default; } //查找子对象的子对象 for (int i = 0; i < child.transform.childCount; i++) {
//递归查询 定义一个Transform 变量its用来接收查询到子物体 GameObject its = Find(child.transform.GetChild(i).gameObject, name); //如果不为空,就是存在次物体返回该物体 if (its != null) {
return its.GetComponent
(); } } return default; }

根据名字,返回指定名字下的组件

///     /// 获取物体名下的 T 组件    ///     /// 物体名    /// 
public static T FindT
(string namestring) {
return GameObject.Find(namestring).GetComponent
(); }

根据名字,返回指定Button组件

///     /// 获取Button组件    ///     ///     /// 
public static Button FindBtn(string namestring) {
return GameObject.Find(namestring).GetComponent

2-2、对文本的处理

将数组中的所有字符按照特定分隔符拼接

///     /// 将一个数组转换为一个字符串,按特定的分隔符拼接    ///     /// 
/// /// ///
public static string ArrayToString
(T[] tarray, string splitestr) {
string arrayString = ""; for(int i = 0;i

将字符串转化为字节数组

///     /// 将一个字符串转换为一个字节数组    ///     ///     /// 
public static byte[] StringToByteArray(string msg) {
return System.Text.Encoding.UTF8.GetBytes(msg); }

将byte数组转换为字符串

///     /// byte数组转换为字符串    ///     ///     /// 
public static string ByteArrayToString(byte[] byteArray, int index, int size) {
return System.Text.Encoding.UTF8.GetString(byteArray, index ,size); }

将字符串根据指定分隔符拆分,然后转化为Int数组

public static int[] SpliteStringToIntArray(string str, char splitechar = ',')    {
//拆分 string[] strArray = SpliteStringByChar(str, splitechar); //定义一个int数组 int[] intArray = new int[strArray.Length]; for (int i = 0; i < strArray.Length; i++) {
intArray[i] = int.Parse(strArray[i]); } return intArray; } /// /// 根据特定的字符拆分字符串 /// /// 被拆分字符串 /// 拆分符 ///
public static string[] SpliteStringByChar(string targetstr, char splitechar = ',') {
return targetstr.Split(splitechar); }

将字符串根据指定分隔符拆分,然后转化为任意数组

public static T[] SpliteStringToArray
(string str, char splitechar = ',') {
//拆分 string[] strArray = SpliteStringByChar(str, splitechar); T[] tArray = new T[strArray.Length]; for(int i = 0;i
/// 根据特定的字符拆分字符串 /// ///
被拆分字符串 ///
拆分符 ///
public static string[] SpliteStringByChar(string targetstr, char splitechar = ',') {
return targetstr.Split(splitechar); }

将字符串根据指定分隔符拆分,然后转化为float数组

public static float[] SpliteStringTofloatArray(string str, char splitechar = ',')    {
//拆分 string[] strArray = SpliteStringByChar(str, splitechar); //定义一个int数组 float[] intArray = new float[strArray.Length]; for (int i = 0; i < strArray.Length; i++) {
intArray[i] = float.Parse(strArray[i]); } return intArray; } /// /// 根据特定的字符拆分字符串 /// /// 被拆分字符串 /// 拆分符 ///
public static string[] SpliteStringByChar(string targetstr, char splitechar = ',') {
return targetstr.Split(splitechar); }

把任意对象转成Json

///    /// 把一个任意的对象转换为json的byte数组   ///    ///    /// 
public static byte[] ObjectToJsonBytes(object target) {
string json = LitJson.JsonMapper.ToJson(target); return StringToByteArray(json); } /// /// 将一个字符串转换为一个字节数组 /// /// ///
public static byte[] StringToByteArray(string msg) {
return System.Text.Encoding.UTF8.GetBytes(msg); }

使用正则表达式 将unicode转换为中文

///     /// 正则表达式:Unicode转换中文    ///     ///     /// 
public static string UnicodeToString(string unicode) {
Regex regex = new Regex(@"(?i)\\[uU]([0-9a-f]{4})"); return regex.Replace(unicode, delegate (Match m) {
return ((char)Convert.ToInt32(m.Groups[1].Value, 16)).ToString(); }); }

2-3、对对象的处理

根据预制体和父物体,克隆对象,然后返回这个克隆的对象

///     /// 克隆并指定父物体    ///     ///     ///     /// 
public static GameObject Instantiate(GameObject prefab,GameObject parent) {
GameObject gb = GameObject.Instantiate(prefab); gb.transform.parent = parent.transform; gb.transform.localPosition = gb.transform.localEulerAngles = Vector3.zero; gb.transform.localScale = Vector3.one; return gb; }

根据父物体,删除这个物体下的所有子物体

///     /// 删除指定物体下的所有子物体    ///     ///     public static void DestroyChildGameObject(GameObject parent)    {
for(int i = 0;i

2-4、对文件的处理

写入Json文件

///     /// 写入JSON文件    ///     /// 路径    /// 文件名    /// 信息    public static void WriteJson(string path, string name, string info)    {
StreamWriter streamWriter; //声明一个流写入对象 FileInfo fileInfo = new FileInfo(path + "/" + name); //文件 写到哪里:叫什么 streamWriter = fileInfo.CreateText(); //打开文件往里写文本 streamWriter.WriteLine(info); //写入信息 fileInfo streamWriter streamWriter.Close(); streamWriter.Dispose(); //双关,写完 }

读取Json文件

///     /// 读取JSON文件    ///     /// 路径    /// 文件名    /// 
string
public static string ReadJson(string path, string name) {
StreamReader streamReader; //声明一个流读取对象 FileInfo fileInfo = new FileInfo(path + "/" + name); //文件 文件路径信息:叫什么 streamReader = fileInfo.OpenText(); //打开文件往里写文本 string info = streamReader.ReadToEnd(); //读信息 streamReader 给 info streamReader.Close(); streamReader.Dispose(); //双关,写完 return info; }

判断文件是否存在

///     /// 文件是否存在    ///     /// 文件名    public static bool IsExists(string filename)    {
bool isExists; //声明一个布尔值,默认为false FileInfo fileInfo = new FileInfo(Application.persistentDataPath + "/" + filename); //判断路径 //DirectoryInfo myDirectoryInfo=new DirectoryInfo(fileInfo.ToString()); //目录 if (fileInfo.Exists == false) //路径不存在 {
isExists = false; } else {
isExists = true; } return isExists; //返回bool值给函数 IsExist }

2-5、 其他

返回一个随机颜色

///     /// 随机颜色    ///     /// 
Color
public Color RandomColor() {
float r = UnityEngine.Random.Range(0f, 1f); float g = UnityEngine.Random.Range(0f, 1f); float b = UnityEngine.Random.Range(0f, 1f); Color color = new Color(r, g, b); return color; }

安卓平台显示信息

#if UNITY_ANDROID    ///     /// 提示信息    ///     /// Text.    /// Activity.    public static void ShowToast(string text, AndroidJavaObject activity = null)    {
Debug.Log(text); if (activity == null) {
AndroidJavaClass UnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"); activity = UnityPlayer.GetStatic
("currentActivity"); } AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast"); AndroidJavaObject context = activity.Call
("getApplicationContext"); activity.Call("runOnUiThread", new AndroidJavaRunnable(() => {
AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", text); Toast.CallStatic
("makeText", context, javaString, Toast.GetStatic
("LENGTH_SHORT")).Call("show"); } )); } public static AndroidJavaObject ToJavaString(string CSharpString) {
return new AndroidJavaObject("java.lang.String", CSharpString); }#endif

转载地址:https://itmonon.blog.csdn.net/article/details/112664728 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Unity3D日常开发】A*插件的一些BUG记录
下一篇:【Unity3D日常开发】Unity3D模板 WEBGL模板 自定义Templates 使用教程

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2024年04月20日 03时59分53秒