Load Material when importer avoid overwrite #142

This commit is contained in:
ousttrue 2019-01-26 17:10:08 +09:00
parent 38eea5ff15
commit fcbea02954
2 changed files with 43 additions and 7 deletions

View File

@ -804,14 +804,47 @@ namespace UniGLTF
public virtual bool IsOverwrite(UnityEngine.Object o)
{
if(o is Material)
{
return false;
}
return true;
}
public virtual bool LoadAsset(UnityPath assetPath, UnityEngine.Object o)
{
if (o is Material)
{
var loaded = assetPath.LoadAsset<Material>();
// replace member
for(int i=0; i< m_materials.Count; ++i)
{
if (m_materials[i] == o)
{
m_materials[i] = loaded;
break;
}
}
// replace renderers.material
foreach(var mesh in Meshes)
{
foreach(var r in mesh.Renderers)
{
for(int i=0; i<r.sharedMaterials.Length; ++i)
{
if (r.sharedMaterials.Contains(o))
{
r.sharedMaterials = r.sharedMaterials.Select(x => x == o ? loaded : x).ToArray();
}
}
}
}
return true;
}
return false;
}
public void SaveAsAsset(UnityPath prefabPath)
{
ShowMeshes();
@ -841,13 +874,14 @@ namespace UniGLTF
{
if (assetPath.IsFileExists)
{
if (!IsOverwrite(o))
if (LoadAsset(assetPath, o))
{
// 上書きしない
Debug.LogWarningFormat("already exists. skip {0}", assetPath);
// 上書きせずに既存のアセットからロードして置き換えた
continue;
}
}
// アセットとして書き込む
assetPath.Parent.EnsureFolder();
assetPath.CreateAsset(o);
paths.Add(assetPath);

View File

@ -8,6 +8,8 @@ namespace UniGLTF
{
public Mesh Mesh;
public Material[] Materials;
// 複数のノードから参照されうる
public List<Renderer> Renderers=new List<Renderer>(); // SkinnedMeshRenderer or MeshRenderer
}
}