使 [range] 等 Unity 属性与 ScriptableObjects 中的继承一起工作
Make Unity attributes like [range] work together with inheritance in 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;
}
当我在编辑器中创建 "Weapon" scriptableObject 资产时,我还可以从 parent "Item" class 中填写属性,这很棒。
但是,当我为 "Weapon" 创建可编写脚本的 object 资产时,为什么 parent "Item" class 的 [range] 属性不起作用在编辑器中? "Weapon" class 的 HungerFillAmount 范围本身也不起作用。想不通。我可以在某处放置一些魔法属性以使这些属性也适用于继承的 children 吗?谢谢你和我一起思考! :)
如果我将您的代码放在一个名为 FoodTemplate.cs
的文件中并创建一个 Food 实例,则范围属性会起作用。首先我使用了另一个文件名然后它不起作用所以我猜问题与文件名错误有关?您使用的是什么文件名?
已修复!我首先将所有子 类 放在一个大 FileTemplate.cs 文件中,但这也带来了编辑器有时会说找不到相关脚本的问题。现在我创建了单独的文件,所以我有 ItemTemplate.cs 用于抽象文件和子文件 FoodTemplate.cs、WeaponTemplate.cs 等等。我之前这样做是为了修复脚本未找到错误,但直到现在我才看到它也修复了这个问题。
让我们使用以下代码:
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;
}
当我在编辑器中创建 "Weapon" scriptableObject 资产时,我还可以从 parent "Item" class 中填写属性,这很棒。
但是,当我为 "Weapon" 创建可编写脚本的 object 资产时,为什么 parent "Item" class 的 [range] 属性不起作用在编辑器中? "Weapon" class 的 HungerFillAmount 范围本身也不起作用。想不通。我可以在某处放置一些魔法属性以使这些属性也适用于继承的 children 吗?谢谢你和我一起思考! :)
如果我将您的代码放在一个名为 FoodTemplate.cs
的文件中并创建一个 Food 实例,则范围属性会起作用。首先我使用了另一个文件名然后它不起作用所以我猜问题与文件名错误有关?您使用的是什么文件名?
已修复!我首先将所有子 类 放在一个大 FileTemplate.cs 文件中,但这也带来了编辑器有时会说找不到相关脚本的问题。现在我创建了单独的文件,所以我有 ItemTemplate.cs 用于抽象文件和子文件 FoodTemplate.cs、WeaponTemplate.cs 等等。我之前这样做是为了修复脚本未找到错误,但直到现在我才看到它也修复了这个问题。