Unity 编辑器中修改属性值及时查看效果

需求

项目中有个需求是开发一个UI适配的脚本,根据游戏运行的平台显示不同类型的UI。根据需求,游戏在运行时自动适配就可以了。但是为了方便在编辑器中查看效果,需要可以在Inspector面板中修改属性值后直接在编辑器上执行相应的适配代码,显示效果。

解决方案

为了在Inspector面板中修改值,我们使用一个enum属性即可,这样对应在面板上就是一个下拉列表。注意这个属性在游戏运行时是根据所在的平台动态设置的,其实并不需要public出来,也不需要序列化。但是为了能在Inspector面板中临时修改并查看效果,我将其作为一个public属性开放出来,当然也可以private后加[SerializeField]属性,效果一样。大概代码如下:

    public enum Platform
    {
        Console,
        PC,
        Mobile
    };

    [DisallowMultipleComponent]
    public class UIAdapter : MonoBehaviour
    {        
        [Header("修改以下值只作用于编辑器中")]        
        public Platform CurrentPlatform = default;     
    }

这样在Inspector面板中就可以通过下拉列表修改CurrentPlatform这个属性了。那么问题来了,如何在编辑模式中响应这个属性的变化呢?经过多方查找,我发现最简单的方法是使用MonoBehaviour.OnValidate()方法。这个方法的描述是:

This function is called when the script is loaded or a value is changed in the Inspector (Called in the editor only).
You can use this to ensure that when you modify data in an editor, that data stays within a certain range.

在UIAdapter中添加这个方法即可:

#if UNITY_EDITOR
        private void OnValidate()
        {
            // Use CurrentPlatform here to update UI
        }
#endif

需要注意的是,这个方法在脚本被载入时也会执行。

如果有更复杂的需求

在找到这个简单的方法之前,我也尝试了另外一个方法:Editor.OnInspectorGUI
使用这个方法其实是可以实现自定义的Inspector编辑UI,但同样因为这个方法是在Inspector UI需要重绘时调用,也可以用来刷新编辑器后的属性值,但调用频率会高很多,因此如果仅是上面的简单需求就没必要了。当然如果有更复杂的需求,需要自定义Inspector UI,那就需要使用这个方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

n5

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值