mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-08-28 22:04:56 -05:00
WriteAssets and WritePrefab
This commit is contained in:
@@ -205,9 +205,9 @@ namespace UniGLTF.MeshUtility
|
||||
|
||||
var (results, created) = MeshUtility.Process(context.Instance, groupCopy);
|
||||
|
||||
WriteAssets(context.Instance, context.AssetFolder, results, _exportTarget);
|
||||
|
||||
MeshUtility.clear(results);
|
||||
// TODO: this should be replaced export and reimport ?
|
||||
WriteAssets(context.AssetFolder, context.Instance, results);
|
||||
WritePrefab(context.AssetFolder, context.Instance);
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
@@ -223,7 +223,7 @@ namespace UniGLTF.MeshUtility
|
||||
using (var context = new UndoContext("MeshUtility", _exportTarget))
|
||||
{
|
||||
var (results, created) = MeshUtility.Process(_exportTarget, MeshUtility.MeshIntegrationGroups);
|
||||
MeshUtility.clear(results);
|
||||
MeshUtility.Clear(results);
|
||||
|
||||
foreach (var go in created)
|
||||
{
|
||||
@@ -239,11 +239,10 @@ namespace UniGLTF.MeshUtility
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write Mesh & Prefab
|
||||
/// Write Mesh
|
||||
/// </summary>
|
||||
protected virtual string WriteAssets(GameObject copy, string assetFolder, List<MeshIntegrationResult> results, GameObject prefab)
|
||||
protected virtual void WriteAssets(string assetFolder, GameObject instance, List<MeshIntegrationResult> results)
|
||||
{
|
||||
// write mesh asset
|
||||
foreach (var result in results)
|
||||
{
|
||||
if (result.Integrated != null)
|
||||
@@ -260,15 +259,21 @@ namespace UniGLTF.MeshUtility
|
||||
}
|
||||
}
|
||||
|
||||
// prefab
|
||||
MeshUtility.Clear(results);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Write Prefab
|
||||
/// </summary>
|
||||
protected virtual string WritePrefab(string assetFolder, GameObject instance)
|
||||
{
|
||||
var prefabPath = $"{assetFolder}/Integrated.prefab";
|
||||
Debug.Log(prefabPath);
|
||||
PrefabUtility.SaveAsPrefabAsset(copy, prefabPath, out bool success);
|
||||
PrefabUtility.SaveAsPrefabAsset(instance, prefabPath, out bool success);
|
||||
if (!success)
|
||||
{
|
||||
throw new System.Exception($"PrefabUtility.SaveAsPrefabAsset: {prefabPath}");
|
||||
throw new Exception($"PrefabUtility.SaveAsPrefabAsset: {prefabPath}");
|
||||
}
|
||||
|
||||
return prefabPath;
|
||||
}
|
||||
|
||||
|
||||
@@ -166,7 +166,7 @@ namespace UniGLTF.MeshUtility
|
||||
return (results, newList);
|
||||
}
|
||||
|
||||
public void clear(List<MeshIntegrationResult> results)
|
||||
public void Clear(List<MeshIntegrationResult> results)
|
||||
{
|
||||
// 用が済んだ 統合前 の renderer を削除する
|
||||
foreach (var result in results)
|
||||
|
||||
@@ -50,22 +50,27 @@ namespace VRM
|
||||
return firstPerson || mod;
|
||||
}
|
||||
|
||||
protected override string WriteAssets(GameObject target, string assetFolder, List<MeshIntegrationResult> results, GameObject prefab)
|
||||
List<BlendShapeClip> _clips;
|
||||
protected override void WriteAssets(string assetFolder, GameObject target, List<MeshIntegrationResult> results)
|
||||
{
|
||||
// 統合した結果を反映した BlendShapeClip を作成して置き換える
|
||||
var clips = VRMMeshIntegratorUtility.FollowBlendshapeRendererChange(results, target, assetFolder);
|
||||
|
||||
// reset firstperson
|
||||
if (target.GetComponent<VRMFirstPerson>() is VRMFirstPerson firstperson)
|
||||
{
|
||||
firstperson.Reset();
|
||||
}
|
||||
_clips = VRMMeshIntegratorUtility.FollowBlendshapeRendererChange(results, target, assetFolder);
|
||||
|
||||
// write mesh & prefab
|
||||
var prefabPath = base.WriteAssets(target, assetFolder, results, prefab);
|
||||
base.WriteAssets(assetFolder, target, results);
|
||||
|
||||
// reset firstPerson
|
||||
if (target.GetComponent<VRMFirstPerson>() is VRMFirstPerson firstPerson)
|
||||
{
|
||||
firstPerson.Reset();
|
||||
}
|
||||
}
|
||||
|
||||
protected override string WritePrefab(string assetFolder, GameObject instance)
|
||||
{
|
||||
var prefabPath = base.WritePrefab(assetFolder, instance);
|
||||
var prefabReference = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
|
||||
foreach (var clip in clips)
|
||||
foreach (var clip in _clips)
|
||||
{
|
||||
var so = new SerializedObject(clip);
|
||||
so.Update();
|
||||
@@ -74,7 +79,6 @@ namespace VRM
|
||||
prop.objectReferenceValue = prefabReference;
|
||||
so.ApplyModifiedProperties();
|
||||
}
|
||||
|
||||
return prefabPath;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user