簡體   English   中英

為從Unity中的抽象類繼承的抽象類/腳本創建對象字段

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM