10일차 부터 구체적으로 프로젝트를 만들어서 진행하게 된다. 대부분의 리소스는 외부에서 가져와서 import하고 유니티에서 작업해야 하는 부분만 집중적으로 다루게 된다.
게임의 배경 만들기
배경으로 사용할 리소스 다운
https://craftpix.net/freebies/free-horizontal-2d-game-backgrounds/
배경 오브젝트 배치
- 각 텍스쳐의 Material 만들기
- 배경 오브젝트 배치와 Material 설정하기
- 카메라를 직교 투영으로 설정
- Game 뷰의 해상도 설정하기
- 해상도에 맞게 배경 오브젝트 조정
배경 이미지 머테리얼을 만들기 위해 Create>Material로 생성하고
Shader를 Unlit/Transparent로 세팅한다
Unlit은 Unlight의 약자로 빛의 영향을 안받는 쉐이더라는 의미이고
Transparent는 투명하다는 의미로 색상의 Alpha값을 사용하는 쉐이더라는 의미이다.
3D Object>Quad를 만들어서 방금 만든 머테리얼을 적용하고 위치를 조정한다.
카메라를 직교 투영으로 변경한다 (2D 게임이므로)
배경 스크롤링 소스 작성하고 적용하기
- Script가 Attach될 게임오브젝트 만들기
- 스크롤링 Script 작성
- Script를 Attach 하고 Renderer를 링크
- 설정값을 조정하고 테스트 플레이
BGScrollData라는 class를 만들고 멤버는 public으로 선언한다. (외부에서 받아올것이므로)
class대신 struct로 해도 되는데 struct는 변하는 값을 받아서 쓸때 곤란하다고 함
그리고 Update에서 프레임 단위로 화면을 업데이트 시켜주게되는데 이 때 배경화면을 자연스럽게 흐르게 하면 된다.
인스펙터에서 Speed값을 입력받아서 Time.deltaTime만큼 곱하면 이동 거리를 구할 수 있다. (속도 * 시간 = 거리)
속도는 자연스러운 수치를 조절해가면서 찾아도되지만 강의에서 미리 알려준 속도를 유니티 인스펙터에서 적용하도록 한다.
최종 소스코드는 아래와 같다.
[System.Serializable]
public class BGScrollData
{
public Renderer RenderForScroll;
public float Speed;
public float OffsetX;
}
public class BGScroller : MonoBehaviour
{
[SerializeField]
BGScrollData[] ScrollDatas;
// Update is called once per frame
void Update()
{
UpdateScroll();
}
void UpdateScroll()
{
for (int i = 0; i < ScrollDatas.Length; i++)
{
SetTextureOffset(ScrollDatas[i]);
}
}
void SetTextureOffset(BGScrollData scrollData)
{
scrollData.OffsetX += (float)(scrollData.Speed) * Time.deltaTime;
if (scrollData.OffsetX > 1)
scrollData.OffsetX = scrollData.OffsetX % 1.0f;
Vector2 Offset = new Vector2(scrollData.OffsetX, 0);
scrollData.RenderForScroll.material.SetTextureOffset("_MainTex", Offset);
}
}
https://fastcampus.co.kr/dev_online_game
본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.