【问题标题】:How to include Unity3d libs in a non-Unity3d project?如何在非 Unity3d 项目中包含 Unity3d 库?
【发布时间】:2020-11-28 20:40:53
【问题描述】:

我正在开发一个 C# 库,它既可用作某些 Unity3d 项目的插件,也可用于非 Unity3d 项目。

我需要使用一些 Unity3d 类(例如 UnityEngine.Matrix4x4)并标准化一些函数以使用有效类型来与项目是否为 Unity 项目无关。

那么,正如标题所说:在非 Unity3d 库项目中包含 Unity3d 库的正确方法是什么?我应该只在我的项目中包含对本地 Unity3d 二进制文件(如 UnityEngine.dll)的引用吗?如果是这样,哪个是查找这些二进制文件的正确文件夹(它们出现在统一安装文件夹中的一些不同文件夹中)?

【问题讨论】:

  • 我不会将它们包含到您的库中,因为如果您随后在 Unity 项目中使用该库,类型将被定义两次并且您会收到错误...您可以自己定义这些类型并使用它们根据您的需要或做类似#if UNITY_XY UnityTypes #else YourTypes #endif
  • @derHugo 重写统一二进制文件似乎不是解决我的问题的正确方法。必须有一个更直接的解决方案来解决这个问题......
  • 那么你将不得不重写它,而不是至少将 Unity 的源代码作为起点......
  • 反对 Unity dll 的另一点是:您只需要一个数学库...您不想包含所有 Unity 内置类型,如 GameObjectTransform、@987654324 @ etc .. 我认为了解您的实际用例会有所帮助;)

标签: unity3d


【解决方案1】:

如果您实际上并未运行 Unity 引擎来渲染或处理输入,则可能是在技术上和法律上强制将圆钉插入方孔。

最优雅的解决方案可能是使用更多不可知的库在 C# 中编写您的库。例如,您提到的 Matrix4x4 类在 System.Numerics 中具有等价物。除了库之外,所有需要的只是将 System.Numerics.Matrix4x4 转换为 UnityEngine.Matrix4x4 的轻型包装器。有时 Unity 开发人员自己会做这样的事情,例如 Unity.Mathematics.float3 结构在 ECS 领域比标准 Vector3 效果更好。

仅供参考,如果您正在寻找某个特定系统的工作原理,请查看 C# 参考 GitHub 存储库,例如 Matrix4x4 struct。请注意,不允许“复制和粘贴”Unity 源代码。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多