Unity3D插件-自制小插件、简化代码便于使用(新手至高手进阶必经之路)
Unity3D插件-简化代码、封装功能
本文提供全流程,中文翻译。 Chinar坚持将简单的生活方式,带给世人! (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例) |
1
FindT() —— 找任意脚本 / 组件
FindT —— <泛型>(名字)返回:泛型
用法:
using UnityEngine; —— 引用命名空间
Chinar.FindT< GameObject >(物体名) 就能直接找到物体,返回一个 GameObject 类型
Chinar.FindT< Button >(物体名) 就能直接找到物体,返回一个 Button 类型
传入类型是什么,就返回什么类型
using UnityEngine;//引用命名空间
/// <summary>
/// 自定义类(囊括所有自定义静态方法)—— 可用于简化代码 //无需继承MonoBehaviour
/// </summary>
public class Chinar
{
/// <summary>
/// 获取物体名下的 T 组件
/// </summary>
/// <param name="namestring">物体名</param>
/// <returns></returns>
public static T FindT<T>(string namestring)
{
return GameObject.Find(namestring).GetComponent<T>();
}
}
2
Write/ReadJson —— 读写Json
using System.IO; —— 引用命名空间
Chinar.WriteJson(路径, 给文件起个名字, 写入的内容)
即可在目标路径直接写一个Json文件
Chinar.ReadJson(路径, 读取的文件名)
即可在目标路径直接读取一个Json文件,并返回一个 String 类型
using System.IO;//引用命名空间
/// <summary>
/// 自定义类(囊括所有自定义静态方法)—— 可用于简化代码 //无需继承MonoBehaviour
/// </summary>
public class Chinar
{
/// <summary>
/// 写入JSON文件
/// </summary>
/// <param name="path">路径</param>
/// <param name="name">文件名</param>
/// <param name="info">信息</param>
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(); //双关,写完
}
/// <summary>
/// 读取JSON文件
/// </summary>
/// <param name="path">路径</param>
/// <param name="name">文件名</param>
/// <returns>string </returns>
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;
}
}
3
IsExist —— 判断文件是否存在
using System.IO; —— 引用命名空间
Chinar.IsExist( 文件名 )
即可判断在目标路径上这个名字的文件,是否存在。并返回一个 bool 类型
using System.IO;//引用命名空间
/// <summary>
/// 自定义类(囊括所有自定义静态方法)—— 可用于简化代码 //无需继承MonoBehaviour
/// </summary>
public class Chinar
{
/// <summary>
/// 文件是否存在
/// </summary>
/// <param name="filename">文件名</param>
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
}
}
4
RandomColor() —— 随机颜色
RandomColor() —— 返回:颜色
using UnityEngine;//引用命名空间
/// <summary>
/// 自定义类(囊括所有自定义静态方法)—— 可用于简化代码 //无需继承MonoBehaviour
/// </summary>
public class Chinar
{
/// <summary>
/// 随机颜色
/// </summary>
/// <returns> Color </returns>
public Color RandomColor()
{
float r = Random.Range(0f, 1f);
float g = Random.Range(0f, 1f);
float b = Random.Range(0f, 1f);
Color color = new Color(r, g, b);
return color;
}
}
4
Generalities —— 总类
Chinar. —— 可在任何脚本中调用其类中写好的函数
using System; //记得引用命名空间
using System.IO; //记得引用命名空间
using System.Text.RegularExpressions; //记得引用命名空间
using DG.Tweening; //记得引用命名空间
using UnityEngine; //记得引用命名空间
using UnityEngine.UI; //记得引用命名空间
/// <summary>
/// 自定义类(囊括所有自定义静态方法)—— 可用于简化代码 //无需继承MonoBehaviour
/// </summary>
public class Chinar
{
/// <summary>
/// 获取物体名下的 T 组件
/// </summary>
/// <param name="namestring">物体名</param>
/// <returns></returns>
public static T FindT<T>(string namestring)
{
return GameObject.Find(namestring).GetComponent<T>();
}
/// <summary>
/// 写入JSON文件
/// </summary>
/// <param name="path">路径</param>
/// <param name="name">文件名</param>
/// <param name="info">信息</param>
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(); //双关,写完
}
/// <summary>
/// 读取JSON文件
/// </summary>
/// <param name="path">路径</param>
/// <param name="name">文件名</param>
/// <returns></returns>
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;
}
#if UNITY_ANDROID
/// <summary>
/// 提示信息
/// </summary>
/// <param name="text">Text.</param>
/// <param name="activity">Activity.</param>
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<AndroidJavaObject>("currentActivity");
}
AndroidJavaClass Toast = new AndroidJavaClass("android.widget.Toast");
AndroidJavaObject context = activity.Call<AndroidJavaObject>("getApplicationContext");
activity.Call("runOnUiThread", new AndroidJavaRunnable(() =>
{
AndroidJavaObject javaString = new AndroidJavaObject("java.lang.String", text);
Toast.CallStatic<AndroidJavaObject>("makeText", context, javaString,
Toast.GetStatic<int>("LENGTH_SHORT")).Call("show");
}
));
}
public static AndroidJavaObject ToJavaString(string CSharpString)
{
return new AndroidJavaObject("java.lang.String", CSharpString);
}
#endif
/// <summary>
/// 正则表达式:Unicode转换中文
/// </summary>
/// <param name="unicode"></param>
/// <returns></returns>
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(); });
}
/// <summary>
/// 获取Button组件
/// </summary>
/// <param name="namestring"></param>
/// <returns></returns>
public static Button FindButton(string namestring)
{
return GameObject.Find(namestring).GetComponent<Button>();
}
/// <summary>
/// 获取DoTween插件中的DoTweenAnimation组件
/// </summary>
/// <param name="namestring"></param>
/// <returns></returns>
public static DOTweenAnimation FindDoTweenAnimation(string namestring)
{
return GameObject.Find(namestring).GetComponent<DOTweenAnimation>();
}
/// <summary>
/// 文件是否存在
/// </summary>
/// <param name="filename">文件名</param>
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
}
/// <summary>
/// 随机颜色
/// </summary>
/// <returns> Color </returns>
public Color RandomColor()
{
float r = Random.Range(0f, 1f);
float g = Random.Range(0f, 1f);
float b = Random.Range(0f, 1f);
Color color = new Color(r, g, b);
return color;
}
}
逐步完善中….
" role="presentation" style="position: relative;">
Chinar
END
本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究
对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com
对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址
Unity3D插件-自制小插件、简化代码便于使用(新手至高手进阶必经之路)的更多相关文章
- 【Unity3D自学记录】Unity3D之自制小钟表
今天来写一个小钟表,事实上非常easy,就运用到了欧拉角. 首先创建时钟.分钟.秒钟以及4个点(12点.3点.6点.9点)偷懒了~~没弄那么多点. 时钟.分钟.秒钟这三个父级的中心一定要注意,我们旋转 ...
- 关于lombok插件的使用,强大的简化代码工具
关于下载和安装lombok插件,过程特别简单,可以参考: https://blog.csdn.net/longloveqing/article/details/81539749 安装好后,下面介绍下l ...
- 基于menu小插件探索工程实践
目录 一.准备工作 1.C/C++环境搭建 2.VSCode的配置 (1) 安装插件: (2) 设置配置文件: 二.工程化编程实战 1.模块化设计 2.可重用设计:进一步抽象 menu的进一步优化 可 ...
- 开源Unity小插件CheatConsole
我们在开发游戏的过程中,通常都需要一些快捷的方式来进行一些非常规的测试,这些功能一般被称作控制台或者GM指令,比如虚幻竞技场中,可以使用~键呼出控制台,输入一些指令即可进行快捷设置,比如设置分辨率,全 ...
- aBowman >>可以运用到自己博客上的小插件
大家进入我的博客会发现页面右边有一只小狗这部分.这个就是我用在上面的 一个小插件.插件网址是:http://abowman.com/google-modules/,这上面有很多的小插件,可以直接运用到 ...
- 自己改写了一个图片局部放大的jquery插件页面里面的html代码少了,同一个页面可以调用多个
自己改写了一个图片局部放大的jquery插件页面里面的html代码少了,同一个页面可以调用多个,兼容ie8以上浏览器,别忘了引用jquery,我用的jquery/1.11.0/其他版本没有测试,另外需 ...
- WebSocket小插件
一.WebSocket小介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信 ...
- 【Bootstrap】优秀小插件收集
Bootstrap中不乏很多优秀的小插件来让界面更加漂亮.比如之前做过笔记的bootstrap-fileinput,select2,datetimepicker等都是属于这一系列的.这些相对而言比较大 ...
- 基于HTML5 audio元素播放声音jQuery小插件
by zhangxinxu from http://www.zhangxinxu.com本文地址:http://www.zhangxinxu.com/wordpress/?p=1609 一.前面的些唠 ...
随机推荐
- Android中getLocationOnScreen和getLocationInWindow 获取屏幕大小
需要确定组件在父窗体中的坐标时,使用getLocationInWindow,需要获得组件在整个屏幕的坐标时,使用getLocationOnScreen. 其中location [0]代表x坐标,loc ...
- 【Mac】小技巧:实现ssh服务器别名免密登录
前言 我们平常使用ssh user@host然后输入密码的方式来远程链接一个服务器,但是,如果要管理的服务器太多,记住这些服务器的IP和用户名.密码就是一个复杂的工作.当然,我们可以把这些信息用文档记 ...
- jdk1.8
Jdk1.8新特性 毫无疑问,Java 8是Java自Java 5(发布于2004年)之后的最重要的版本.这个版本包含语言.编译器.库.工具和JVM等方面的十多个新特性.在本文中我们将学习这些新特性, ...
- scala 与 java 之间的关系
scala来源于java,但又高于java. scala的设计者Martin Odersky就是一个JAVA控,这位牛人设计了javac和编写了jdk中的通用代码.可以说java语言本身就是Marti ...
- 错误代码0x00000001,好多软件连不了网,求助~(WIN7/win8/win9/win10)
解决办法: 以管理员身份运行命令行,在弹出的窗口中运行如下命令: netsh winsock reset catalog netsh int ip reset reset.log hit 让被阻止了的 ...
- ACM-ICPC Beijing Online A The Book List
比赛的时候一眼就看出是字典树+DFS了,然而这题题意比较难理解,还有不少WA点.所以很快敲完之后和队友反复斟酌题意,修改代码.结果还是交了3发WA.最后猜测目录和书在同一个母目录域下同名是不同的,增加 ...
- android--------ListView和ExpandableListView的侧滑删除操作
本案例主要实现了ListView和ExpandableListView的侧滑删除操作功能 效果图: ListView的Adapter类 private class SlideAdapter exten ...
- Up and Down the Tree CodeForces - 1065F (树形dp)
链接 题目大意:给定$n$结点树, 假设当前在结点$v$, 有两种操作 $(1)$移动到$v$的子树内任意一个叶子上 $(2)$若$v$为叶子, 可以移动到距离$v$不超过$k$的祖先上 初始在结点$ ...
- H.Playing games
fwt #include<bits/stdc++.h> using namespace std; const int N=1<<19; const int mod=100000 ...
- python-day3笔记
1.通信是软件(计算机)与软件(计算机)之间的通信 2.网络指的是: 一:计算机与计算机之间通过物理连接介质(网络设备)连接到一起:光纤--物理连接介质,和网线一样. 二:计算机与计算机之间基于网络协 ...