我有一个softozor
由玩家控制的游戏对象组成的“主要”场景。这是一只飞扬的恐龙。作为该softozor
游戏对象的子对象,我设置了另一个游戏对象 ,Installer
它由一个 Transform 组件和一个PlayerInstaller (Script)
组件组成:
PlayerInstaller
安装了我的播放器逻辑所需的一切。最后,在softozor
游戏对象中,我添加了一个Game Object Context (Script)
我注册的位置PlayerInstaller
:
除了softozor
游戏对象,我还定义了一个SceneContext
:
您会注意到所有安装程序列表都是空的SceneContext
。但是,如果没有任何SceneContext
注册,PlayerInstaller
则不会触发。使用该设置玩游戏效果很好,即被PlayerInstaller
调用,我可以控制我的恐龙在我的游戏中做任何我想做的事情。
到现在为止还挺好。现在,考虑以下场景测试:
public class PlayerTests : SceneTestFixture
{
[Inject]
private IPlayer _player;
[UnityTest]
public IEnumerator TestScene()
{
yield return LoadScene("Main");
_player.Flap();
yield return new WaitForSeconds(0.01f);
[...]
}
}
在该测试中,_player
成员变量没有注入满足IPlayer
合同的对象。事实上,PlayerInstaller.InstallBindings()
不叫。
相反,如果我摆脱我的游戏对象中的Game Object Context (Script)
组件,并在以下位置注册:softozor
PlayerInstaller
SceneContext
然后我也可以像以前一样玩游戏,并且我的测试正在运行,即PlayerInstaller.InstallBindings()
在我的场景测试期间调用该方法。
PlayerInstaller
我在softozor
游戏对象上下文中注册的第一次尝试有什么问题?
我正在与
- Zenject 版本。7.3.1
- Unity 2019.1.8f1 PC、Mac 和 Linux 独立版