我正在使用Mapbox和RoadArchitect,并试图构建一些游戏初始化代码,使用Mapbox生成一个向量列表,然后在RoadArchitect中获取向量列表和调用函数来生成道路GameObjects。为了做到这一点,我需要等待Mapbox完成它的工作,然后才能运行代码来生成道路。我将Mapbox MergedModifierStack扩展为ObservedModifierStack,并添加了一个StackComplete事件。
我现在的场景设置有两个相关的GameObjects:
AbstractMap) Map.VectorTileFactory.Factories[m].Visualizer.ObservedModifierStack .Modifiers[n].MyModifier
GSDRoadSystemMap层次结构中的大多数对象都是ScriptableObject,所有对象都是通过编辑器UI中的检查器添加/配置的。
public class MyModifier {
public MyModifier (MyDataObject myDataObject) { ... }
}
public class MyObjectCreator {
public MyObjectCreator(MyDataObject myDataObject, ModifierStack modifierStack) {
...
modifierStack.StackComplete += OnStackComplete();
}
}在我的OnStackComplete事件处理程序中,我试图对GSDRoadSystem执行函数。我之所以说“尝试”,是因为我还没有弄清楚如何将所有的东西都连接起来,以便注入,除了重写Mapbox代码的很大一部分,只是为了用[Inject]来装饰所有的东西,这是我不愿意做的,因为SDK还在开发中。
主要的问题似乎是MyModifier没有被注入MyDataObject,我猜是因为Mapbox/Unitor正控制生命周期(因为通过检查器/编辑器进行配置),但是我不知道如何通过Zenject来解决或处理这个问题。
我的另一个选择是处理,并将消息中的向量列表传递给MyObjectCreator,后者将通过找到适当的GSDRoadSystem。不太理想,但考虑到这是一次性设置,而且RoadArchitect处理会使任何可能占用的额外时间或内存相形见绌,即使它有点不雅观,但我更愿意学习如何让Zenject把事情搞清楚,如果这是可能的话(也许不是因为Mapbox是如何构建东西的)。
我确实有相当广泛的工作背景,与DI (Autofac,Ninject,穷人,等等)。但这是我第一次涉足Unity3d。这是可能的,我允许团结云的东西,解决方案是显而易见的,但我现在还没有看到它。
发布于 2017-12-09 04:23:27
对于没有由Zenject创建并且不在初始场景中的对象,您需要自己手动注入它们。您可以首先将DiContainer注入到类中,然后对第三方代码创建的对象调用DiContainer.Inject或DiContainer.InjectGameObject。
https://stackoverflow.com/questions/47718233
复制相似问题