gpt4 book ai didi

unity3d - 使用参数变量 Unity 加载场景

转载 作者:行者123 更新时间:2023-12-04 05:36:42 25 4
gpt4 key购买 nike

在我的游戏中有一个 map View ,其中包含一个 50x50 的瓷砖网格。当您单击图块时,您会被发送到该图块 View 并攻击事物等。就代码而言,这些“图块”之间的唯一区别是图块 ID,也就是。网格上的哪个数字。该数字将在 init 上传递给服务器以处理其余部分。

显然,由于这是瓷砖的唯一区别,因此创建场景“1”、场景“2”...场景“2500”并调用 SceneManager.LoadScene 以切换到特定的瓷砖 View 将是错误的。

我可以使用 DontDestroyOnLoad();当单击磁贴以在场景切换时保留磁贴 ID 时,但 1) 它只接受游戏对象而不仅仅是一个 int 变量 2) 我不需要/不想为除磁贴 View 中的 init 以外的任何内容保留该变量。因此,虽然它可以工作,但似乎有点矫枉过正。

基本上只是将参数传递给场景加载是否有更好的做法?

最佳答案

您可以创建一个静态类来为您保存信息。此类不会附加到任何游戏对象,并且不会在更改场景时被销毁。是static这意味着只能有一个;你不能StaticClassName scn = new StaticClassName()创建新的静态类。您可以直接通过 StaticClassName.SomeStaticMethod() 访问它们例如,可以访问 来自任何地方 .请参阅此示例了解如何将值存储在变量中,更改场景,然后在该场景中使用它(请注意添加的 using UnityEngine.SceneManagement; ):
附加到场景“测试”中的游戏对象的普通 Unity 脚本:

using UnityEngine;
using UnityEngine.SceneManagement;
public class TestingScript : MonoBehaviour {
void Start()
{
StaticClass.CrossSceneInformation = "Hello Scene2!";
SceneManager.LoadScene("Test2");
}
}
一个包含信息的新静态类(不是从 monobehaviour 继承的):
public static class StaticClass {
public static string CrossSceneInformation { get; set; }
}
附加到场景“Test2”中游戏对象的脚本:
using UnityEngine;
public class TestingScript2: MonoBehaviour {

void Start () {
Debug.Log(StaticClass.CrossSceneInformation);
}
}
您不需要将整个类设为静态(如果您出于某种原因需要创建它的更多实例)。如果您要删除 static从类(不是变量)你仍然可以通过 StaticClass.CrossSceneInformation 访问静态变量但你也可以做 StaticClass sc = new StaticClass(); .有了这个 sc您可以使用类的非静态成员,但不能使用 static CrossSceneInformation因为只能有一个(因为它是静态的)。

关于unity3d - 使用参数变量 Unity 加载场景,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42393259/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com