Привет всем, я немного запутался со статикой. Знаете ли вы, можно ли сделать ползунок (или поле), который обновляет статическую переменную. Идея заключается в том, что если я применяю сценарий к нескольким GameObjects и изменяю значение ползунка на один из них, все ползунки в других сценариях устанавливаются на одно и то же значение. Я пытаюсь настроить это, чтобы упростить настройку.

Хорошего дня

-2
pierre950 26 Янв 2022 в 13:57

2 ответа

Вы можете сделать это, изменив значение напрямую, но изменения не будут сохраняться между запусками игры. Это потому, что Unity не поддерживает сериализацию статических переменных. Таким образом, вы можете использовать его только для запуска некоторых быстрых тестов, но при следующем запуске статические переменные будут иметь значения по умолчанию.

Попробуйте что-то подобное в коде инспектора:

staticVal = EditorGUILayout.Slider("some label", staticVal, minVal, maxVal);

Возможно, мог бы быть другой способ помочь с тем, чего вы хотите достичь. Попробуйте расширить свой вопрос.

0
gregee123 26 Янв 2022 в 14:51

Даже если вам это удастся (см., например, другой ответ)... значение static будет не сериализоваться -> не сохранять! Так что на самом деле это ничем вам не поможет во время редактирования.

Вместо этого вам следует рассмотреть возможность использования ScripableObject, например,

// See https://docs.unity3d.com/ScriptReference/CreateAssetMenuAttribute.html
[CreateAssetMenu]
public class FloatValue : ScriptableObject
{
    [Range(0, 1)] public float Value;
}

Вы должны создать экземпляр актива через ProjectView (Assets)щелчок правой кнопкой мышиCreateFloatValue.

Затем вы можете ссылаться на это значение везде, где это необходимо, например.

[SerializeField] private FloatValue myFloat;

И просто перетащите свой актив в этот слот.

Особый совет: вы можете сделать свой ресурс ссылкой по умолчанию для любого нового созданного экземпляра вашего компонента, напрямую выбрав соответствующий файл скрипта в Unity и в Инспекторе перетащив ресурс в соответствующий слот. Это сделает его значением по умолчанию для любого нового созданного экземпляра этого компонента в редакторе.

0
derHugo 26 Янв 2022 в 17:45