스크립트에서 자산으로 ScriptbleObject 생성
대강
제3자 라이브러리 도입 시 스크립타블 Object가 상속받은 자산이 자동으로 생성돼 어떤 방법으로 자산으로 보존되는지 신경 쓰여 기사에서 꺼내 들었다.
개요
ScriptalbleObject를 자산으로 저장하려면 다음 절차를 따르십시오.
ScriptableObject.CreateInstance<T>()
또는 ScriptableObject.CreateInstance(className)
에서 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.cspublic class MyScriptableObject : ScriptableObject
{
[SerializeField] private string m_HogeValue = "hoge";
public string hogeValue
{
get => m_HogeValue;
set => m_HogeValue = value;
}
}
실행
메뉴에서 처리 선택
지정된 디렉토리에 파일 생성하기
검사기를 확인한 후 스크립트에서 지정한 내용을 반영합니다
Reference
이 문제에 관하여(스크립트에서 자산으로 ScriptbleObject 생성), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/blkcatman/articles/e1a735cd88d1e6텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)