zoukankan      html  css  js  c++  java
  • Unity3D插件-自制小插件、简化代码便于使用(新手至高手进阶必经之路)

    Unity3D插件-简化代码、封装功能


    本文提供全流程,中文翻译。

    Chinar坚持将简单的生活方式,带给世人!

    (拥有更好的阅读体验 —— 高分辨率用户请根据需求调整网页缩放比例)




    1

    FindT() —— 找任意脚本 / 组件


    FindT —— <泛型>(名字)返回:泛型

    用法:

    using UnityEngine; —— 引用命名空间

    Chinar.FindT< GameObject >(物体名) 就能直接找到物体,返回一个 GameObject 类型

    Chinar.FindT< Button >(物体名) 就能直接找到物体,返回一个 Button 类型

    传入类型是什么,就返回什么类型
    举个栗子黑白88

    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 类型
    举个栗子黑白88

    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 类型

    举个栗子黑白88

    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() —— 返回:颜色

    举个栗子黑白88

    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. —— 可在任何脚本中调用其类中写好的函数

    举个栗子黑白88

    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;
        }
    }

    逐步完善中….





    Chinar


    END

    本博客为非营利性个人原创,除部分有明确署名的作品外,所刊登的所有作品的著作权均为本人所拥有,本人保留所有法定权利。违者必究

    对于需要复制、转载、链接和传播博客文章或内容的,请及时和本博主进行联系,留言,Email: ichinar@icloud.com

    对于经本博主明确授权和许可使用文章及内容的,使用时请注明文章或内容出处并注明网址

  • 相关阅读:
    Maven入门:使用Nexus搭建Maven私服及上传下载jar包
    idea 破解转(肉测好用,测试2018.4.16)
    使用spring-boot-admin对spring-boot服务进行监控(转自牛逼的人物)
    eureka集群高可用配置,亲测成功配置(转)
    Apollo-open-capacity-platform 微服务能力开发平台 (转)
    导入数据到数据库表,报错[Err] [Row1] [Imp] 1153
    .mmap文件如何打开
    web端自动化——webdriver驱动
    web端自动化——Remote应用
    svn服务器端—管理员分配权限
  • 原文地址:https://www.cnblogs.com/chinarbolg/p/9601455.html
Copyright © 2011-2022 走看看