Tag Archives: unity

[Unity3D] UGUI 아틀라스에서 Sprite 파일 분리하기

이미 합쳐져 있는 UGUI용 Atlas File 에서 Sprite 를 분리하는 방법

Atlas 의  Texture로 부터
Sprite 영역만큼 Pixel 값을 가져와
새로운 Texture에 입히고 
파일로 저장하면 됩니다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEditor;

public class AtlasLoader
{
    public Dictionary<string, Sprite> spriteDic = new Dictionary<string, Sprite>();

    public AtlasLoader()
    {

    }

    public AtlasLoader(string spriteBaseName)
    {
        loadSprite(spriteBaseName);
    }

    //Loads the provided sprites
    public void loadSprite(string spriteBaseName)
    {
        Sprite[] allSprites =  Resources.LoadAll<Sprite>(spriteBaseName);
        if (allSprites == null || allSprites.Length <= 0)
        {
            Debug.LogError("The Provided Base-Atlas Sprite `" + spriteBaseName + "` does not exist!");
            return;
        }

        for (int i = 0; i < allSprites.Length; i++)
        {
            spriteDic.Add(allSprites[i].name, allSprites[i]);
            MakeFile(allSprites[i]);
        }
    }

    void MakeFile(Sprite sprite)
    {
        try
        {
            Debug.Log(string.Format("{0} : {1}", sprite.name, sprite.rect.ToString()));
            Rect rect = sprite.rect; //분리할 스프라이트의 시작 좌표와 사이즈
            Texture2D mainTex = sprite.texture; //스프라이트의 메인 텍스쳐를 가져옴
            //새로 만들어질 텍스쳐, sprite.texture.format 이건 메인 텍스쳐의 포맷을 그대로 사용
            Texture2D tex = new Texture2D((int)rect.width, (int)rect.height, sprite.texture.format, false); 
            //메인 텍스쳐에서 스프라이트의 영역 만큼 픽셀 값을 가져옴
            Color[] c = mainTex.GetPixels((int)rect.x, (int)rect.y, (int)rect.width, (int)rect.height);
            tex.SetPixels(c);// 새 텍스쳐에 픽셀값을 입힘
            tex.Apply(); // 적용
            var bytes = tex.EncodeToPNG(); // PNG byte로 형태로 만듬. JPG는 EncodeToJPG 사용 
            string savePath = string.Format("{0}/{1}.png", Application.persistentDataPath, sprite.name); //저장할 파일 위치
            Object.DestroyImmediate(tex, true); //새텍스쳐는 쓸일이 없으므로 삭제
            System.IO.File.WriteAllBytes(savePath, bytes); //파일로 쓰기
            Debug.Log("MakeFile : " + sprite.name);
        }
        catch (System.Exception ex)
        {

        }

    }
}

#Split_sprite_file_from_UGUI_atlas_file. 

[Unity3D] Timer – InvokeRepeating

유니티에서 간단하게 타이머를 구현하는 방법을 알아보겠습니다.

유니티의 Monobehavior 가 제공하는 함수들 중에

InvokeReapeating 이라는 것이 있는데

이것을 이용하면 간단하게 타이머를 만들 수 있습니다.

 

 private void StartTimer()
    {
        TimeOutCount = 30;
        InvokeRepeating("CountDown", 1f, 1f);
    }

    void CountDown()
    {
        TimeOutCount--;
        Debug.Log("Timer : " + TimeOutCount);
        if (TimeOutCount < 1)   
        {
            //할일
            CancelInvoke();
        }

    }


InvokeRepeating(실행할 함수명, 시간(초/float), 반복횟수(0은 무한대))

입니다.

[Unity3D] JSONObject 다운로드 & 사용법

이전 포스팅에서 언급한 더 간단한 Json 라이브러리인 JSONObject 사용법에 대해 알아보자.

우선 다운로드는 에셋스토어에서 Json Object 로 검색해 설치해도 되고
JSONObject wiki (http://wiki.unity3d.com/index.php/JSONObject#Download) 에서 다운로드 받을 수 있다.

다운 받아 압축풀고 Assets 폴더에 넣으면 설치는 끝.

문법

 

//1. Json string 을 JsonObject 로 변환
        JSONObject obj = new JSONObject(response.Text);
//2.JsonObject 를 Dictionary 로 변환
        Dictionary<string, string> dic = obj.ToDictionary();

// 3.빈 JsonObject 생성
        JSONObject j = new JSONObject(JSONObject.Type.OBJECT);
//4.항목추가
        j.AddField("field1", "sampletext");
//5.array 만들기
        JSONObject arr = new JSONObject(JSONObject.Type.ARRAY);
        j.AddField("field2", arr);
        arr.Add(1);
        arr.Add(2);
        arr.Add(3);
//6.항목 삭제
        j.RemoveField("field1");
//7.JsonObject 을 Json 문자열로 변환
        string encodedString = j.Print();

 

끝.

 

더 간단하다.

 

간단해서 마음에 든다  ㅎㅎ;;

[Unity3D] JsonFX 다운로드 & 사용법

 

Unity3D 에서 사용할 수 있는 Json 라이브러리 중 JsonFX 의 간단한 사용법.

우선 공식 사이트는 www.jsonfx.net  이다.

첨부된 파일을 다운 받아 Assets 내에 Plugins 폴더에 넣으면 자동으로 import 된다.

 

[ 다운로드 : JsonFx.zip ]

(이 dll 파일 구하기가 왜이리 어려운건지;;; 겨우 찾아냄..;;; )

문법

– Object 를 Json String 형태로 변환

string jsonString = JsonFx.Json.JsonWriter.Serialize(OBJECT);

 

– Json String 을 Object 로 변환

MyData data = JsonFx.Json.JsonReader.Deserialize<MyData>(jsonStr);

끝.

진짜 간단하고 강력하다. -_- b

사실 더 간단한 JsonObject 라는 녀석이 있는데 그건 다음 포스팅에서 알아본다.