2025-04-25 21:14:54 +09:00

136 lines
4.8 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#pragma warning disable 0414, 0649
using UnityEditor;
using UnityEngine;
using UniGLTF.M17N;
using UniGLTF;
using System.Collections.Generic;
namespace VRM
{
public class VrmMeshIntegratorWizard : UniGLTF.MeshUtility.MeshUtilityDialog
{
public new const string MENU_NAME = "VRM 0.x MeshUtility";
public new static void OpenWindow()
{
var window =
(VrmMeshIntegratorWizard)EditorWindow.GetWindow(typeof(VrmMeshIntegratorWizard));
window.titleContent = new GUIContent(MENU_NAME);
window.Show();
}
protected override void Validate()
{
base.Validate();
if (_exportTarget.GetComponent<VRMMeta>() == null)
{
_validations.Add(Validation.Error("target is not vrm1"));
return;
}
}
VrmMeshUtility _meshUtil;
VrmMeshUtility VrmMeshUtility
{
get
{
if (_meshUtil == null)
{
_meshUtil = new VrmMeshUtility();
}
return _meshUtil;
}
}
protected override UniGLTF.MeshUtility.GltfMeshUtility MeshUtility => VrmMeshUtility;
protected override bool MeshIntegrateGui()
{
var firstPerson = ToggleIsModified("FirstPerson == AUTO の生成", ref MeshUtility.GenerateMeshForFirstPersonAuto);
var mod = base.MeshIntegrateGui();
return firstPerson || mod;
}
List<BlendShapeClip> _clips;
protected override void WriteAssets(string assetFolder,
GameObject instance, List<UniGLTF.MeshUtility.MeshIntegrationResult> results)
{
// 統合した結果を反映した BlendShapeClip を作成して置き換える
_clips = VrmBlendShapeUpdater.FollowBlendshapeRendererChange(assetFolder, instance, results);
// write mesh
base.WriteAssets(assetFolder, instance, results);
// reset firstPerson
if (instance.GetComponent<VRMFirstPerson>() is VRMFirstPerson firstPerson)
{
// TODO:
firstPerson.Reset();
}
}
protected override string WritePrefab(string assetFolder,
GameObject instance)
{
var prefabPath = base.WritePrefab(assetFolder, instance);
// PostProcess
// update prefab reference of BlendShapeClip
var prefabReference = AssetDatabase.LoadAssetAtPath<GameObject>(prefabPath);
foreach (var clip in _clips)
{
var so = new SerializedObject(clip);
so.Update();
var prop = so.FindProperty("m_prefab");
prop.objectReferenceValue = prefabReference;
so.ApplyModifiedProperties();
}
return prefabPath;
}
protected override void DialogMessage()
{
EditorGUILayout.HelpBox(Message.MESH_UTILITY.Msg(), MessageType.Info);
}
enum Message
{
[LangMsg(Languages.ja, @"(VRM-0.x専用) 凍結 > 統合 > 分割 という一連の処理を実行します。
[凍結]
- Mesh
- BlendShape Mesh
- VRM-0.x
- HumanoidAvatar
- BlendShapeClip, SpringBone, Constraint
[統合]
- MeshRenderer SkinnedMeshRenderer SkinnedMeshRenderer
- VRM FirstPerson (BOTH, FirstPerson, ThirdPerson)
- FirstPerson=AUTO
- Mesh ThirdPerson FirstPersonOnly
[分割]
- BlendShape
- BOTH, FirstPerson, ThirdPerson x 2 6Mesh 3Mesh
[Scene と Prefab]
Scene Prefab
(Scene/Runtime)
- UNDO可能
- Asset Unityを再起動すると Mesh Asset
(Prefab/Editor)
- prefab Asset
- Asset
- Undo
")]
[LangMsg(Languages.en, @"TODO
")]
MESH_UTILITY,
}
}
}