[英]Creating an objectfield for an abstract class/scripts that inherit from that abstract class in Unity
我試圖在Unity中制作一個過場動畫系統(我討厭使用時間軸,沒有大量我也討厭制作的自定義可玩對象,它就無法達到我的目的),所以我決定開始制作自己的使用節點的基於系統。
我的想法是每個節點都擁有一個從抽象類繼承的類。 這將是為該節點運行的實際代碼,但是我的問題來自繼承部分:
似乎不可能創建僅接受繼承抽象類的腳本的objectfield。 如果我創建一個僅接受CutsceneEvent(抽象類的名稱)的對象字段,則無論是抽象類本身還是從其繼承的任何腳本,都無法向其添加任何腳本。
我唯一的解決方案是將字段設置為Monoscript,然后檢查基類並根據腳本是否繼承自CutsceneEvent來刪除/保留腳本,但這是它自己的問題(試圖從該腳本中獲取特定的函數和變量只是Monoscript類型,無法將其轉換為CutsceneEvent)。
我完全迷住了。 我問過的所有地方似乎都基本被忽略了,因為沒人知道如何解決。
這是一些代碼。
表象思維班:
//CutsceneEvent
public abstract class CutsceneEvent : MonoBehaviour
{
public System.Action after;
public abstract IEnumerator Function();
}
我如何定義變量(我正在使用xNode框架):
public CutsceneEvent function;
[Output] public CutsceneEventNode nextEvent;
[Input] public CutsceneEventNode lastEvent;
protected override void Init()
{
}
// Return the correct value of an output port when requested
public override object GetValue(NodePort port)
{
return null;
}
U可以為您的字段使用接口而不是抽象類:
public interface ICutsceneEvent {}
//CutsceneEvent
public abstract class CutsceneEvent : MonoBehaviour, ICutsceneEvent
{
public System.Action after;
public abstract IEnumerator Function();
}
然后,您可以擁有ICutsceneEvent的列表,而不是擁有CutsceneEvent的列表。 您應該將抽象方法放在接口中,並在抽象類:D中實現它們。
另外,如果您還沒有^^,請查看Cinemachine
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.