问题标签 [zenject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
unity3d - 使用 Zenject 连接 Mapbox SDK
我正在使用 Mapbox SDK 和 RoadArchitect 并尝试构建一些使用 Mapbox 生成矢量列表的游戏初始化代码,然后获取该矢量列表并调用 Road Architect 中的函数来生成道路 GameObjects。为了做到这一点,我需要等到 Mapbox 完成它的工作,然后才能运行代码来生成道路。我将 Mapbox MergedModifierStack 扩展为 ObservedModifierStack 并添加了 StackComplete 事件。
我当前的场景设置有 2 个相关的游戏对象:
- 地图(地图盒
AbstractMap
)- 其中包含(伪属性路径,可能不是 100% 准确):
Map.VectorTileFactory.Factories[m].Visualizer.ObservedModifierStack .Modifiers[n].MyModifier
- 其中包含(伪属性路径,可能不是 100% 准确):
- 道路建筑师
GSDRoadSystem
Map 层次结构中的大多数对象都是ScriptableObject
通过编辑器 UI 中的检查器添加/配置的。
在我的OnStackComplete
事件处理程序中,我试图针对GSDRoadSystem
. 我说“尝试”是因为我无法弄清楚如何连接所有要注入的东西,除了重写大部分 Mapbox 代码来简单地用 装饰所有[Inject]
东西,鉴于 SDK 是我不愿意做的事情是仍在大力发展。
主要问题似乎MyModifier
是没有MyDataObject
注入,我猜是因为 Mapbox/Unity 正在控制生命周期(由于通过检查器/编辑器进行配置),但我不知道如何解决或使用它通过禅射。
我的另一个选择是弄乱 Unity 消息传递系统,并在消息中传递向量列表,通过 Unity 提供的服务定位器MyObjectCreator
将其定位到适当的位置。GSDRoadSystem
不理想,但鉴于这是一次性设置,RoadArchitect 处理将使任何额外的时间或内存相形见绌,即使它有点不雅,我也可以接受,尽管我宁愿学习如何让 Zenject 连接起来,如果这是可能的话(也许不是因为 Mapbox 是如何构建东西的)。
我确实有相当广泛的与 DI(Autofac、Ninject、poor-man's 等)合作的背景,但这是我第一次涉足 Unity3d。有可能我允许 Unity 将事物云化,并且解决方案很明显,但我现在没有看到它。
c# - 如何修复异常:ZenjectException:在构建类型为“B”的对象时无法解析类型“A”。对象图:B
我试图在我的状态机上的某个特定时刻在运行时加载预制件。但是我在运行时遇到了这个异常。所有场景都使用 Ctrl Left+Maj Left+V 快捷键进行验证。
问题的背景
我的状态机绑定到项目上下文中:
状态是使用 AVFFactory 类中的函数 CreateState 创建的。创建状态并在需要时在它们之间导航没有问题。除非我尝试加载包含游戏对象上下文的预制件。所以,我知道状态机的所有管理只存在于项目上下文中。
我在场景上下文的安装程序中放置了我的预制工厂的绑定:
我的预制件包含一个带有安装程序的游戏对象上下文:
以及用于将对象与工厂一起使用的组件:
我需要工厂实例的状态就是这样,当我想创建这个对象时,我遇到了异常,因为它无法解析类型 AVFSandboxPedestal.Factory :
我已经尝试过的
我认为问题是:我将我的状态机和状态放入项目上下文中,并将我的预制件放入他自己的上下文中。所以,显然,它不能工作。(不?)
所以我尝试在我的预制件上添加一个 Zenject Binding 组件,我在其中添加了 AVFSandboxPedestal 并在其中添加了项目上下文。但它不起作用。
我尝试在类 AVFSandboxPedestal 之外创建一个工厂,并使用组件 Zenject Binding 将其绑定到项目上下文。(但是我在场景时在场景上下文中的安装程序中进行了绑定。也许它不会引发错误,但它是一个),将类 AVFSandboxPedestal 绑定到场景上下文。但似乎没有任何效果。我没有解决该问题的方法,一遍又一遍地阅读文档现在对我没有帮助。
注意:我不希望实际的预制件仅在实际场景中持续存在于所有场景中。但是状态机必须在所有场景中坚持。
注意:如果您需要更高的精度。问一下。;)
谢谢 !:)
unity3d - 未解决实例化游戏对象中的依赖关系
安装人员:
注入行为:
问题StateController
是 null at UpdateObject
。
我应该以某种方式实例化游戏对象吗?
c# - 使用 Zenject 更改场景时的性能问题
我有两个场景:菜单和主。我有一个巨大的滞后SceneManager.LoadScene("Main")
。
这是来自分析器的数据: https ://gyazo.com/da116d1f8e9b429e9170bc3769d23ac4
据我了解与初始化 Zenject 上下文相关的 1 秒延迟。
这是我的安装程序:
该场景在运行时有大约 40 个游戏对象。
我正在使用 Unity 2017.2.1f1、.NET 4.6 和 Zenject 5.5.1。
有没有办法加快场景之间的切换?
c# - Zenject 将 monobehaviur 对象传递给工厂
我有一个 Monobehaviour 对象 BaseUnit,它可以有一些状态,所以我创建了状态工厂,就像在 Zenject 示例项目中一样,但我的问题是当我为这个 BaseUnit 创建这个状态工厂时如何传递这个 BaseUnit 的引用?
c# - Zenjection 绑定
我认为最好通过代码来制定问题。我有一个基类。
例如,还有一些派生类。
如您所见,我希望有几种具有适当 WalkSettings 的单元类型,这些单元类型将从 ScriptableObject 中设置。
所以问题是如何使用 Zenject 将适当的设置注入到适当的类中,任何帮助或澄清都会非常有帮助。
---UPD---
我第一次表达得很糟糕。我想要的是将 CanWalk.WalkSetting 绑定到适当的设置。所以我可以
但这是错误的,因为最后一个绑定只会覆盖每个班级的步行设置。所以我需要的是
现在我只是在 Aracher 里面做这个。
但也许 Zenject 中有一些东西可以解决这个问题。
c# - 你能有 Zenject 的通用创建方法吗
所以我有一个基类和一些派生类,我只想拥有一个具有通用创建方法的工厂,它将创建适当的实例并注入所有依赖项。这可能使用 Zenject 吗?就像是。
现在我正在这样做,但正如你所见,这不是很干净的解决方案。
unity3d - FromNewComponentSibling 然后重用
我希望将相同的实例RouMainMenuPresenterCompanion
注入 MainMenuPresenter 作为ICompanion
( FromNewComponentSibling
) 并在将来重用这个创建的实例,就像RouMainMenuPresenterCompanion
任何解析器一样
上面的示例导致循环依赖。我该如何解决我的问题?
unity3d - Unity 现在推出了自己的依赖注入框架。Inject 的未来在哪里?
Unity的Entity Component System数据驱动设计,引入了自己的DI框架,甚至包括[Inject]字段属性。
Zenject 将如何融入其新的编码范式?
unity3d - 从 SettingCollection 中选择 GameObject
我正在使用 Zenject 框架,我想为工厂创建的类实例化 gameObject。为此,我在 GameInstaller 中使用了类似的东西
它工作正常,但在我的 _settings.PlainHexPrefab 中,我收集了 GameObjects,我需要通过 Hex 对象的属性选择其中一个依赖项。我怎么能做到?