![](/img/trans.png)
[英]How do I add a card effect to my card ScriptableObject in unity?
[英]How do I use a script that is in my ScriptableObject?
我正在创建一个系统,其中我的卡在 ScriptableObject 中,但每张卡都有一个唯一的 function。 我想到的是为每个从“技能”继承的技能创建一个新的 class 。 所以我把这个脚本为我的 ScriptableObject 中的每个字母,但现在我试图访问它但我不能,因为我不能使用 AddComponent。
public class Cards : ScriptableObject
{
public Sprite cardSprite;
public int cardAttack;
public int cardHealth;
public int cardCost;
public Object cardAbility;
}
可编写脚本的 object 是一个数据容器。 材质或照明设置是可编写脚本的对象。 您可以将它们保存为资产并将它们用作其他脚本的设置,但不能将它们附加到 GameObjects。 在这里阅读更多。
要在资产浏览器中创建 ScriptableObjects,您需要在 class 开始之前添加以下内容。
[CreateAssetMenu(fileName = "DefaultFileName", menuName = "ScriptableObjects/NameOfYourObjects", order = 1)]
要将它们添加到脚本中,请使用public Cards cards;
然后您可以将它们从资产浏览器拖到检查器中的脚本。
唯一可以添加到游戏对象的东西是 MonoBehaviors
正如您所意识到的,您不能将 AddComponent 与 ScriptableObjects 一起使用,因为它只能用于将组件附加到 GameObjects。
然而,ScriptableObjects 确实支持类似于主资产和子资产的概念。
您可以使用 AssetDatabase.AddObjectToAsset 添加新的子资产,它们将在项目视图中的主资产下方显示为嵌套的子资产。
public abstract class Skill : ScriptableObject
{
#if UNITY_EDITOR
protected static void AddToCard<TSkill>(MenuCommand command) where TSkill : Skill
{
Card card = (Card)command.context;
TSkill skill = CreateInstance<TSkill>();
skill.name = skill.GetType().Name;
card.skill = skill;
string path = AssetDatabase.GetAssetPath(card);
AssetDatabase.AddObjectToAsset(skill, path);
AssetDatabase.ImportAsset(path);
}
[MenuItem("CONTEXT/Card/Remove Skill")]
protected static void RemoveSkill(MenuCommand command)
{
Card card = (Card)command.context;
string path = AssetDatabase.GetAssetPath(card);
Skill skill = AssetDatabase.LoadAssetAtPath<Skill>(path);
AssetDatabase.RemoveObjectFromAsset(skill);
AssetDatabase.ImportAsset(path);
}
#endif
}
using UnityEditor;
using UnityEngine;
[CreateAssetMenu]
public class ExampleSkill : Skill
{
#if UNITY_EDITOR
[MenuItem("CONTEXT/Card/Add Skill/Example Skill")]
private static void AddToCard(MenuCommand command) => AddToCard<ExampleSkill>(command);
#endif
}
using UnityEngine;
[CreateAssetMenu]
public class Card : ScriptableObject
{
public Skill skill;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.