gpt4 book ai didi

c# - 通过不使用检查器在 Unity 中重构代码

转载 作者:太空宇宙 更新时间:2023-11-03 12:26:34 24 4
gpt4 key购买 nike

我的统一游戏中有一个门户。通过输入触发器,它应该加载一个场景。所以这段代码真的很短,在这里:

public class PortalData : EnvironmentCommonData // the data class with some information
{
public PortalData(string sceneToLoad) // set the scene in the constructor
{
SceneToLoad = sceneToLoad;
}

public string SceneToLoad { get; set; } // the scene to load when entering
}

public class PortalController : EnvironmentCommonController // the portal class
{
[SerializeField]
string sceneToLoad; // set the scene in the inspector

private PortalData data;

private void Start()
{
data = new PortalData(sceneToLoad); // instance for the data class
}

private void OnTriggerEnter(Collider col) // player enters the trigger
{
if (CheckCollision(col, data.PlayerObject)) // is the entering object the player?
LoadScene(data.SceneToLoad); // load the new scene
}
}

所以我正在寻找一种不使用检查器的聪明方法。我想通过脚本将其全部自动化。

所以我尝试设置 Controller 抽象并创建继承自该 Controller 的不同 Controller 类,但这并不优雅。

在这里你可以看到我尝试的一个例子:

https://hastebin.com/utuqubafuz.cs

有人有想法吗?

完美的脚本应该是这样的

public class Portal : Monobehaviour
{
string sceneToLoad = "";

void OnTriggerEnter(Collider col)
{
if(col.gameObject.tag == "Player")
LoadScene(sceneToLoad);
}
}

但如果可能的话,我不想要检查员。

最佳答案

您可以使用 PortalSpawner 来实例化 GameObject,通过 AddComponent()Portal 对象附加到它们,并设置 string newPortal.sceneToLoad。虽然这可以避免使用 Inspector 设置字符串,但它仍然需要您在某处指定字符串,如评论中提到的 @Draco18s。

其他方式是:

  1. 每个场景的子类,具体声明了 string sceneToLoad
  2. 在不同位置为同一场景重复使用预制件,
  3. 如果它正在编写您想避免的 string,您可以使用 enum 并检查每个枚举值并相应地加载场景(代码看起来更脏但可能会使 Inspector清洁工),或
  4. 制作一个 JSON 文件(或任何其他数据库或可序列化文本),您可以在其中存储要生成的 Portal 对象的位置,其中 string newPortal.sceneToLoad 每个对象都应该包含。最终这将回到 AddComponent() 方法。

JSON 方法可能更接近您正在寻找的方法,但它需要更多的工作,我不确定是否值得付出努力。

如果这些不是您正在寻找的解决方案,请提供您希望在哪些步骤发生自动化。 sceneToLoad 无论如何都必须在特定点指定。我相信 Inspector 字段是在 Unity 中执行此操作的常见位置。

另一方面,坚持场景命名约定可能会使某些过程更容易。因此,例如,场景名称必须是 sceneNumber_k,其中 k 是场景的索引,第 k 个 Portal 将打开第 k 个场景。使用这种命名约定,一些初始化字符串的过程可以自动化

关于c# - 通过不使用检查器在 Unity 中重构代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44627914/

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