0

我正在动态创建一个预制件并尝试在子游戏对象上设置一堆属性。其中一个属性是纹理,尽管纹理确实显示为预制件的子项(与 GameObject 和 Mesh 一样),但 GameObject 上的 MeshRenderer 仍然没有显示任何材质,并且整个网格显示为粉红色。这是我的代码:

Texture2D sharedTexture = (Texture2D)Resources.Load ("mainTexture", typeof(Texture2D));

string prefabPath = basepath + filename + ".prefab";
UnityEngine.Object prefab = PrefabUtility.CreateEmptyPrefab (prefabPath);
GameObject root = new GameObject ("Zone_" + filename);

GameObject temp = new GameObject(filename);
Texture2D texCopy = (Texture2D)UnityEngine.Object.Instantiate (sharedTexture);
MeshFilter meshFilter = (MeshFilter)temp.AddComponent<MeshFilter> ();
MeshRenderer meshRenderer = temp.AddComponent<MeshRenderer> ();
MeshCollider meshCollider = (MeshCollider)temp.AddComponent<MeshCollider> ();
temp.AddComponent<Zone> ();
Mesh mesh = buildMeshForFilename (filename);
mesh.name = "Zone_Mesh";
meshFilter.mesh = mesh;
meshCollider.sharedMesh = mesh;
meshRenderer.material.mainTexture = texCopy;
temp.transform.parent = root.transform;
AssetDatabase.AddObjectToAsset(mesh, prefabPath);
AssetDatabase.AddObjectToAsset (texCopy, prefabPath);


PrefabUtility.ReplacePrefab(root, prefab, ReplacePrefabOptions.ConnectToPrefab);
AssetDatabase.SaveAssets ();
GameObject.Destroy (root);

我如何让纹理显示在网格上,所以它不仅仅是粉红色的?

4

1 回答 1

0

好的,解决了。为了让任何偶然发现此问题的人将来参考,我通过执行以下操作来修复它:

我删除了对 Texture2D 的引用(sharedTexture 和 texCopy)。然后我将我的 png 拖到编辑器中的一个游戏对象上,该对象生成一个材质并将其放入它创建的材质文件夹中。然后我使用 AssetDatabase 加载该材质,如下所示:

Material mainMat = (Material)AssetDatabase.LoadAssetAtPath ("Assets/resources/Materials/mainTexture.mat", typeof(Material));

然后我将该材质直接分配给 MeshRenderer,如下所示:

meshRenderer.material = mainMat;

这似乎已经足够了。

于 2015-02-06T19:12:40.927 回答