본문 바로가기

소프트웨어/C# + Unity

[Unity C#]유니티 배경스크롤 무한배경 구현

안녕하세요 


오늘은 유니티의 기본중의 기본인 배경 스크롤에 대해서 구현해보도록 하겠습니다.


유니티의 기본을 알고싶다면 아래글도 참고해보세요

2018/07/28 - [소프트웨어/C# + Unity] - 유니티 기본용어 Unity 초보 개발 입문

2018/06/20 - [소프트웨어/C# + Unity] - [Unity C#] RequireComponent 와 SerializeField 에 대해서

2018/06/11 - [소프트웨어/C# + Unity] - [C#_Unity]싱글톤 방법(Singleton)



배경스크롤이란 뒤에 배경이 움직임에 따라서 실제로는 캐릭터가 움직이는 느낌을 주는 간단한 방법입니다.


아래와 같은 효과를 만들어주려고 합니다.





실제로는 배경이 움직이고 있습니다.


토러스는 가만히 있는 것을 확인할 수 있습니다.


이런 효과를 만들기 위해서는 간단합니다.


업데이트쪽에 아래와 같은 코드를 하나 삽입해주시면 됩니다.




        public float scrollSpeed = 20.0f;

void Update () {

        Vector3 newPosition = transform.position + (Vector3.back * Time.deltaTime * scrollSpeed); 

        transform.position = newPosition;

}


여기서 Time.deltaTime은 작은 수 입니다. 보통 Update가 1초에 60번 호출되는데 Time.deltaTime은 바로 프레임의 


크기입니다. 즉 1/60 이 됩니다.


따라서 scrollSpeed라는 값을 이용하여 속도를 조절해 줄 수 있습니다.


더 자세한 내용을 알아보고 싶다면 유니티 Documentation을 보시면 됩니다.




file:///C:/Program%20Files/Unity/Editor/Data/Documentation/en/ScriptReference/Time-deltaTime.html


밑줄친 글을 보면 프래임당 10미터가 아닌 초당 10미터를 가고 싶으면 Time.deltaTime에 10(미터)을 곱하라고 


되어있습니다. 결국은 Time.deltaTime이 프레임의 역수라고 생각하면 되겠죠? (이전프레임과 현제프레임의 시간 간격)


또한 여기서 Vector3.back이라는 의미는 현재 포지션에서 Z축 값이 -1씩 되면서 줄어드므로 배경이 뒤로 가게끔 보입니다. 


이렇게 되면 결국 토러스는 앞으로 나아가는 것 처럼 보이게 됩니다.


이제 배경이 뒤로 가면서 배경이 스크롤되는 것은 완성하였습니다. 이번에는 무한반복을 시켜보겠습니다.


무한반복은 아래와 같은 코드를 Update() 함수에 넣어주시면 됩니다.




Vector3 newPosition = transform.position;

newPosition.z = Mathf.Repeat(-Time.time * scrollSpeed, 50.0f);

transform.position = newPosition;




여기서 Mathf.Repeat은 루프를 돌게 됩니다.  Mathf.Repeat(55,50) = 5라는 값이 나옵니다. 결국 50을 넘지 못합니다. 


최대값이 30입니다. 그럼 Mathf.Repeat(-5,50)일 경우는 어떻게 될까요? 바로 45라는 값이 나오게 됩니다. 


Time.time은 앱이 실행되고 나서 진행되는 시간입니다. 시간은 계속 증가하지만 앞에 (-)마이너스를 붙였기 때문에 50~0값이


반복됩니다. 결국 배경화면이 Z축으로 -1씩 되면서 토러스는 앞으로 나아가는 느낌이 듭니다.