与 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类

Unity矩阵变换

API:Vector3 Vector2=vector1.normalized;

Eigen库笔记整理

g2oEigenMat矩阵类型转换

Matrix路由API和流量条件