midas+son의 크리에이티브(creative) 이야기

요청이 있어서 올려봅니다.


올해 6월 달에 올렸던 포트폴리오 마리오 런 게임을 보고 

타이틀 화면에서 배경이 무한으로 반복되는 것을 어떻게 했는지

궁금 하다고 하셔서 설명 드리겠습니다.


일단 이해를 돕기 위해 막 찍은 아래의 영상을 한번 봐주세요.


1. Image를 하나 Canvas에 만들어 둔다.(uGui 기준)

2. 스크립트로 게임이 실행되면 위의 Image를 복사한다.(그냥 2개 만들어서 써도 되지만 조금이라도 메모리 고려)

3. 원본을 먼저 움직이고자 하는 방향으로 무브. 이때는 하나만 움직인다.

4. 원본이 움직이다가 하나가지고 화면을 커버를 못하면 복사본을 그 뒤에 이어 붙인다.

5. 원본이 더이상 움직일 필요가 없어지면 원본과 복사본을 스왑한다.

6. 3~5가 반복 된다.


위 글로 이해가 잘 안되면 아래의 소스를 봐보세요. (C# 으로 짠 스크립트)

   //배경 루프 함수

   void LoopBackGroundImage()   

    {

        //배경 이미지가 움직여야 될 위치

        float x = backImage.rectTransform.position.x + backMoveSpeed * Time.deltaTime;


        //x위치 검사

        if (x >= backImage.rectTransform.sizeDelta.x)

        {

            //원본 이동 - 남는 부분이 있음

            backImage.rectTransform.position = new Vector3(x, backImage.rectTransform.position.y, 0);

            //남는 부분은 복사본이 영역을 차지하여 이동

            backImageClone.rectTransform.position = new Vector3(x - backImage.rectTransform.sizeDelta.x, backImage.rectTransform.position.y, 0);

        }

        else

        {

            //첫장만 이동

            backImage.rectTransform.position = new Vector3(x, backImage.rectTransform.position.y, 0);

        }


        //원본이 모두 이동하고 더이상 비쳐지지 않을때

        //복사본과 원본을 서로 교체

        if (x - Screen.width >= backImage.rectTransform.sizeDelta.x)

        {

            tempBackImage = backImage;

            backImage = backImageClone;

            backImageClone = tempBackImage;

            backImage.rectTransform.position = new Vector2(Screen.width, backImage.rectTransform.position.y);

        }

    }


그렇게 어려운 건 아닙니다.

어렵다 느낀다면 이제 막 Unity를 배워서 익숙해 지지 않은거지요.


그리고 위에 벡터 쓸 때 Vector3쓰다가 Vector2 쓴거도 있는데 오류 아니라 되는 겁니다.

특별한 의미 없습니다. z를 안바꾸면 저렇게도 써도 돼요.


또 다른 거 얘기 해보자면

new를 안하고 미리 만들어둔거 하나 가지고 쓰는게 좋습니다. 

이건 나중에 자세히 알아보겠습니다.