gpt4 book ai didi

unity3d - unity : cannot combine mesh that does not allow access: Cube

转载 作者:行者123 更新时间:2023-12-04 01:44:23 26 4
gpt4 key购买 nike

当我调用 CombineMeshes() 时,我得到了 431 倍的错误:

Cannot combine mesh that does not allow access: Cube
UnityEngine.Mesh:CombineMeshes(CombineInstance[])

我已经阅读了 this 和这个。
我正在使用 Unity 2019.1.0f2 - 因此,如果我想使用 Blender,我将不得不使用 Blender 2.80beta

我制作了一个非常简单的立方体(实际上再简单不过了),并将其作为 fbx 文件导出到 Unity 中:

blender simple cube

我称它为“ Wall”,如下所示:

wall blender object

由此我制作了一个预制件。然后我创建了一个空对象,创建了一个脚本来生成墙壁。它将预制件实例化以制作墙壁,这给出了:

wall generated

但是那些预制件是像这样的简单立方体:

wireframe view

所以我想合并它们。 Unity 已经为此做好了准备: CombineMeshes()

我已经尝试修改链接 CombineMeshes() 中的代码,所以这是我的完整脚本,它非常简单:它实例化 + 最后尝试合并所有内容:
using System;
using System.Linq;
using UnityEngine;

public class CoinGenerator : MonoBehaviour
{
public GameObject wallPrefab;
public float gridSize = 40f;
public float topPrefab = 60f;

private void Start()
{
string[] ok = {
"+------------+ +------------+",
"|............| |............|",
"|.+--+.+---+.| |.+---+.+--+.|",
"|.| |.| |.| |.| |.| |.|",
"|.+--+.+---+.+-+.+---+.+--+.|",
"|............. .............|",
"|.+--+.++.+-------+.++.+--+.|",
"|.+--+.||.+--+ +--+.||.+--+.|",
"|......||....| |....||......|",
"+----+.|+--+.| |.+--+|.+----+",
" |.|+--+.+-+.+--+|.| ",
" |.||..... .....||.| ",
" |.||.+--- ---+.||.| ",
"-----+.++.| |.++.+-----",
"..........| |..........",
"-----+.++.| |.++.+-----",
" |.||.+-------+.||.| ",
" |.||...........||.| ",
" |.||.+-------+.||.| ",
"+----+.++.+--+ +--+.++.+----+",
"|............| |............|",
"|.+--+.+---+.| |.+---+.+--+.|",
"|.+-++.+---+.+-+.+---+.++-+.|",
"|...||........ ........||...|",
"+-+.||.++.+-------+.++.||.+-+",
"+-+.++.||.+--+ +--+.||.++.+-+",
"+......||....| |....||......+",
"+.+----++--+.| |.+--++----+.+",
"+.+--------+.+-+.+--------+.+",
"+...........................+",
"+---------------------------+"
};
MeshFilter[] meshFilters = {};
for (int z = -14; z <= 16; z++) {
for (int x = -14; x <= 14; x++) {
char c = ok[30 - (z + 14)][x + 14];
GameObject cp = null;
if (c == '+' || c == '-' || c == '|') {
cp = Instantiate(wallPrefab, null, true);
MeshFilter[] m = cp.GetComponentsInChildren<MeshFilter>();
meshFilters = meshFilters.Concat(m).ToArray();
}
if (cp == null) {
continue;
}
cp.transform.position = new Vector3(
x * gridSize, topPrefab, z * gridSize
);
}
}
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;
// hide the objects, they will be merges into one:
//meshFilters[i].gameObject.SetActive(false);
i++;
}
transform.GetComponent<MeshFilter>().mesh = new Mesh();
transform.GetComponent<MeshFilter>().mesh.CombineMeshes(combine);
}
}

当我调用 CombineMeshes() 时,我得到了 431 倍的错误:
Cannot combine mesh that does not allow access: Cube
UnityEngine.Mesh:CombineMeshes(CombineInstance[])

我究竟做错了什么?

最佳答案

我怀疑您从 Blender 导入的 Cube 模型没有将 Read/Write Enabled 标志设置为 true。

进入导入模型的 Model Tab 并确保 Read/Write Enabled 设置为 true 并应用您的更改。

如果这个标志已经设置,那么我唯一能想到的就是在你的代码中的某个地方(或者可能在你导入的包中?)有对 UploadMeshData() 的调用。 UploadMeshData() 接受一个 bool 值作为参数,如果它为真,将设置网格不再被脚本读取。

关于unity3d - unity : cannot combine mesh that does not allow access: Cube,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55935697/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com