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