与 API 无关的 Vector3、Matrix 等?
Posted
技术标签:
【中文标题】与 API 无关的 Vector3、Matrix 等?【英文标题】:API agnostic Vector3, Matrix, etc.? 【发布时间】:2011-07-14 19:03:44 【问题描述】:我试图让我的游戏逻辑 API 不可知。这样做时,我不想使用 Unity3D 的 Vector3 结构或 XNA 等。最好的方法是什么?如果我滚动自己的 Vector3 结构并只为各种 API 实现编写隐式转换器,这似乎会非常繁重。
这种事情有最佳实践吗?不是我可以要求微软、Unity等来野餐,坚持一个通用的界面。
【问题讨论】:
【参考方案1】:看起来XNA 和Unity 的Vector3
实现非常相似,主要区别在于属性名称的情况。可惜没有办法实现扩展属性。
您可以做的是创建一组extension methods,以及一些条件编译(#if UNITY_3_3
或#if XNA
),并专门使用这些扩展方法来检索与 API 无关的代码中的值。这仍然允许您将未修改的 Vector3 对象传递给需要 Vector3 的平台特定代码,而无需大量转换。
【讨论】:
没有想到条件,但是我所做的是选择为每个处理转换的 API 创建一个单独的项目。更好的解释是我将 Unity 用于客户端,但服务器代码将是常规控制台应用程序,尽管它仍需要使用 Vectors 等,所以我不想依赖于 Unity它不应该真正属于的地方!【参考方案2】:根据我的经验,我会选择一个平台来编写您的逻辑,然后在另一个平台上创建一个匹配的实现,并将其转换为平台的本机类型。设计和编写第三个实现然后必须转换到两个平台是没有意义的!
所有平台都是平等的,我可能更喜欢 XNA,因为您可以从 MonoGame 或(最终)ExEn 获取开源实现并使用它。
但是,在实践中,我认为您可能最好从打算在其上开发的平台(XNA 或 Unity)开始,然后在您真正需要它时创建兼容层。
【讨论】:
以上是关于与 API 无关的 Vector3、Matrix 等?的主要内容,如果未能解决你的问题,请参考以下文章
《Unity_API解析》 第十四章 Vector2类Vector3类