调用特定函数时,我正在加载资源。但是,所有对象都被实例化,而不仅仅是我需要的特定对象。我希望得到一些帮助来编写正确的开关语句。
这是我的代码。
if (File.Exists(objPath) == Resources.Load("BlueCube"))
{
//FileUtil.CopyFileOrDirectory(objPath, savePath);
GameObject instance = Instantiate(Resources.Load("BlueCube", typeof(GameObject))) as GameObject;
}
if (File.Exists(objPath) == Resources.Load("RedCube"))
{
GameObject instance = Instantiate(Resources.Load("RedCube", typeof(GameObject))) as GameObject;
}
if (File.Exists(objPath) == Resources.Load("GreenCube"))
{
GameObject instance = Instantiate(Resources.Load("GreenCube", typeof(GameObject))) as GameObject;
}
if (File.Exists(objPath) == Resources.Load("PurpleCube"))
{
GameObject instance = Instantiate(Resources.Load("PurpleCube", typeof(GameObject))) as GameObject;
}
在 if 语句中,您尝试将来自 File.Exists(objPath) 的布尔结果与来自 Resources.Load("Any") 的对象类型进行比较。
File.Exists(字符串路径)只是说文件是否存在。
Resources.Load("AnyCube") 在上下文中返回一个游戏对象。
哪些文件名通过 objPath 传递?你有一些示例名称吗?那么在这里展示一个真实的开关案例就更容易了。
我可以想象文件名具有应该作为资源加载到此处的名称。然后你可以用条件开关解决这个问题。
GameObject instance;
switch (objPath)
{
case string op when op.Contains("BlueCube"):
instance = Instantiate(Resources.Load("BlueCube", typeof(GameObject))) as GameObject;
break;
case string op when op.Contains("RedCube"):
instance = Instantiate(Resources.Load("RedCube", typeof(GameObject))) as GameObject;
break;
case string op when op.Contains("GreenCube"):
instance = Instantiate(Resources.Load("GreenCube", typeof(GameObject))) as GameObject;
break;
}
但是开关盒可以与示波器一起使用,但如果加载了更多不同的游戏对象,那么最好从开-关原则开始。
好吧...File.Exists(objPath)
返回一个bool
,Resources.Load("BlueCube")
返回已加载的UnityEngine.Object
,该具有隐式转换为bool
=> 可以同时true
所有if
条件
要使switch-case
起作用,您需要有一些可以检查不同情况的东西。在您的情况下,您似乎想要实例化不同颜色的立方体。引入enum
有助于提高可读性和可扩展性。
创建一个包含所有颜色的新枚举,您可以稍后轻松添加新颜色。接下来,而不是使用objectPath
,您想使用该枚举。
假设您的函数当前如下所示:
private void InstantiateCubeAtPath(string objPath)
您希望将其更改为:
private void InstantiateCubeWithColor(CubeColor CubeColor.green)
或任何您想要的颜色。您还需要将有关其颜色的信息添加到每个立方体。
在您的switch case
中,您现在检查立方体颜色并从那里继续。
希望对您有所帮助!