Сделайте так, чтобы атрибуты 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, атрибуты диапазона работают. Сначала я использовал другое имя файла, а потом оно не сработало, поэтому я думаю, что проблема связана с неправильным именем файла? Какое имя файла вы использовали?