首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Zenject连接Mapbox

使用Zenject连接Mapbox
EN

Stack Overflow用户
提问于 2017-12-08 16:18:09
回答 1查看 141关注 0票数 1

我正在使用Mapbox和RoadArchitect,并试图构建一些游戏初始化代码,使用Mapbox生成一个向量列表,然后在RoadArchitect中获取向量列表和调用函数来生成道路GameObjects。为了做到这一点,我需要等待Mapbox完成它的工作,然后才能运行代码来生成道路。我将Mapbox MergedModifierStack扩展为ObservedModifierStack,并添加了一个StackComplete事件。

我现在的场景设置有两个相关的GameObjects:

  • 地图(Mapbox AbstractMap)
    • 其中包含(伪属性路径,可能不会100%准确):Map.VectorTileFactory.Factories[m].Visualizer.ObservedModifierStack .Modifiers[n].MyModifier

  • RoadArchitect GSDRoadSystem

Map层次结构中的大多数对象都是ScriptableObject,所有对象都是通过编辑器UI中的检查器添加/配置的。

代码语言:javascript
复制
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。这是可能的,我允许团结云的东西,解决方案是显而易见的,但我现在还没有看到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-12-09 04:23:27

对于没有由Zenject创建并且不在初始场景中的对象,您需要自己手动注入它们。您可以首先将DiContainer注入到类中,然后对第三方代码创建的对象调用DiContainer.InjectDiContainer.InjectGameObject

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47718233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档