[Unity] 특정dir 이하의 파일을 통일적으로 연결하는 식단[Editor 확장]

6427 단어 UnityC#

Unity에서 Object를 연결하는 것은 매우 번거롭다


특정 Object에서 이미지 또는 prefab을 사용하는 경우
Resources.Load, AsseetBund 등 다양한 방법이 있어요.
여러 가지 이유로'아직 쓸 수 없다'는 경우도 있다.
신지현: 앞으로도 AssetBundle...같은거?
아무튼 빨리 움직이게 놔두고... 이렇게 미리 퍼블릭을 만들면...
[창의]: 이미지가 추가되었습니다.
[시스템]: 네.
[시스템]: (그럼... 링크를 업데이트하시겠습니까...)

이렇게 되다니.

이럴 땐 이걸로!


버튼을 눌러서 같이 넣으면 좋잖아!
Inspector에서 버튼 만들기
(Unity Inspector에서 버튼 만들기 이거 참조)
GameImgHolder.cs
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
#if UNITY_EDITOR
using UnityEditor;
using System.Linq;
#endif

public class GameImgHolder : MonoBehaviour {

    public List<Sprite> imgList;

#if UNITY_EDITOR
    [Button("SetupImg" , "Setup Image")]
    public int SetupImgButton;

    void SetupImg(){

        // path , imgdir
        string prefabPath = "Assets/Prefab/GameManager.prefab";
        string imgDir = "Assets/Images/Test";

        GameManager gm = AssetDatabase.LoadAssetAtPath(prefabPath , typeof(GameManager)) as GameManager;
        GameImgHolder imgHolder = gm.GetComponent<GameImgHolder>();

        // 各ファイルパス GUIDからを重複しないように取得
        var guids = AssetDatabase.FindAssets("" , new string[]{imgDir});
        var pathList = guids.ToList().Select(guid => AssetDatabase.GUIDToAssetPath(guid)).Distinct();

        // sprite load
        var sprites = pathList.Select(path => AssetDatabase.LoadAssetAtPath(path , typeof(Sprite)) as Sprite);
        imgHolder.imgList = sprites.ToList();

        // 変更があったことをUnityに知らせる必要があり、
        // そのため、このオブジェクトのダーティフラグをセットする
        EditorUtility.SetDirty(gm);
        AssetDatabase.SaveAssets();

        // // Hierarchy上に配置されているオブジェクトにも反映
        PrefabUtility.RevertPrefabInstance(GameManager.Instance.gameObject); 

#endif
}

이렇게 사용 가능합니다.



이 예는 스피릿이 만든 거예요.
TextAsset이든 Prefab(GameObject)이든 뭐든 할 수 있어 편리하다.
스스로 누를 수도 있고 창의적인 쪽에서 누를 수도 있다.
(충돌 조심!)

좋은 웹페이지 즐겨찾기