[Unity3D] #1 - Probuilder | 폴리 색상 변경

qweasfjbv·2024년 6월 27일

Unity3D

목록 보기
1/7
post-thumbnail

개요


Unity3D를 사용한 간단한 퍼즐 게임을 만들어보겠습니다.
제가 생각하는 게임을 만들기 위해서는 정육면체의 각 면의 색을 바꿀 수 있어야 합니다.
따라서, 유니티 프로빌더를 사용해서 각 폴리의 색상을 바꾸는 것 부터 시작해보겠습니다.

구현


우선, 프로빌더를 통해 큐브를 만들어주고 각 면을 전부 합쳐 하나의 면으로 만듭니다.
또한 간단한 머터리얼을 만들어 큐브의 모서리를 그려줍니다.

이제 스크립트를 통해 각 면의 색을 변경해 보겠습니다.

BoxColorController

    private void Start()
    {
        pbMesh = GetComponent<ProBuilderMesh>();

        if (pbMesh == null)
        {
            Debug.Log("No Probuilder Mesh on Obj"); return;
        }

        faces = pbMesh.faces.ToArray();

    }

위와같이 각 면에 대한 참조를 배열의 형태로 받을 수 있습니다.
하지만, 저는 몇 번째 인덱스가 어느 면을 가리키는지 알 수 없습니다.

public enum BoxDir { FORWARD = 0, BOTTOM, BACK, TOP, LEFT, RIGHT }

    // Order : Top, Back, Right, Forward, Left, Bottom 
    private int DirToFaceIdx(BoxDir dir) => dir switch
    {
        BoxDir.TOP => 0,
        BoxDir.BACK => 1,
        BoxDir.RIGHT => 2,
        BoxDir.FORWARD => 3,
        BoxDir.LEFT => 4,
        BoxDir.BOTTOM => 5,
        _ => -1
    };

원하는 방향을 넣으면 알맞은 인덱스를 반환하는 함수를 따로 만들어줍니다.

그 후에 원하는 방향과 색상을 입력으로 받는 함수를 만듭니다.

    public void SetBoxColor(BoxDir dir, Color color)
    {
        int idx = DirToFaceIdx(dir);

        boxColorSet[(int)dir].SetColor(color);
        pbMesh.SetFaceColor(faces[idx], color);
        pbMesh.ToMesh();
        pbMesh.Refresh();
        pbMesh.Optimize();

    }

색상을 적용시키기 위해 ToMesh, Refresh, Optimize 를 차례대로 호출합니다.

여기까지 한번 테스트 해보겠습니다.

    private void Update()
    {
        // For Test
        if (Input.GetKeyDown(KeyCode.Space))
        {
            SetBoxColor(BoxDir.BACK, Color.red);
        }
    }

마무리


위 영상을 보시면 다른 곳은 색이 바뀌지 않고, 뒤쪽 부분만 빨간색으로 바뀌는 것을 볼 수 있습니다.
이처럼 프로빌더를 사용하면 각 폴리에 원하는 색상을 부여할 수 있습니다.

다음에는 간단하게 맵을 만들고 카메라를 쿼터뷰로 설정해보겠습니다.

참고자료


https://docs.unity3d.com/Packages/com.unity.probuilder@4.2/api/UnityEngine.ProBuilder.ProBuilderMesh.html

0개의 댓글