Изменение поля инспектора цветового градиента Unity - PullRequest
0 голосов
/ 28 мая 2020

Я использую поле свойства градиента цвета Unity в настраиваемом ящике инспектора, например:

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

Это инициализируется без выбора допустимого градиента. Я хотел бы предварительно загрузить первый в наборе проекта, прежде чем пользователь выберет один из сохраненного набора или создаст новый.

С другими типами PropertyField, такими как IntSlider, легко получить доступ к его .intValue член для прямой настройки. В отладчике я вижу член, не являющийся publi c .gradientValue, но я не вижу какого-либо значимого члена для типа colorGradient, который можно установить непосредственно из скрипта. Есть идеи?

1 Ответ

0 голосов
/ 16 июля 2020

Я хочу установить градиент по умолчанию для чего-то другого, кроме пустого экземпляра, который представляет собой пустой белый градиент.

Поскольку ваше поле сериализовано, оно не будет null ( иначе вы бы уже получили NullReferenceException). Это скорее просто значение по умолчанию, используемое new Gradient().

Для того, чтобы иметь градиент по умолчанию в Инспекторе, вам фактически не понадобится специальный редактор или панель свойств. Вам нужно будет только назначить ему некоторые значения по умолчанию при объявлении поля в своем классе:

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)
        }
    };
}

введите описание изображения здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...