【问题标题】:How to store additional data in a mesh?如何在网格中存储额外的数据?
【发布时间】:2018-08-04 01:26:00
【问题描述】:

我正在为我的潜行游戏制作一个攀爬系统的原型。我想标记一些边缘,以便玩家可以抓住它们,但我不知道如何接近它。我知道我可以添加单独的对撞机,但这似乎很乏味。相反,我想做的是标记网格中的边缘。这可以实现吗?怎么样?

【问题讨论】:

标签: c# unity3d blender


【解决方案1】:

您最好将边缘数据以可访问的格式存储在外部(也就是说,在您正在运行的游戏中的其他地方,而不是在网格中),也就是说,如果您真的想将其嵌入到网格中...

  1. 像@Draco18s 建议的那样,将元数据放入 Mesh.colors 或 Mesh.uv2 中。大多数着色器会忽略其中之一或两者。当然,您将为脸上的每个顶点复制边缘/面级别信息。

  2. 当玩家尝试“抓取”边缘时,运行碰撞测试,抓取面部,抓取面部上的任何顶点,并查看边缘/面部信息。

例如,您还可以将边缘元数据集合附加到附加到网格游戏对象的脚本中。只要您在需要执行测试时可以访问边缘集合,在哪里存储它就是一个实现细节。

【讨论】:

    【解决方案2】:

    如果您能够在网格中添加嵌套对象,则可以创建一个原始框来表示所需的窗台和对撞机大小。当您在 Unity 中导入网格时,子网格对象将显示为具有自己的 MeshRenderer 的子游戏对象。您可以禁用窗台的 MeshRenderer 并向其添加 BoxCollider 组件。碰撞器将自动调整大小以匹配原始网格。

    Blender Nested Objects example

    Unity Nested Objects example

    【讨论】:

    • 您可以扩展这个系统,让子对象遵循特定的命名约定,只需向主对象添加一个脚本,该脚本会在程序上禁用 MeshRenderer 并在所有具有匹配名称的子对象上添加 Collider。
    猜你喜欢
    • 1970-01-01
    • 2015-10-16
    • 2016-10-02
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 2021-09-22
    • 2014-02-15
    相关资源
    最近更新 更多