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