【问题标题】:Mesh Combiner in unity统一的网格组合器
【发布时间】:2020-09-06 01:24:50
【问题描述】:

你好我正在使用这个人的脚本https://www.youtube.com/watch?v=wYAlky1aZn4 组合网格,因为游戏“滞后”或者当它运行不顺畅时它被称为什么。我有 34*124 具有两个不同网格的立方体,如果我将脚本放在具有 34*20 子对象的对象上(与我之前提到的相同的立方体),但如果我将脚本放在具有 32*124 个子对象的对象上,所有效果都很完美它将它们变成看起来像 34*20 立方体的东西。

基本上,如果我将脚本放在具有更多子元素的东西上,它会将其变成更小的东西。

这是视频中的代码:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CombineMeshes : MonoBehaviour {
    public void Combine(){
        Quaternion oldRot = transform.rotation;
        Vector3 oldPos = transform.position;

        transform.rotation = Quaternion.identity;
        transform.position = Vector3.zero;

        MeshFilter[] filters = GetComponentsInChildren<MeshFilter> ();

        Mesh finalMesh = new Mesh ();

        CombineInstance[] combiners = new CombineInstance[filters.Length];

        for (int a = 0; a < filters.Length; a++) {
            if (filters [a].transform == transform) {
                continue;
            }

            combiners [a].subMeshIndex = 0;
            combiners [a].mesh = filters [a].sharedMesh;
            combiners [a].transform = filters [a].transform.localToWorldMatrix;
        }

        finalMesh.CombineMeshes (combiners);

        GetComponent<MeshFilter> ().sharedMesh = finalMesh;

        transform.rotation = oldRot;
        transform.position = oldPos;
        for (int a= 0; a < transform.childCount; a++) {
            transform.GetChild (a).gameObject.SetActive (false);
        }
    }
}

【问题讨论】:

  • 我不太确定问题出在哪里,因为您在“我有 34*124 立方体”之后的句子有点破损,但一种猜测可能是您是否考虑了统一的顶点限制 (65,534)。如果您的组合网格超过限制,您需要使用另一个网格,或者您需要使用UInt32 作为Mesh.IndexFormat。这些立方体是 Unity 原始立方体还是其他东西?这些立方体有多少个顶点?
  • 不,这些立方体来自资产商店。我的意思是说我创建了一个由这些立方体组成的地面,它有 34 个宽和 124 个长的立方体。我只是检查每个立方体有 96 个顶点(我做了 Debu.Log(mesh.vertices.Length;)
  • 终于成功了!!我添加了这个 finalMesh.indexFormat = UnityEngine.Rendering.IndexFormat.UInt32;非常感谢!

标签: unity3d mesh


【解决方案1】:

这正是您遇到的顶点限制问题。通过您的设置,1 个网格只能有 34*20*96 = 65.280 顶点。之后,您需要另一个网格。 124*34*96 使 404,736 超出限制。因此,您需要将网格的格式更改为UInt32。如果延迟继续存在,我可以尝试进一步提供帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-15
    • 2013-07-09
    相关资源
    最近更新 更多