Unity3D&&TexturePacker

21071 단어 unity3d
이번 글 은 주로 다음 과 같은 내용 이 필요 합 니 다.
1. U3D 에서 코드 동적 으로 필름 을 생 성하 고 UV 좌 표를 설정 하여 그림 을 표시 합 니 다.
   만약 이 방면 을 아직 모른다 면 다른 문장 을 볼 수 있다. http://blog.csdn.net/midashao/article/details/8139109
2. C \ # 버 전의 LitJSon 라 이브 러 리 의 간단 한 사용;
   LitJSon 공식 주소: http://litjson.sourceforge.net/ ,본인 도 방금 이 팬 티 를 사 용 했 는데 제 이 슨 이 신마 인 줄 몰 랐 다 면 곡 형 과 도 모 에 게 물 어보 세 요 ~
Texture Packer 가 뭐 예요?
       cocos 2d 를 사용 한 친구 들 은 이것 에 대해 잘 알 고 있 을 것 입 니 다. (아래 의 설명 을 직접 무시 할 수 있다 는 것 을 알 게 되 었 습 니 다 ~) 모 르 더 라 도 괜 찮 습 니 다. TexturePacker 는 여러 장의 작은 그림 을 큰 그림 으로 합성 하여 그림 의 위치 정 보 를 파일 로 저장 할 수 있다 고 할 수 있 습 니 다. 그 후에 당신 이 해 야 할 일 은 바로 이 그림 의 위치 정 보 를 분석 하 는 파일 입 니 다.그리고 큰 그림 의 집합 을 결합 하여 그 중의 작은 절 도 를 나타 내 는 것 도 우리 가 다음 에 해 야 할 일이 다.
       이렇게 큰 그림 을 합성 하 는 장점 은 프로그램 이 자원 을 사용 하 는 메모 리 를 불 러 오 는 것 을 줄 일 수 있다 고 생각 합 니 다. OpenGL ES 의 모든 스티커 는 2 의 n 제곱 으로 설정 해 야 사용 할 수 있 기 때 문 입 니 다.예 를 들 어 너비 가 100 x100 이 고 너비 가 10x 10 인 그림 이 있 습 니 다. 스티커 를 합성 하지 않 으 면 128 x128 과 16x 16 의 두 장의 그림 (각각 2 의 7 차방 과 2 의 4 차방) 을 사용 해 야 합 니 다. 그러나 큰 그림 을 사용 하면 100 x100 과 10x 10 의 그림 을 128 x128 의 큰 그림 에 넣 으 면 한 장의 그림 을 사용 할 수 있 습 니 다.
 
Unity3D&&TexturePacker_第1张图片
이와 같은 큰 스티커 는 많은 작은 그림 을 합성 한 것 으로 실제 사용 할 때 그 중의 한 장의 스티커 만 표시 된다.
 
TexturePacker 홈 페이지: http://www.codeandweb.com/texturepacker 무료 로 사용 할 수 있 습 니 다. 다만 유 료 버 전 없 이 최종 적 으로 그림 을 내 보 낼 때 무 작위 로 그림 에 워 터 마크 를 추가 합 니 다.
TexturePacker 의 사용 에 대해 간단히 말씀 드 리 겠 습 니 다.
Unity3D&&TexturePacker_第2张图片
소프트웨어 가 열 리 면 대개 화면 이 위의 그림 과 같 습 니 다. 합성 해 야 할 그림 을 오른쪽 에 있 는 Sprites 패 널 에 끌 어 다 놓 으 면 자동 으로 정렬 되 고 효 과 를 중간 에 표시 합 니 다.
위의 그림 왼쪽 에 빨간색 동그라미 로 나 온 속성 을 간단히 설명 하 겠 습 니 다.
Data Format 내 보 낼 데이터 형식 입 니 다. 드 롭 다운 상자 아래 cocos 2d, libgdx, Unity3d 등 이 있 습 니 다.
이 글 은 JSON - ARRAY 를 선택 하 였 습 니 다.
Data file 이것 은 그림 집합 정보 파일 을 내 보 내 서 저장 하 는 디 렉 터 리 입 니 다. 그 다음 에 이 파일 을 분석 해 야 합 니 다. 이 옵션 의 오른쪽 단 추 를 누 르 면 저 장 된 디 렉 터 리 를 선택 할 수 있 습 니 다. 디 렉 터 리 를 설정 하면 Texture file 옵션 도 해당 디 렉 터 리 파일 을 자동 으로 채 웁 니 다.
Image format 이것 은 스티커 그림 집합 을 내 보 내 는 인 코딩 형식 을 설정 합 니 다. 이것 은 자신의 구체 적 인 수요 설정 을 보십시오.
두 번 째 빨간색 상자
Border padding 은 그림 사이 의 간격 을 설정 하 는 것 입 니 다. 이것 은 매우 유용 합 니 다. 0 이면 되 지만 잘 라 낸 그림 의 가장자리 가 다른 그림 으로 잘 릴 수 있 기 때문에 보통 값 을 설정 해 야 합 니 다.
Allow rotation 체크 상 자 는 스티커 집합 에서 회전 할 수 있 는 지 설정 하 는 것 입 니 다. 보통 체크 하 십시오. 이렇게 하면 공간 을 이용 할 수 있 습 니 다.
Trim 체크 상 자 는 작은 그림 의 나머지 부분 을 자동 으로 제거 할 지 여부 입 니 다.다음 그림 에서 체크 하면 왼쪽 그림 에서 오른쪽 그림 까지 의 효과 이 고 가장자리 의 투명 한 부분 을 없 애 면 자원 을 크게 절약 할 수 있다.
Unity3D&&TexturePacker_第3张图片
설정 한 후 도구 모음 의 Publish 단 추 를 누 르 면 내 보 낼 수 있 습 니 다. 내 보 낸 디 렉 터 리 는 Data file 을 설정 한 디 렉 터 리 입 니 다.무료 버 전이 내 보 낸 큰 그림 에 워 터 마크 가 있다 면 정상 입 니 다.
내 보 내기 에 성공 하면 해당 디 렉 터 리 에서 스티커 집합 과 파일 형식 을 찾 을 수 있 습 니 다.본문 에서 내 보 낸 형식 은 다음 과 같다.
Unity3D&&TexturePacker_第4张图片
LitJSon 라 이브 러 리 로 해석 하려 고 하기 때문에 당연히 JSon 의 데이터 구 조 를 내 보 냅 니 다.
다른 일부 속성 도 큰 그림 의 내 보 내기 속성 을 설정 하고 괴 롭 히 는 것 을 좋아 하면 놀 수 있 습 니 다.
여기 에는 외국인 을 번역 하 는 글 도 있 습 니 다. TexturePacker 의 사용 을 더욱 상세 하 게 소개 하고 관심 이 있 으 면 읽 을 수 있 습 니 다.
http://www.cnblogs.com/andyque/articles/1988097.html ~
내 보 낸 제 이 슨 구 조 를 보 세 요 ~
    {"frames": [  
      
    {  
        "filename": "op_01.png",  
        "frame": {"x":2,"y":304,"w":300,"h":429},  
        "rotated": true,  
        "trimmed": false,  
        "spriteSourceSize": {"x":0,"y":0,"w":300,"h":429},  
        "sourceSize": {"w":300,"h":429}  
    },  
    {  
        "filename": "op_02.png",  
        "frame": {"x":433,"y":2,"w":300,"h":429},  
        "rotated": true,  
        "trimmed": false,  
        "spriteSourceSize": {"x":0,"y":0,"w":300,"h":429},  
        "sourceSize": {"w":300,"h":429}  
    }]  
    }  

 
여기에 텍스트 편집 기 를 추천 합 니 다 ~ 개인 적 으로 수첩 이나 UltraEdit 보다 더 좋 고 무료 입 니 다 ~
Notepad++
http://notepad-plus-plus.org/
공간 을 절약 하기 위해 서 다른 부분 은 붙 이지 않 는 다.구 조 를 보면 파일 에 파일 의 이름 이 저장 되 어 있 고 파일 이 큰 그림 에 붙 어 있 는 오프셋 과 크기 를 알 수 있 습 니 다.
여기 서 대표 적 인 정 보 를 대충 설명 하 겠 습 니 다.
filename: 원본 파일 이름;frame:    그림 이 큰 그림 에서 의 오프셋 위치 (왼쪽 상단 은 원점) 와 크기 (회전 하지 않 기 전) 이 그림 의 크기 는 그림 이 회전 하지 않 기 전의 크기 입 니 다.rotated:  회전 할 지 여부 (시계 방향 으로);trimmed:  주위 의 남 은 투명 부분 을 제거 하 였 습 니까?spriteSourceSize: x, y 는 그림 이 주위 의 투명 한 부분의 오프셋 을 제거 하지 않 았 음 을 나타 낸다. 이것 은 그림 의 원래 크기 를 복원 하려 면 사용 해 야 하 는 것 이다.sourceSize: 그림 의 원본 크기, 투명 한 부분 포함;
 
LitJSon 으로 내 보 낸 JSon 구 조 를 해석 합 니 다.
~ LitJSon 라 이브 러 리 가 있 습 니 다. 해석 이 간단 합 니 다. 대략 절 차 는 다음 과 같 습 니 다.
 
1. 내 려 받 은 LitJSon 라 이브 러 리 원본 을 U3D 프로젝트 Assets / plugins 폴 더 에 몇 개의 원본 파일 을 저장 합 니 다.
저 는 Plugins 폴 더 에 LitJSon 폴 더 를 넣 어서 안에 넣 으 면 선명 해 보 여요 ~
Unity3D&&TexturePacker_第5张图片
다음은 바로 코드 를 올 려 주세요 ~ 팬티 가 있어 서 해석 이 간단 하고. net 자체 분석 xml 보다 간단 합 니 다 ~
PS: LitJSon 의 네 임 스페이스 가 인용 되 지 않 으 면 MonoDevelop 편집기 에서 오른쪽 단 추 를 누 르 면 프로젝트 Editor References.. 옵션 을 선택 하고 팝 업 된 선택 대화 상자 에서 xxxx - xxx - first pass 와 유사 한 항목 이름 을 선택 하 십시오. Plugins 폴 더 에 놓 인 코드 는 다른 항목 에 있 고 Ediotr 폴 더 도 있 기 때문에 본 고의 범위 에 속 하지 않 습 니 다.
다음 그림:
Unity3D&&TexturePacker_第6张图片
코드 는 다음 과 같 습 니 다:
    using UnityEngine;  
    using System.Collections;  
    using System.Collections.Generic;  
    using LitJson;  
      
    /// <summary>  
    ///     ,    xy     
    /// </summary>  
    public class EFrame {  
        //        //  
        public int x, y;  
          
        //       //  
        public int width, height;  
      
        public EFrame(JsonData jsonData) {  
            x = (int)jsonData["x"];  
            y = (int)jsonData["y"];  
            width = (int)jsonData["w"];  
            height = (int)jsonData["h"];  
        }  
    }  
      
    public class ESpriteFrameInfo {  
        //      //  
        public string filename;  
        //      //  
        public EFrame frame;  
        //      //  
        public bool isRotate;  
    }  
      
    public class ESpriteUtility {  
          
        public static List<ESpriteFrameInfo> analysisTexturePacker(TextAsset txtAsset){  
              
            List<ESpriteFrameInfo> readResult = new List<ESpriteFrameInfo>();  
              
            JsonData rootJsonData = JsonMapper.ToObject(txtAsset.text);  
              
            JsonData framesData = rootJsonData["frames"];  
              
            int framesCount = framesData.Count;  
            for(int i = 0 ; i < framesCount; i++){  
                JsonData frame = framesData[i];  
                ESpriteFrameInfo frameInfo = new ESpriteFrameInfo();  
                frameInfo.filename = (string)frame["filename"];  
                frameInfo.isRotate = (bool)frame["rotated"];  
                frameInfo.frame = new EFrame(frame["frame"]);  
                readResult.Add(frameInfo);            
                  
            }  
            Debug.Log("analysis Done!");  
            return readResult;  
        }  
    }  

이것 은 도구 류 일 뿐 입 니 다. 구체 적 으로 사용 하려 면 스 크 립 트 를 써 야 합 니 다. TexturePacker 에서 내 보 낸 데이터 형식 을 끌 어 다 놓 고 analysis TexturePacker 방법 에 전달 해 야 합 니 다. 마지막 으로 콘 솔 에서 analysis Done 을 인쇄 하 는 것 을 보 았 습 니 다!설명 해석 이 완료 되 었 습 니 다 ~ 여 기 는 그림 에 표 시 된 부분 만 표시 하 는 데 사 용 됩 니 다. 그림 주변의 투명 성 실현 에 대해 본 글 은 처리 되 지 않 았 습 니 다 ~
호출 된 코드 입 니 다. 간단 합 니 다 ~
 
    using UnityEngine;  
    using System.Collections;  
      
    public class TestScript : MonoBehaviour {  
          
        public TextAsset spriteData;  
          
      
        // Use this for initialization  
        void Start () {  
              
      
            ESpriteUtility.analysisTexturePacker(spriteData);  
          
        }  
          
        // Update is called once per frame  
        void Update () {  
          
        }  
    }  

이 스 크 립 트 를 GameObject 에 마음대로 끌 어 다 놓 고 TexturePacker 에서 내 보 낸 데이터 형식 을 spriteData 에 끌 어 다 놓 으 면 됩 니 다.TexturePacker 에서 내 보 낸 데이터 형식의 확장 자 를. txt 로 변경 해 야 합 니 다 ~

좋은 웹페이지 즐겨찾기