Сделайте так, чтобы атрибуты Unity, такие как [range], работали вместе с наследованием в ScriptableObjects

Давайте использовать следующий код:

public abstract class ItemTemplate : ScriptableObject
{
    public Sprite Sprite;
    public DataKeeperScript.ItemCategories ItemCategory;
    public string Name;
    [Range(0, 100)]
    public int Rarity;
}

[CreateAssetMenu(fileName = "New FoodTemplate", menuName = "ItemTemplates/Food")]
public class FoodTemplate : ItemTemplate
{
    [Range(0, 100)]
    public int HungerFillAmount;
}

Когда я создаю в редакторе актив scriptableObject "Weapon", я также могу заполнить свойства из родительского класса "Item", и это здорово.

Но почему атрибут [range] из родительского класса "Item" не работает, когда я создаю объект сценариев для объекта "Оружие" в редакторе? Диапазон для HungerFillAmount самого класса "Оружие" также не работает. Не могу понять это. Можно ли где-нибудь поместить магический атрибут, чтобы атрибуты работали и для унаследованных детей? Спасибо, что подумали со мной!:)

2 ответа

Решение

Это фиксированная! Сначала у меня были все дочерние классы в одном большом файле FileTemplate.cs, но это также создавало проблему, из-за которой редактор иногда говорил, что связанный скрипт не может быть найден. Теперь я создал отдельные файлы, поэтому у меня есть ItemTemplate.cs для абстрактных файлов и для childs FoodTemplate.cs, WeaponTemplate.cs и так далее. Я сделал это ранее, чтобы исправить ошибку сценария не найдена, но только теперь я вижу, что это также исправило эту проблему.

Если я положу ваш код в файл с именем FoodTemplate.cs и создайте экземпляр Food, атрибуты диапазона работают. Сначала я использовал другое имя файла, а потом оно не сработало, поэтому я думаю, что проблема связана с неправильным именем файла? Какое имя файла вы использовали?

Другие вопросы по тегам