• 使用反射功能在Unity运行状态通过Inspector面板修改字段和调用方法


    使用反射功能在Unity运行状态通过Inspector面板修改字段和调用方法

    效果展示

    一个很简单的组件脚本

    运行状态在Inspector面板可以随便修改字段和调用方法

    方法调用日志

    设计由来

    • 最近在学习反射
    • 结合游戏开发过程遇到比较难受的事情

    应用场景

    • 游戏特别庞大、电脑特别垃圾、重新运行一次Unity需要等待几十秒的情况下

    • 你需要修改一个组件字段或者调用一个方法展示一个动画等等

    • 这个时候你肯定渴望可以直接修改字段或者直接调用某个方法

    • 反射就可以实现

    • 修改实例对象所有的字段包括私有字段

    • 调用实例对象所有的方法包括私有方法

    • 总结一下:就是可以瞎几把修改组件字段和调用组件方法

    反射可以做哪些事

    • 获取类的所有字段属性方法包括私有的

    • 修改类的所有字段包括私有的

    • 修改类的所有属性包括私有的

    • 调用类的所有方法包括私有的

    • 实例化一个类(这个工具用不到)

    制作流程

    • 新建一个继承MonoBehaviour的类 ReflectionMonoBehaviour

    • 在类的Start方法获取挂在游戏对象上的其他组件实例

    • 新建一个的Editor类 ReflectionMonoBehaviourEditor

    • 自定义编辑脚本Inspector面板

    • 通过上面获取的组件实例

    • 反射出所有的字段、属性、方法

    • 然后在Inspector面板显示出来

    • 通过在Inspector面板修改、点击按钮

    • 使用反射修改、调用组件实例

    使用到的反射方法

    
    using System.Reflection;
    
    //获取实例组件的Type
    Type type = 实例对象.GetType();
    
    //获取实例组件的所有字段(BindingFlags限制枚举)
    FieldInfo[] allFieldInfo = type.GetFields(BindingFlags.NonPublic | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static);
    
    //获取实例组件的所有方法(BindingFlags限制枚举)
    MethodInfo[] allMemberInfo = type.GetMethods(BindingFlags.NonPublic | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public | BindingFlags.DeclaredOnly | BindingFlags.Static);
    
    //获取字段的类型(int string float 等等)
    FieldInfo.FieldType
    
    //获取方法的所有参数
    MethodInfo.GetParameters()
    
    //获取参数的类型
    ParameterInfo.ParameterType
    
    //修改实例组件的字段
    Field.fsieldInfo.SetValue(实例对象, 值)
    
    //方法实例组件的方法
    Method.methodInfo.Invoke(实例对象, 所有参数);
    
    

    工具待完善

    目前只支持一些类型的字段修改和调用方法
    如果有需要可以自己修改 很简单的

    源码例子地址

    源码:https://github.com/QiangZou/ZouQiang/tree/master/Assets/ZouQiang/Tool/ReflectionMonoBehaviour
    例子:https://github.com/QiangZou/ZouQiang/tree/master/Assets/ZouQiangExample/ReflectionMonoBehaviour

  • 相关阅读:
    关于各种好玩的神奇函数
    模板——AC自动机
    模板——造数据
    VIM常用操作
    springboot注解
    面试题
    Linux常用命令
    Zookeeper
    对cpu与load的理解及线上问题处理思路
    top
  • 原文地址:https://www.cnblogs.com/zouqiang/p/9963710.html
Copyright © 2020-2023  润新知