【发布时间】:2020-10-12 09:11:52
【问题描述】:
我目前正在使用GameObject.Find() 来检索由 Mapbox Unity SDK 生成的对象。代码在编辑器中运行良好,但是当我构建项目时它返回 null。有问题的代码如下:
GameObject go = GameObject.Find ("16/32699/21126");
if(go != null) {
//do the thing
} else {
Debug.Log("the tile doesn't exist");
}
我尝试在 WebGL 和 Native OSX 中进行构建,结果相同。
在编辑器中,我在场景层次结构中寻找的对象的确切名称是16/32699/21126。我很欣赏使用正斜杠是您统一搜索子子项的方式,但它似乎在编辑器中工作正常。
下面是场景层次的截图。
行为脚本附加到Map 对象。
您知道是什么原因造成的吗,或者是否有其他方法可以搜索我想要的对象?
【问题讨论】:
-
您是在场景中的任何位置使用
SetActive(false)函数停用“16/32699/21126”对象还是使用Destroy函数销毁它? -
@Programmer 我不是个人,但我不能确定 Mapbox SDK 在做什么。不过我可以在游戏中看到这个物体,所以我很确定它仍然处于活动状态。
-
Mapbox SDK 要么更改该对象的名称,销毁它,要么在 Mapbox SDK 创建它之前搜索该对象。您可以通过创建一个仅使用名为“16/32699/21126”的对象的新场景,然后使用
GameObject.Find ("16/32699/21126");搜索它来确保问题不是GameObject.Find ("16/32699/21126");。你应该找到它。 -
尝试同时获取地图的转换,然后使用
FindChild(),如果这不起作用,请遍历地图的孩子并尝试以这种方式找到它(debug.log 的名称孩子们发现也不是你要找的那个!) -
我建议完全摆脱
.Find()电话。即使您按照@Programmer 的建议修复它,在没有任何编译器警告的情况下,错误返回所需要的只是更改名称,这可能在将来的任何重构或其他插件中发生。 --- 将 reference 绑定到对象本身而不是 name 的依赖注入的单例或不同方法会好得多。
标签: c# unity3d mapbox unity-webgl