2015-02-05 2 views
0

저는 프리 팹을 동적으로 생성하고 자식 GameObject에 많은 속성을 설정하려고합니다. 이러한 속성 중 하나는 텍스처이고 텍스처는 프리 패브의 자식으로 표시되지만 (GameObject 및 Mesh와 같은 방식으로) GameObject의 MeshRenderer는 여전히 재질을 표시하지 않으며 전체 메쉬가 분홍색으로 표시됩니다. 여기 내 코드는 다음과 같습니다.CreateEmptyPrefab가 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); 

텍스처를 메시에 표시하려면 어떻게해야합니까?

+0

개체가 분홍색으로 표시되면 더 자주 쉐이더 문제가됩니다. 프리 패브로 지정된 셰이더와 인스턴스화 된 셰이더가 맞는지 확인하십시오. – Dover8

답변

0

좋아, 해결했습니다. 이 문제에 걸림돌이되는 사람을 나중에 참조 할 수 있도록 다음 작업을 수행하여 문제를 해결했습니다.

Texture2D (sharedTexture 및 texCopy)에 대한 참조가 삭제되었습니다. 그런 다음 필자는 PNG를 에디터의 게임 객체 위에 드래그하여 머티리얼을 생성 한 후이를 생성 한 머티리얼 폴더에 드롭했습니다. 나는 그 때문에 같은 AssetDatabase을 사용하여 해당 자료를로드 :

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

는 그때 그렇게처럼 MeshRenderer에 직접 그 자료를 할당합니다 보였다

meshRenderer.material = mainMat; 

충분합니다.

관련 문제