【问题标题】:Changing the Unity Color Gradient Inspector Field更改 Unity 颜色渐变检查器字段
【发布时间】:2020-07-16 20:38:40
【问题描述】:

我在自定义检查器抽屉中使用 Unity 的颜色渐变属性字段,如下所示:

SerializedProperty colorGradient = property.FindPropertyRelative("colorGradient");
EditorGUI.PropertyField(pos, colorGradient);

这会在没有选择有效渐变的情况下进行初始化。我想在用户从存储的集合中选择一个或创建一个新的之前预加载项目集中的第一个。

对于其他PropertyField 类型,如IntSlider,访问其.intValue 成员以直接设置它很简单。在调试器中,我可以看到一个非公共的 .gradientValue 成员,但我没有看到任何可以直接从脚本设置的 colorGradient 类型的相关值成员。有什么想法吗?

【问题讨论】:

  • 你能展示完整的脚本吗?究竟是什么问题?我刚刚使用 CustomEditor 对其进行了测试,它的工作方式符合我的预期......你的意思是你想为你的字段分配一个默认值吗?
  • 就是这样。它会在自定义检查器抽屉中显示渐变属性。是的,它工作正常,但我想将默认渐变设置为空实例以外的其他东西,即空白的白色渐变。

标签: c# unity3d unity-editor


【解决方案1】:

我想将默认渐变设置为空实例以外的其他东西,即空白的白色渐变。

由于您的字段已序列化,因此它不会是 null(否则您已经获得了 NullReferenceException)。它只是new Gradient() 使用的默认值。

为了在 Inspector 中使用默认渐变,您实际上不需要特殊的编辑器或属性抽屉。当您在类中声明该字段时,您只需要为其分配一些默认值:

using UnityEngine;

public class ExampleScript : MonoBehaviour
{
    [SerializeField]
    private Gradient exampleGradient = new Gradient
    {
        alphaKeys = new[]
        {
            new GradientAlphaKey(0, 0f),
            new GradientAlphaKey(1, 1f)
        },

        colorKeys = new[]
        {
            new GradientColorKey(Color.red, 0f),
            new GradientColorKey(Color.cyan, 0.5f),
            new GradientColorKey(Color.green, 1f)
        }
    };
}

【讨论】:

    猜你喜欢
    • 2012-07-10
    • 1970-01-01
    • 2023-04-06
    • 1970-01-01
    • 1970-01-01
    • 2020-10-13
    • 2010-12-17
    相关资源
    最近更新 更多