레이블이 SPUM인 게시물을 표시합니다. 모든 게시물 표시
레이블이 SPUM인 게시물을 표시합니다. 모든 게시물 표시

2024년 12월 31일 화요일

SPUM 사용법 정리


SPUM 

 SPUM 은 Unity 에서 사용하는 2D 픽셀 디자인의 캐릭터를 생성할 수 있도록 도움을 주는 캐릭터 생성기 에셋입니다.

홈페이지는 2D Pixel Unit Maker - SPUM | 2D Characters | Unity Asset Store 오랜만에 사용하려고 했더니 Documentation 페이지 링크가 깨져 있네요.

GitHub에서 사용법을 찾긴했는데 Home ko KR · soonsoon2/SPUM Wiki 문서가 구버전 문서라(오늘 날짜 기준, 개발자분이 미래에는 업데이트 했을 수도 있습니다.) 현재 버전과 내용이 맞지 않습니다. 개발자쪽에서 문서도 부지런히 버전업을 해야 할것 같은데... ㅡㅡ;;;

개인적으로 사용하면서 문서가 정리가 안되어 있는 듯 싶어서 사용에 필요한 부분만 정리해 보았습니다.

먼저 캐릭터를 만드는건 예전 문서를 보아도 충분히 사용이 가능합니다.

Assets>SPUM>Scene>SPUM_Scene 를 열어서 캐릭터를 생성하면 됩니다. 이건 누구나 쉽게 할 수 있어서 패스...


177 버전이고 Unity 6에서 사용하는 중인데

Random color check시  동작이 제대로 동작이 안되는 문제가 있습니다.





색상 버튼을 한번 눌러주면 정상 반영됩니다.

SAVE UNIT 버튼을 눌러 저장을 하면 Assets>SPUM>Resources>Units 폴더 아래에 저장이 됩니다.

사용하기

이제 불러내는 방법을 배우기 위해서는 Sample Scene를 열어봅니다.

Assets>SPUM>Sample>Scene>Sample 입니다.

지금까지 저장했던 모든 Unit들이 보여집니다. 기본 2개 포함

그런데 기본 2개는 뭔가 오류가 계속 발생합니다. ㅡㅡ. 


(기존 생성된 2개에서 오류가 발생한 것이라) 나머지 생성된것을 사용하면 되니까 오류는 무시해 줍니다. 

구조를 살펴보면 PlayObject 아래 PlayerObject가 있습니다. PlayObject는 Scale이 5임을 참고해서 실제 prefab에서 가져오면 scale을 조정하도록 해야 합니다.



그리고 PlayerManager에서 Assets>SPUM>Resources>Units 여기 폴더를 보고 해당 위치에 있는 모든 Units들을 보여주는 형태라(PlayerManager 소스 코드에서는 GetPlayerList() ) 만약 개인적인 프로젝트에서 사용하려면 Prefab을 복사해서 drag drop 형태로 사용하면 되는데 상위에 Object를 하나 만들고 그 아래에 Unit을 배치하도록 합니다.

여기 예제에서는 SamplePlayer prefab에 SPUM Unit을 부착하게 되는데,

SamplePlayer prefab에는 collider 2d와 rigidbody2d가 기본으로 있는 prefab입니다.

그리고 PlayerObj도 있는데 여기에 SPUM 기본 처리를 위한 부분들이 있어서 수동으로 Prefab을 꺼낼때 추가해주는것이 좋습니다.

그래서 개인 프로젝트에서 사용할때는 SamplePlayer 를 꺼내주고 그 아래에 SPUM 자식으로 넣어주고 Prefebs에 SPUM 연결해주면 됩니다.




넣은 SPUM object의 RectTransform은 Reset해주도록 합니다.

이러면 기본적인 동작 자체는 잘됩니다. 이동하는 것은 기존 object처럼 움직이면 됩니다.
애니메이션관련해서는 아래와 같은 코드를 이용하면 쉽게 사용이 가능합니다.

PlayerObj.cs 파일의 Update() 함수에 테스트를 위해서 일부를 추가 하였습니다. 마우스 왼쪽 버튼을 누르면 동작하는 코드입니다.
    void Update()
    {
        if(isAction) return;
        // 추가한 코드 ----
        if(Input.GetMouseButtonDown(0)){
            SetStateAnimationIndex(PlayerState.ATTACK, 5);
            PlayStateAnimation(PlayerState.ATTACK);
        }
        // 추가한 코드 ----

        transform.position = new Vector3(transform.position.x,transform.position.y,transform.localPosition.y * 0.01f);
        switch(_currentState)
        {
            case PlayerState.IDLE:
           
            break;

            case PlayerState.MOVE:
            DoMove();
            break;
        }
        PlayStateAnimation(_currentState);

    }

추가한 코드를 살펴보면 PlayStateAnimation은 공격인지 idle 동작인지를 선택하는 함수이고, SetStateAnimationIndex함수는 공격이라면 세부 항목을 선택하는 함수입니다. 공격의 경우 여러 모션이 있기 때문에 순번을 선택하는 것입니다.

SPUM 아래 ATTACK_List 살펴보면 아래와 같은 6개 리스트가 있음을 알 수 있습니다.


요약

지금까지 내용을 요약 하자면 아래와 같습니다.

1. Assets>SPUM>Scene>SPUM_Scene 를 열어서 캐릭터를 생성

2. SamplePlayer Prefab 꺼내고 아래에 SPUM Unit을 자식으로 만들고 붙여줍니다. RectTransform Reset 필요

3. Scale 맞춰 줍니다.

4. PlayerObj.cs base로 SamplePlayer Prefab 추가 수정 필요

5. 이동은 기존 Object와 동일 Animation 은 SetStateAnimationIndex, PlayStateAnimation 사용합니다.


추가 업데이트

실제 사용하다보니 Object 뒤로 가림 문제가 있네요. Sprite Renderer 의 Order in Layer 숫자를 조절을 해야하는데, Unit은 여러개의 파츠로 나뉘어 있다보니 조정하기 쉽지 않습니다.

SPUM Unit 아래에 UnitMain 자식이 있는데요.  여기 보면 Sorting Group 이라는 컴포넌트가 있습니다. 여기 있는 Order in layer를 조절하면 됩니다.

반영전 : 기본값 5


200으로 반영 후 (이건 프로젝트 마다 적절한 값을 조절 필요) 수정 후 건물 보다 앞으로 나왔습니다.