Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: Unity数据加密☀️反射的用法:变量、属性、方法、重载,反射在DLL中的使用方法

🟥 关于asmdef、DLL的特殊注意事项

若你要反射的脚本所在的文件夹或上层节点中含有asmdef,此时调用反射代码会报如下错误:

ArgumentException: Type cannot be null.


你添加了Assembly Definition Reference,此时运行正常了。但如果你将C#文件打包成DLL,又会报上面的错误。

DLL不支持直接直接使用 Type.GetType。


因此不要尝试网上的教程了,直接按照本文的最终方案来吧。


🟧GetType多平台方法

private Type GetType(string typeName)
    {
        var type = Type.GetType(typeName);
        if (type != null) return type;
        foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
        {
            type = a.GetType(typeName);
            if (type != null)
                return type;
        }
        return null;
    }


🟧反射属性

private void SetProperty(string className, string propertyName, object value)
    {
    //SKODE.Test:反射的类,如果有命名空间就需要加上。
        Type tarClass = GetType("SKODE.Test");
        Component tarComponent = gameObject.GetComponent(tarClass);
        PropertyInfo tarProperty =
            tarClass.GetProperty("hi", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
        //将 tarComponent 组件的 tarProperty属性 设置为 true
        tarProperty.SetValue(tarComponent, true);
    }


🟨反射变量

private void SetField()
    {
        //SKODE.Test:反射的类,如果有命名空间就需要加上。
        Type tarClass = GetType("SKODE.Test");
        Component tarComponent = gameObject.GetComponent(tarClass);
        FieldInfo tarField =
            tarClass.GetField("hii", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
        //将 tarComponent 组件的 tarField变量 设置为 true
        tarField.SetValue(tarComponent, true);
    }


🟩反射方法

private void CallMethod()
    {
        //SKODE.Test:反射的类,如果有命名空间就需要加上。
        Type tarClass = GetType("SKODE.Test");
        Component tarComponent = gameObject.GetComponent(tarClass);
        MethodInfo tarMethod =
            tarClass.GetMethod("Call", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
        //调用 tarComponent 组件的 tarMethod方法,并传入参数 parameters。
        //若不需要传入参数,则传入null即可。
        object[] parameters = { true };
        tarMethod.Invoke(tarComponent, parameters);
    }


🟦 反射重载方法

在反射重载方法时,如果调用此重载方法,会产生"发现不明确的匹配"的错误。

AmbiguousMatchException: Ambiguous match found.


解决方案如下:

GetMethod("MethodName", new Type [] { typeof(参数类型)});

其中type数组中的项的个数是由要调用的方法的参数个数来决定的。

如果无参数,则new Type[]{},使Type数组中的项个数为0。


1️⃣ 被调用的方法


2️⃣ 反射方法

private void CallVirtualMethod()
    {
        //Doozy.Runtime.UIManager.Containers.UIContainer:反射的类,如果有命名空间就需要加上。
        Type tarClass = GetType("Doozy.Runtime.UIManager.Containers.UIContainer");
        Component tarComponent = GetComponent(tarClass);
        MethodInfo tarMethod = tarClass.GetMethod("Hide", new Type[] { });
        tarMethod.Invoke(tarComponent, null);
    }


相关文章
|
5月前
|
安全 API 开发工具
oss加密的配置方法
阿里云OSS提供多种加密选项:SSE-OSS(默认或对象级AES-256加密)、SSE-KMS(使用KMS托管CMK)、临时密钥加密和客户端加密(CSE)。可通过控制台或API设置Bucket策略,使用HTTP头部指定加密方式。KMS和临时密钥可能涉及更复杂的密钥管理和权限配置。
569 5
|
10月前
|
存储 数据挖掘 数据安全/隐私保护
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(上)
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题
115 1
|
10月前
|
存储 算法 Java
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(下)
11.Java方法的综合练习题大全-双色球彩票系统,数字的加密和解密等试题(上)
111 1
|
12月前
|
数据安全/隐私保护 Python
Python hashlib 加密方法(MD5、SHA1、SHA256、SHA52)
Python hashlib 加密方法(MD5、SHA1、SHA256、SHA52)
282 0
|
2月前
|
语音技术 开发工具 图形学
Unity与IOS⭐一、百度语音IOS版Demo调试方法
Unity与IOS⭐一、百度语音IOS版Demo调试方法
|
2月前
|
前端开发 图形学
Unity精华☀️UI和物体可见性的判断方法
Unity精华☀️UI和物体可见性的判断方法
|
2月前
|
图形学 C# 开发者
全面掌握Unity游戏开发核心技术:C#脚本编程从入门到精通——详解生命周期方法、事件处理与面向对象设计,助你打造高效稳定的互动娱乐体验
【8月更文挑战第31天】Unity 是一款强大的游戏开发平台,支持多种编程语言,其中 C# 最为常用。本文介绍 C# 在 Unity 中的应用,涵盖脚本生命周期、常用函数、事件处理及面向对象编程等核心概念。通过具体示例,展示如何编写有效的 C# 脚本,包括 Start、Update 和 LateUpdate 等生命周期方法,以及碰撞检测和类继承等高级技巧,帮助开发者掌握 Unity 脚本编程基础,提升游戏开发效率。
44 0
|
2月前
|
存储 Java 图形学
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
UNITY性能优化☀️一、GC介绍与Unity内存管理方法
|
4月前
|
图形学 开发者
【Unity小技巧】unity移动物体的探究——使用8个不同方法
【Unity小技巧】unity移动物体的探究——使用8个不同方法
77 1
|
4月前
|
JavaScript 前端开发 安全
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作
安全开发-JS应用&原生开发&JQuery库&Ajax技术&加密编码库&断点调试&逆向分析&元素属性操作