using System;
using UnityEngine;
namespace VRM
{
[Serializable]
public struct BlendShapeBinding
{
public String RelativePath;
public int Index;
public float Weight;
public override string ToString()
{
return string.Format("{0}[{1}]=>{2}", RelativePath, Index, Weight);
}
}
[Serializable]
public struct MaterialValueBinding
{
public String MaterialName;
public String ValueName;
public Vector4 TargetValue;
public Vector4 BaseValue;
}
[CreateAssetMenu(menuName = "VRM/BlendShapeClip")]
public class BlendShapeClip : ScriptableObject
{
#if UNITY_EDITOR
///
/// Preview 用のObject参照
///
[SerializeField]
GameObject m_prefab;
public GameObject Prefab
{
set { m_prefab = value; }
get
{
if (m_prefab == null)
{
var assetPath = UnityEditor.AssetDatabase.GetAssetPath(this);
if (!string.IsNullOrEmpty(assetPath))
{
// if asset is subasset of prefab
m_prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(assetPath);
if (m_prefab == null)
{
var parent = UniGLTF.UnityPath.FromAsset(this).Parent;
var prefabPath = parent.Parent.Child(parent.FileNameWithoutExtension + ".prefab");
m_prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(prefabPath.Value);
}
}
}
return m_prefab;
}
}
#endif
///
/// BlendShapePresetがUnknown場合の識別子
///
[SerializeField]
public string BlendShapeName = "";
///
/// BlendShapePresetを識別する。Unknownの場合は、BlendShapeNameで識別する
///
[SerializeField]
public BlendShapePreset Preset;
///
/// BlendShapeに対する参照(indexベース)
///
///
[SerializeField]
public BlendShapeBinding[] Values = new BlendShapeBinding[] { };
///
/// マテリアルに対する参照(名前ベース)
///
///
[SerializeField]
public MaterialValueBinding[] MaterialValues = new MaterialValueBinding[] { };
///
/// UniVRM-0.45: trueの場合、このBlendShapeClipは0と1の間の中間値を取らない。四捨五入する
///
[SerializeField]
public bool IsBinary;
}
}