Сделайте так, чтобы атрибуты Unity, такие как [range], работали вместе с наследованием в ScriptableObjects - PullRequest
0 голосов
/ 23 декабря 2018

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

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 ]

0 голосов
/ 23 декабря 2018

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

0 голосов
/ 23 декабря 2018

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

enter image description here

...