Unity Editor 不用反射访问编辑器内部方法

22 篇文章 0 订阅
9 篇文章 0 订阅

Q:

该问题来自Game Framework 官方群(216332935), Liuyi的提问.

Timeline 里引用了 UnityEditor.TimeArea 是个 internal 的类型

Timeline 所在的代码就能正常访问, 但是自己扩展的编辑器类就无法访问

本文参考了:

https://blog.csdn.net/akof1314/article/details/111773851

在使用 Unity Editor 制作编辑器工具的时候

经常无法对 Editor 内的 internal 类和方法进行访问

需要使用反射方式

反射方式写起来比较麻烦, 如果 Unity 升级了版本, 内部接口变化, 会导致反射失效

A:

参考官方代码

https://github.com/Unity-Technologies/UnityCsReference/blob/master/Editor/Mono/AssemblyInfo/AssemblyInfo.cs

我们可以发现其中有大量

[assembly: InternalsVisibleTo(“Unity.InternalAPIEditorBridge.00x”)]

这部分就是官方提供出来以供我们扩展我们自己的编辑器类

实践

在 Editor 下新建一个文件夹

文件夹内包含如下文件:

TestTimeArea.cs文件

using UnityEditor;

public class TestTimeArea : EditorWindow
{
    private TimeArea m_timeArea = null;

    private void OnEnable()
    {
        if (this.m_timeArea == null)
        {
            this.m_timeArea = new TimeArea(true)
            {
                hRangeLocked = false,
                vRangeLocked = true,
                hSlider = true,
                vSlider = false,
                margin = 10f,
                scaleWithWindow = true,
                ignoreScrollWheelUntilClicked = true
            };
        }
    }
}

TestTimeArea.asmdef文件

{
    "name": "Unity.InternalAPIEditorBridge.001",
    "references": [],
    "optionalUnityReferences": [],
    "includePlatforms": ["Editor"],
    "excludePlatforms": [],
    "allowUnsafeCode": false,
    "overrideReferences": false,
    "precompiledReferences": [],
    "autoReferenced": true,
    "defineConstraints": []
}

现在就可以看到TestTimeArea.cs文件能正常编译, 同时也可以正常使用的UnityEditor.TimeArea

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值