스크립트에서 자산으로 ScriptbleObject 생성

3674 단어 C#Unitytech

대강


제3자 라이브러리 도입 시 스크립타블 Object가 상속받은 자산이 자동으로 생성돼 어떤 방법으로 자산으로 보존되는지 신경 쓰여 기사에서 꺼내 들었다.

개요


ScriptalbleObject를 자산으로 저장하려면 다음 절차를 따르십시오.
  • ScriptableObject.CreateInstance<T>() 또는 ScriptableObject.CreateInstance(className)에서 Scriptable Object 인스턴스 생성
  • 객체의 Scriptable Object 컨텐트 다시 쓰기
  • (필요한 경우) 대상 저장된 디렉토리가 있는지 확인(없는 경우 생성)
  • AssetDatabase.CreateAsset(instance, fileName)에서 자산으로 보존
  • 샘플 코드


    ※ 다음 코드는 저장 대상의 파일을 항상 덮어쓰며, 덮어쓰지 않으려면 별도로 작성해야 합니다.
    SOGeneratorSample.cs
    using UnityEngine;
    using UnityEditor;
    using System.IO;
    using System.Linq;
    using System.Text.RegularExpressions;
    
    public class SOGeneratorSample
    {
        [MenuItem("MyGenerator/CreateScriptableObject")]
        private static void CreateScriptableObject()
        {
            var obj = ScriptableObject.CreateInstance<MyScriptableObject>();
            obj.hogeValue = "hogehoge";
            var fileName = $"{TypeNameToString(obj.GetType().ToString())}.asset";
            var path = "Assets/MyFiles";
            if (!Directory.Exists(path))
                Directory.CreateDirectory(path);
            AssetDatabase.CreateAsset(obj, Path.Combine(path, fileName));
        }
        
        private static string TypeNameToString(string type)
        {
            var typeParts = type.Split(new char[] { '.' });
            if (!typeParts.Any())
                return string.Empty;
    
            var words = Regex.Matches(typeParts.Last(), "(^[a-z]+|[A-Z]+(?![a-z])|[A-Z][a-z]+)")
                .OfType<Match>()
                .Select(match => match.Value)
                .ToArray();
            return string.Join(" ", words);
        }
    }
    
    MyScriptableObject.cs
    public class MyScriptableObject : ScriptableObject
    {
        [SerializeField] private string m_HogeValue = "hoge";
    
        public string hogeValue
        {
            get => m_HogeValue;
            set => m_HogeValue = value;
        }
    }
    

    실행


    메뉴에서 처리 선택

    지정된 디렉토리에 파일 생성하기

    검사기를 확인한 후 스크립트에서 지정한 내용을 반영합니다

    좋은 웹페이지 즐겨찾기