멋사교육

멋쟁이사자처럼부트캠프 유니티 게임 개발 5기 11일차

나른한여우 2025. 5. 28. 00:24
  • 유니티 에디터 실습
  • 유니티 C#

유니티 에디터 실습

 

레이어 처리

 

카메라에서 Culling Mask선택해 렌더링할 레이어그룹을 선택할 수 있다. Light에서도 동일하게 Culling Mask선택 가능

오브젝트에 레이어를 부여하면 해당 레이어만 보여짐

 

실습 프로젝트

무료 고양이 에셋을 받아 임포트해주고 Scene을 2D로 변경 메인카메라를 Orthographic으로 설정해 2D 프로젝트 환경을 만들어준다. 받은 고양이 에셋의 크기가 작아 Pixels per Unit을 줄여 더 크게 변경해주고 배경과 바닥타일의 Draw Mode를 Tiles로 바꿔서 사이즈를 늘려주면 그 타일 그대로 늘어나게  되어 크기를 맞춰줌.

 

배경과 바닥을 2개씩 조합해 무한히 움직이는 배경을 만들어준다. 테스트 과정에서 조합한 2개 오브젝트 사이에 중간중간 비는곳이 보여질 수 있는데 deltaTime을 적용하면 컴퓨터 성능에 따라 달라지는 값때문에 실선 이슈가 발생함. 고정프레임인 fixdeltatime도 deltatime보단 덜하지만 그래도 속도가 빨라지면 비는곳이 생김 실선이 생기는 이유는 두개의 오브젝트의 이동하는 값이 딱 떨어지지않기때문이다. 이것을 잡으려면 이미지크기, 속도, 타일길이, 위치값등 많은것들을 고려해서 수치를 입력해줘야지 문제를 해결할 수 있다.

 

Pixels Per Unit이란 1Unity Unit에 몇개의 픽셀을 할당할 것인가를 의미함

 

Pixels Per Unit = 100 (기본값)

  • 100픽셀 = 1 Unity Unit
  • 200픽셀 스프라이트 = 2 Unity Unit 크기

캐릭터 스프라이트: 64×64 픽셀

  • PPU = 64 → Unity 크기: 1×1 Unit (정사각형)
  • PPU = 32 → Unity 크기: 2×2 Unit (2배 크게)
  • PPU = 128 → Unity 크기: 0.5×0.5 Unit (절반 크기)

 

 

2개의 오브젝트를 붙여 배경 만듬

 

픽셀의 흐려지거나 일그러지는 문제를 방지하기 위해 카메라에 Pixel Perfect Camera 컴포넌트를 추가함

 

 

2개의 오브젝트를 사용한 배경 움직임 코드

배경과 타일 두개 모두에 스크립트를 넣어주기때문에 returnPos의 y축을 잡아줄때 transform.position.y로 y의 위치를 각자 잡아준다.

public float moveSpeed = 3f;
//왼쪽으로 가던 배경이 돌아갈 위치
// 배경 이미지의 길이가 30이기 때문에 x = 30f
public Vector3 returnPos;

private void Start()
{
    float pos = transform.position.y;
    returnPos = new Vector3(30f, pos, 0f);
}

// Update is called once per frame
void Update()
{
    //배경 왼쪽으로 이동
    //transform.position += Vector3.left * moveSpeed * Time.deltaTime;
    //fixedDeltaTime으로 변경
    transform.position += Vector3.left * moveSpeed * Time.fixedDeltaTime;
    //Debug.Log(Time.deltaTime);

    if(transform.position.x <= -30f)
    {
        transform.position = returnPos;
    }

}

 

배경에 다른방식으로 새 Material을 만들어 ShaderUnlit/Texture을 선택해주고 배경 이미지를 Base로 선택해 Tiling을 해줘서 자연스러운 배경 Material을 만들어줌 이후 Quad를 만들어 Mesh Renderer에 해당 Materials를 넣어주면 Quad에 배경이 입혀짐

 

이렇게 Materials을 입혀서 배경을 만든 경우에는 offset을 이용해 배경의 움직임을 만들어줌

private MeshRenderer renderer;
public float offsetSpeed = 0.1f;

void Start()
{
    renderer = GetComponent<MeshRenderer>();
}

void Update()
{
    //변경된 offset값
    Vector2 offset = Vector2.right * offsetSpeed * Time.deltaTime;

    //Texture의 Offset을 적용하겠다.      Base Map
    renderer.material.SetTextureOffset("_MainTex", renderer.material.mainTextureOffset + offset);
    //MainTex는 shader내 코드의 변수 코드임..! 프로퍼티 접근을 위해 사용
}

 

offset을 이용해 배경을 움직이는 경우에는 중간중간 끊어지는 실선없이 자연스럽게 움직임