簡體   English   中英

如何使 ac# 腳本在場景開始時統一運行

[英]how to make a c# script run at scene start in unity

我正在做一個學校項目。 我需要在場景開始后立即檢查場景中被破壞的對象。 問題是我不知道如何加載它或在哪里附加 c# 腳本。

public static class DestroyedObject {

    static List<GameObject> objs = new List<GameObject>();
    public static void Add(GameObject obj) 
    {
        if(!objs.Contains(obj))
            objs.Add(obj); 
    } 
}

如果您希望它在開始場景時運行,則需要將其附加到GameObject 創建空並將其作為組件附加。

您要在啟動時運行的代碼應位於:

void Awake
{
    //Your code here
}

或者

void Start
{
    //Your code here
}

職能。

一旦類被實例化就會調用 Start 並且在場景開始時調用 Awake 。 取決於您希望它在調用堆棧中的哪個位置,但在您的情況下,我認為它基本上會做同樣的事情。

我認為您正在尋找的是一種“保存”已刪除對象的方法:您只需讓您的類從MonoBehaviour並調用DontDestroyOnLoad()以便包含腳本的對象將存在於場景之間。

public static class DestroyedObject : MonoBehaviour
{
    public static DestroyedObject Instance;
    private static List<GameObject> objs = new List<GameObject>();

    private void Awake()
    {
        if (!Instance)
        {
            Instance = this;
        }
        else
        {
            DestroyImmediate(gameObject);
        }

        DontDestroyOnLoad(gameObject);
    }

    public static void Add(GameObject obj) 
    {
        if(!objs.Contains(obj))
            objs.Add(obj); 
    }

    public static List<GameObject> GetDestroyedObjects()
    {
        return objs;
    }
}

然后您只需使用DestroyedObject.Instance.Add()DestroyedObject.Instance.GetDestroyedObjects()訪問您的腳本(有些人不喜歡這種設計模式,但它已被證明在使用 Unity 時非常有效)。

同樣正如@Sergey 所問的那樣,為什么要創建對象(在場景加載時)以便之后刪除它們:您可以執行反向操作(僅實例化所需的對象)。

希望這可以幫助,

你能描述一下你想要達到的總體目標嗎? 因為看起來你的方式不是最好的方式;)。

如果您只想知道如何在場景開始時執行腳本:創建一個繼承自 MonoBehaviour 的腳本(不需要靜態類),將其附加到場景中的游戲對象,就是這樣!

如果您想在場景開始(並且游戲對象已加載)時立即執行代碼,請將您的代碼放在 Awake() 或 Start() 中。 您可以在此處閱讀這些函數的執行順序: https : //docs.unity3d.com/Manual/ExecutionOrder.html

使腳本靜態意味着它將在所有場景中處於活動狀態,甚至在加載任何場景之前也是如此。

此外,除非您確實需要它們,否則我不建議使用靜態類。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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