![](/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.