扩展方法工具

JEngine提供了众多扩展方法,位于主工程Assets/Dependencies/JEngine/Core/Tool,热更工程HotUpdateScripts/JEngine/UI/JUIExtensions.cs内,以及热更工程HotUpdateScripts/JEngine/Core/JExtensions.cs

警告

注意,本文全部提到的字符串typeName皆指类型全名(命名空间.类名

命名空间

using JEngine.Core;
using JEngine.UI;

常用工具

  • 将对象转换为指定类型

    public static object ConvertSimpleType(this object value, Type destinationType)
    

    ClassBind就通过这个方法将输入的字符串值转为其他类型(例如int)

GameObject工具

  • 获取对象的GameObject

    public static GameObject GetGameObject(this object ins)
    

    该方法可以获取热更工程的MonoBehaviour派生类对象的gameObject、以及在主工程的Component的gameObject

    该方法主要用于CLR重定向底层和ClassBind底层

  • 获取热更对象的GameObject

    public static GameObject FindGOForHotClass(this ILTypeInstance instance)
    

    与上面的方法同理,用于获取热更继承MonoBehaviour的对象的gameObject,主要用于CLR重定向和ClassBind底层获取数据

  • 获取当前全部场景内全部特定Type的对象

    public static List<T> FindObjectsOfTypeAll<T>()
    

    这个方法能获取全部的特定Type对象(包括隐藏的),但是无法获取DontDestroyOnLoad内的

  • 获取object的指定类型的对象实例

    public static object GetInstanceFromGO(this Type fieldType, Object obj)
    

    这个方法能获取指定类型的对象实例,例如如果obj是GameObject,就会GetComponent这个fieldType并返回,如果obj是热更类型(例如热更的MonoBehaviour或其他ClassBind创建的对象),就会在obj的适配器上找到相同热更类型的热更实例,并返回

  • 获取场景内全部适配器

    public static List<CrossBindingAdaptorType> GetAllMonoAdapters()
    

    该方法能获取场景内全部Mono适配器(用ClassBind创建的一切对象也会被包括在其中)

    该方法主要用于辅助CLR重定向(例如重定向的FindObjectsOfType)

  • 获取GameObject上的热更对象

    public static object GetHotComponent(this GameObject gameObject, string typeName)
    
    public static object GetHotComponent(this GameObject gameObject, ILType type)
    
    public static object GetHotComponent(this CrossBindingAdaptorType[] adapters, ILType type)
    
    public static object GetHotComponent(this List<CrossBindingAdaptorType> adapters, ILType type)
    

    如果一个GameObject上面用ClassBind创建了对象,或用AddComponent动态挂载了热更的MonoBehaviour,可以通过这个方法获取上面的指定Type的对象

    警告

    这个函数会返回一个ILTypeInstance数组,需要把object转ILTypeInstance[]后判断长度然后取第一个元素(如果能肯定这个数组只有一个元素也可以直接将其装箱为ILTypeInstance)

    在主工程调用这个方法是转ILTypeInstance[],而在热更工程内调用这个方法可以直接转热更类型数组

  • 获取GameObject及其子物体的热更对象

     public static object GetHotComponentInChildren(this GameObject gameObject, string typeName)
    

    原理同上,只是还能获取子物体的对象

  • 删除GameObject上的指定对象

    public static void DestroyHotComponent(this GameObject gameObject, object hotObject)
    

    如果gameObject上通过ClassBind或AddComponent动态挂载了热更对象,可以通过这个方法彻底删除hotObject(如果是ClassBind创建的对象,这样删更彻底)

热更类型工具

建议这些工具在主工程使用,热更工程内没必要用大部分接口

  • ILRuntime的Appdomain

    public static AppDomain Domain
    

    会根据运行模式返回一个AppDomain,编辑器下返回无缓存的AppDomain,即每次请求都会销毁前一次使用(如果存在的话)的引用,运行模式下会使用InitJEngine内创建的AppDomain

  • 通过字符串获取热更Type

     public static Type GetHotType(string typename)
    
  • 通过字符串获取ILType

    public static IType GetHotILType(string typename)
    
  • 通过字符串生成热更对象

    public static ILTypeInstance GetHotInstance(string typename)
    
  • 判断热更类型是否存在

    public static bool HasHotType(string typename)
    
  • 判断是否继承了JBehaviour

    public static bool IsJBehaviourType(Type type)
    
    public static bool IsJBehaviourType(string typename)
    
  • 调用热更方法

    public static void InvokeHotMethod(string type, string method)
    
    public static void InvokeHotMethod(string type, string method, object instance, params object[] param)
    

    Tools.InvokeHotMethod调用

  • 获取热更方法参数

    public static ParameterInfo[] GetHotMethodParams(Type type, string methodName)
    

    Tools.GetHotMethodParams调用

  • 判断是否可分配到指定类型

    public static bool CanAssignTo(this object instance, Type type)
    

字符串工具

这些工具都不是扩展方法,需要用Tools.xxx访问

  • 下载的字节大小转字符串

    public static string GetDisplaySpeed(float downloadSpeed)
    
    public static string GetDisplaySize(long downloadSize)
    

    假设下载了1024bytes,会返回1KB,其他大小同理

  • 确保某个字符串以指定字符串结尾

    public static void EnsureEndWith(ref string source, string endWith)
    

    如果source不是以endWith内容结尾,则source末尾会加上endWith

热更工程工具

  • 获取通过ClassBind创建的任何对象

    public static T GetHotClass<T>(this GameObject gameObject) where T : class
    
    public static T[] GetHotClasses<T>(this GameObject gameObject) where T : class
    
    public static T GetHotClassInChildren<T>(this GameObject gameObject) where T : class
    
    public static T[] GetHotClassesInChildren<T>(this GameObject gameObject) where T : class
    

    这些方法能获取gameObject自身或自身和以及子物体上全部的T类型的热更对象,这些热更对象必须是ClassBind创建的,或者是动态创建的MonoBehaviour和用ClassBind创建的JBehaviour(非ClassBind创建的JBehaviour在真机下无法用这个获取,建议用GetJBehaviour接口获取GameObject上的JBehaviour)

  • 在GameObject上创建JBehaviour

    public static T CreateJBehaviour<T>(this GameObject gameObject, bool activeAfter = true) where T : JBehaviour
    
  • 在GameObject上获取JBehaviour

    public static T GetJBehaviour<T>(this GameObject gameObject) where T : JBehaviour
    
  • 获取GameObject上全部的JBehaviour

    public static T[] GetJBehaviours<T>(this GameObject gameObject) where T : JBehaviour
    
  • 销毁JBehaviour

    public static void Remove(this JBehaviour jBehaviour)
    
  • 在GameObject上创建JUI

    public static JUI CreateJUI(this GameObject gameObject)
    
  • 在GameObject上获取JUI

    public static JUI GetJUI(this GameObject gameObject)
    
  • 获取GameObject上全部JUI

    public static JUI[] GetJUIs(this GameObject gameObject)
    
  • 销毁JUI

    public static void Remove(this JUI jUI)
    

UI扩展工具

  • 颜色hex编码转颜色类

    public static Color ToColor(this string hex)
    
  • 获取transform的Text组件

    public static Text txt(this Transform x)
    
  • 获取transfrom指定路径的Text组件

    public static Text txt(this Transform x, string name)
    
  • 获取transform的Button组件

    public static Button btn(this Transform x)
    
  • 获取transfrom指定路径的Button组件

    public static Button btn(this Transform x, string name)
    
  • 获取transform的Outline组件

    public static Outline outline(this Transform x)
    
  • 获取transfrom指定路径的Outline组件

    public static Outline outline(this Transform x, string name)
    
  • 获取transform的Shadow组件

    public static Shadow shadow(this Transform x)
    
  • 获取transfrom指定路径的Shadow组件

    public static Shadow shadow(this Transform x, string name)
    
  • 获取transform的Image组件

    public static Image img(this Transform x)
    
  • 获取transfrom指定路径的Image组件

    public static Image img(this Transform x, string name)
    
  • 获取transform的RectTransform组件

    public static RectTransform rect(this Transform x)
    
  • 获取transfrom指定路径的RectTransform组件

    public static RectTransform rect(this Transform x, string name)
    
  • 获取transform的RawImage组件

    public static RawImage rawImg(this Transform x)
    
  • 获取transfrom指定路径的RawImage组件

    public static RawImage rawImg(this Transform x, string name)
    
  • 获取transform的Slider组件

    public static Slider slider(this Transform x)
    
  • 获取transfrom指定路径的Slider组件

    public static Slider slider(this Transform x, string name)
    
  • 获取transform的Toggle组件

    public static Toggle toggle(this Transform x)
    
  • 获取transfrom指定路径的Toggle组件

    public static Toggle toggle(this Transform x, string name)
    
  • 获取transform的Scrollbar组件

    public static Scrollbar scrollbar(this Transform x)
    
  • 获取transfrom指定路径的Scrollbar组件

    public static Scrollbar scrollbar(this Transform x, string name)
    
  • 获取transform的Dropdown组件

    public static Dropdown dropdown(this Transform x)
    
  • 获取transfrom指定路径的Dropdown组件

    public static Dropdown dropdown(this Transform x, string name)
    
  • 获取transform的InputField组件

    public static InputField input(this Transform x)
    
  • 获取transfrom指定路径的InputField组件

    public static InputField input(this Transform x, string name)
    
  • 获取transform的Canvas组件

    public static Canvas canvas(this Transform x)
    
  • 获取transfrom指定路径的Canvas组件

    public static Canvas canvas(this Transform x, string name)