2023년 10월 4일 수요일

Line Animation

 게임을 만들다 보면 움직이는 선이 필요할 경우가 있습니다. 이런 상황처럼 말이죠.


이 동영상에도 방법이 자세하게 나와 있지만, 간단하게 다시한번 정리하겠습니다. 여기서는 SOS 신호가 전해지는 모습을 구현해보도록 하겠습니다.

가장 먼저 이 SOS라인을 만들 패턴을 만들어야겠죠. 이와 같은 SOS라인들을 만들었습니다.


이 패턴을 6개로 잘라 쓰면 되는데, 버전문제인지 Material에서는 유니티에서 스플릿한 스프라이트를 적용할 수 없더군요. 어쩔 수 없이 이렇게 일일이 잘라놓습니다1).


다음에는 line을 만들어야겠죠. Effect → Line으로 Line오브젝트를 하나 만들고 적당한 길이로 늘입니다. Line이란 것은 나중에 필요할때 시작점과 끝점을 지정해야 하므로 여기서는 아무렇게나 늘여도 됩니다.

이 line에 여러가지 속성을 넣기 위해서는 Material을 적용해야 합니다. 이미 준비된 매터리얼을 쓸 수도 있지만 우리가 필요한 매터리얼을 만들어야 합니다.
이것은 텅 빈 매터리얼이죠. 여기에 우리가 필요한 패턴을 넣도록 해 봅시다. Shared를 Standard로 한 상태에서 아까 만들었던 패턴들 중 하나를 Albedo 옆의 칸에 집어넣습니다.

다음에는 Shader를 Sprite→Default로 바꿔줍니다.

이로써 라인에 적용할 매터리얼이 완성되었습니다. 이제 이 매터리얼을 라인에 적용해야겠죠.

방금 만든 매터리얼을 라인의 Material에 끌어다 놓고 TextureMode를 Tile로 바꿉니다. 그러면 보다시피 단 하나의 패턴만 보이죠. 이것을 수정하기 위해 1)에서 만들었던 패턴의 속성을 바꿔야 합니다. 물론 6개 모두 바꿔야 하므로 이들 전체를 선택하고 WarpMode를 Repeat로 바꾸면 그림과 같이 패턴이 반복되어 나타나게 되죠.

이제 남은 것은 이 패턴을 움직이게 하는 것입니다. 이것은 스크립트에서 해야 합니다.
이 라인에 새로운 스크립트 Animate.cs를 만들어 붙입니다.

이 스크립트에서 필요한 것은, 라인을 조작할 LineRenderer와 라인을 움직이게 할 패턴입니다. 이들을 위한 변수를 만들고

라인 인스펙터에서 sosPattern에 필요한 패턴들을 끌어다 넣습니다.

다음과 같이 일정시간마다 lineRendr의 texture에 각 패턴을 차례로 집어넣으면

    // Update is called once per frame
    void Update()
    {
        if((nextFrame -= Time.deltaTime) < 0)
        {
            if(++frame >= sosPattern.Length)
                frame = 0;

            lineRendr.material.SetTexture("_MainTex", sosPattern[frame]);

            nextFrame = 0.3F;
        }
    }

이런 움직이는 라인이 완성됩니다.

이 라인을 prefab으로 만들어 필요할 때마다 instantiate로 로드해서 사용하면 끝

댓글 없음:

댓글 쓰기