Kam*_*ely 6 c# design-patterns unity-game-engine virtual-reality
我正在为我的游戏添加重播功能.有了这个功能,我可以捕获用户对游戏的输入并稍后将它们反馈给Unity以重放游戏.但是VRStandardAssets.Utils.VRInput类的设计阻止了我模仿用户输入.
此类不提供任何公共方法,以便以编程方式触发其事件(例如OnClick或OnDoubleClick事件).所以我决定从它创建一个派生类,并编写我自己的公共方法来触发事件.此策略失败,因为VRInput的方法是私有的意思,我不能从派生类调用它们.
建议这类类提供受保护的虚拟void On [eventName](subclassOfEventArgs e)方法,以便为派生类提供一种使用覆盖来处理事件的方法,但是这个类没有它(为什么这么限制? ).我猜这是Unity的糟糕设计.这种糟糕的设计也使得编写单元/集成测试变得困难.
我在这里错过了什么吗?在重放游戏时,我还能做些什么来欺骗其他类认为他们正在处理VRInput类吗?
建议此类类型提供 protected virtual void On[eventName](subclassOfEventArgs e) 方法,为派生类提供一种使用重写来处理事件的方法,但此类没有它(为什么如此限制? )。我猜这是 Unity 的一个糟糕的设计。这种糟糕的设计也使得编写单元/集成测试变得困难。
所有代码都是好代码。所有代码也是坏代码。取决于你的评价标准。Unity 的开发人员可能没有考虑您的用例。作为另一个相互冲突的经验法则,软件也应该尽可能简单和严格,因此在没有已知用例的情况下预期子类化可能会被认为是过度设计。
至于如何解决这个问题,请参阅如何在 .NET/C# 中通过反射引发事件?
| 归档时间: |
|
| 查看次数: |
246 次 |
| 最近记录: |