using UniGLTF;
using UnityEngine;
namespace UniVRM10
{
///
/// ScriptableObject なのだけど Editor では、ヒエラルキーを参照したい。
/// 参照して、ヒエラルキー内の Renderer を選択したりしたい。
///
/// そういうオブジェクト。
///
public class PrefabRelatedScriptableObject : 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) return m_prefab;
// 同じフォルダに prefab が居る
var parent = UnityPath.FromUnityPath(assetPath).Parent;
var prefabPath = parent.Parent.Child(parent.FileNameWithoutExtension + ".prefab");
m_prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(prefabPath.Value);
if (m_prefab != null) return m_prefab;
// 同じフォルダに vrm(ScriptedImporter) が居る
var parentParent = UnityPath.FromUnityPath(assetPath).Parent.Parent;
var vrmPath = parent.Parent.Child(parent.FileNameWithoutExtension + ".vrm");
m_prefab = UnityEditor.AssetDatabase.LoadAssetAtPath(vrmPath.Value);
if (m_prefab != null) return m_prefab;
}
}
return m_prefab;
}
}
#endif
}
}