BITKit/Packages/Runtime~/Unity/Scripts/Reference/AssetableReference.cs

51 lines
1.7 KiB
C#

using System.Collections;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
#endif
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.UIElements;
namespace BITKit
{
[System.Serializable]
public record UnityReference : IReference
{
[SerializeField] internal int index;
private AssetableReference asset;
public string Get()
{
asset ??= Addressables.LoadAssetAsync<AssetableReference>(nameof(AssetableReference)).WaitForCompletion();
return asset.Get(index);
}
internal void Set(int _index) => index = _index;
}
public class AssetableReference:ScriptableObject
{
[SerializeField]
private List<string> values;
internal string Get(int index) => values[index];
}
#if UNITY_EDITOR
[CustomPropertyDrawer(typeof(UnityReference))]
public class UnityReferenceInspector :PropertyDrawer
{
public override VisualElement CreatePropertyGUI(SerializedProperty property)
{
var index = property.FindPropertyRelative(nameof(UnityReference.index)).intValue;
return new Label(index.ToString());
}
public override void OnGUI(Rect position, SerializedProperty property, GUIContent label)
{
var index = property.FindPropertyRelative(nameof(UnityReference.index)).intValue;
//var unityReference = property.serializedObject.targetObject.GetType().GetField(property.name).GetValue(property.serializedObject) as UnityReference;
EditorGUI.DrawRect(position,Color.gray);
//EditorGUI.LabelField(position,new GUIContent(unityReference.index.T
}
}
#endif
}