【问题标题】:How Can I Reset a Gameobject which was under DontDestroyLoad?如何重置 DontDestroyonLoad 下的游戏对象?
【发布时间】:2020-11-12 00:01:01
【问题描述】:

我在一个单独的场景中使用以下脚本来保持我的对象“玩家”(它是一辆汽车)并加载另一个场景。

DontDestroyOnLoad(transform.gameObject);
SceneManager.LoadSceneAsync(1);

但是在我的游戏中,汽车的状态会像它的速度、指示器、被击中的等级一样改变。

当我点击重新开始游戏按钮时,我想将这辆车的状态重置为原始状态。

除了销毁汽车并切换回原始场景再次执行 DontDestroyOnLoad 之外,我还有什么办法可以重置汽车?

【问题讨论】:

  • 如果您通过更改值怎么办。切换场景后GetComponent()?
  • 使用单例模式并将引用存储在某处 static 以便您可以轻松访问它。或者实际上,如果该脚本的唯一目的是存储值并且实际上本身没有任何行为,而不是直接使用不需要绑定到任何 GameObject 并且永远存在的 static class
  • 非常感谢,我发现单例模式对我有用!

标签: unity3d


【解决方案1】:

如果我理解正确,您将公共变量设置为用户定义的值,并且您希望这些是用户在重新加载初始场景时分配的初始变量。有两种解决方案:

(a) 销毁 DontDestroyOnLoad 游戏对象,这样当您重新加载初始场景时,将创建一个新的实例,因此您的用户定义值将被保留。因此,当您想从结束场景重新加载到初始场景时,请创建一个脚本并添加以下内容:

Destroy (GameObject.Find("NameOfTheGameObject"));
SceneManager.LoadSceneAsync(1);

(b) 保留汽车及其脚本,而是创建另一个脚本并将初始值复制到第二个脚本。例如,将以下代码附加到一个新脚本并将该脚本附加到您的汽车游戏对象:

脚本 1 - DontDestroyOnLoad

public int Acceleration_Of_Car = 20;
public int Car_Force = 100;

public static ClassNameHere instance;
 
 void Awake()
 {
      if(instance == null)
      {
           instance = this;
           DontDestroyOnLoad(gameObject);
      }else if(instance != this)
      {
           Destroy(gameObject);
      }
 }

现在在结束场景甚至初始场景中创建第二个脚本。创建与第一个脚本相同的变量,以免您感到困惑。将值从第一个脚本复制到第二个脚本,然后将值从第二个脚本应用到第一个脚本。

脚本 2 - 复制和应用

public int Acceleration_Of_Car;
public int Car_Force;

private Script1 script1; //Reference your first script here
public void Start()
{
   script1 = (Script1) GameObject.FindObjectOfType(typeof(Script1)); //Call the first script
}

public void CopyValues()
{
  Acceleration_Of_Car = script1.Acceleration_Of_Car;
  Car_Force = script1.Car_Force;
}

public void ApplyValues()
{
 script1.Acceleration_Of_Car = Acceleration_Of_Car;
 script1.Car_Force = Car_Force;
}

我会说最好使用 DontDestroyOnLoad() 即使是第二个脚本,这样就不会运行其他实例了:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多