【问题标题】:Combine meshes imported at run time?合并在运行时导入的网格?
【发布时间】:2017-06-26 15:41:04
【问题描述】:

Unity 中最多 65k 个顶点的网格。我在运行时导入了超过此限制的高细节(花哨的方式说高质量)模型。因此,我经常需要为单个模型创建多个网格。这些网格中的每一个都放置在自己的游戏对象中(Unity 只允许给定游戏对象上有一个网格)。然后,我将所有这些单独的游戏对象作为父游戏对象放入一个空的父游戏对象中。

我希望能够与所有网格进行交互,就好像它们在单个网格碰撞器下一样。这可能吗?

我目前的研究结果如下:link 1link 2

链接一似乎并不是我真正想要的,链接二在我尝试手动导入时并没有按照我想要的方式工作。它以与 AddComponent 相同的方式创建网格,但它为每个网格单独创建了碰撞器。

相反,我希望它为代表单个模型所需的所有网格创建一个统一的网格碰撞器。

梦想还是可能?

【问题讨论】:

  • 我猜这是不可能的。我建议创建模型的低多边形版本以用作对撞机。此外,网格碰撞器的计算成本很高,如果对象在运行时移动、旋转或缩放,Unity 需要重新计算网格碰撞器。
  • 创建低多边形版本可能是最好的解决方案。
  • @Draco18s 我正在使用 this 网格“焊接”代码,但我无法确定阈值和 bucketStep 的确切用途
  • threshold 是两个顶点需要多近才能焊接。 bucketsize 似乎只是对象的三次分割以帮助处理。我没用过,所以不知道。
  • @Draco18s 我正在积极尝试使用此功能,但它没有多大意义。例如,如果阈值和 bucketStep = .03,我可以将 12k 顶点网格减少到 1.7k 顶点。如果我将 bucketStep 增加到 .04,则减少的结果现在是 1.4k 个顶点。但是,如果我将 bucketStep 减少到 0.01,减少的结果是 1.7k。因此,您可以看到我的困惑,因为在两个方向上更改值似乎没有多大意义

标签: c# unity3d runtime mesh


【解决方案1】:

试试Mesh.CombineMeshes

public void CombineMeshes(CombineInstance[] combine, bool mergeSubMeshes = true, bool useMatrices = true, bool hasLightmapData = false);

将多个 Mesh 合并到这个 Mesh 中。

来自文档:

[RequireComponent(typeof(MeshFilter))]
[RequireComponent(typeof(MeshRenderer))]
public class ExampleClass : MonoBehaviour {
    void Start() {
        MeshFilter[] meshFilters = GetComponentsInChildren<MeshFilter>();
        CombineInstance[] combine = new CombineInstance[meshFilters.Length];
        int i = 0;
        while (i < meshFilters.Length) {
            combine[i].mesh = meshFilters[i].sharedMesh;
            combine[i].transform = meshFilters[i].transform.localToWorldMatrix;
            meshFilters[i].gameObject.active = false;
            i++;
        }
        transform.GetComponent<MeshFilter>().mesh = new Mesh();
        transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine);
        transform.gameObject.active = true;
    }
}

【讨论】:

  • Mesh.CombineMeshes 仍然有 65,000 个顶点的硬性限制。
猜你喜欢
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 2018-11-30
  • 1970-01-01
  • 1970-01-01
  • 2012-10-02
  • 2017-11-04
  • 1970-01-01
相关资源
最近更新 更多