Unity 강의 1주차 - 5. 레이어마스크와 비트연산, 투사체 로직

김정환·2024년 10월 8일
0

레이어마스크, 비트연산자

레이어 Layer

  • 기본 32개 지원 (32 bit 지원)

비트연산자

  • AND(&) : 두 비트 필드 모두에게 해당 비트가 설정되어 있을 때
  • OR(|) : 두 비트 필드 중 하나라도 해당 비트가 설정되어 있을 때
  • XOR(^) : 두 비트 필드에서 해당 필드가 서로 다를 때만
  • NOT(~) : 모든 비트를 반전. * -1

비트 시프트 연산

  • 1 << n : 1을 왼쪽으로 n만큼 보낸다. 빈칸은 0으로 채움.
    n번째 레이어를 나타내는 비트마스크를 생성하는 데 사용. 이를 통해 특정 레이어에 대한 연산을 쉽게 수행할 수 있다.
  • 물리적 충돌, 레이캐스팅, 카메라 렌더링 등을 제어하는데 사용.

레이어 매칭 로직 구현

bool IsLayerMatched(int val, int layer)
{
    return val == (val | 1 << layer);
}
  • OR(|) 연산을 활용해서 두 비트를 더하는 개념으로도 사용할 수 있음.
  • 이때 유의할 점은 동일한 위치에서 OR(|) 연산을 사용하면 값은 똑같다는 것.
    위 함수는 그 점을 이용해서 두 비트를 비교한 것임.

사용

  • 충돌 제어 : 비트마스킹을 사용해 특정 레이어에 속한 오브젝트에만을 대상으로 충돌 검사를 수행할 수 있다.
  • 레이캐스팅 제어 : 레이캐스트가 특정 레이어의 오브젝트에만 반응하도록 비트마스크를 설정할 수 있다.
  • 카메라 렌더링 설정 : 카메라가 특정 레이어의 오브젝트만을 렌더링하도록 설정하여,
    게임의 시각적 요소를 세밀하게 제어할 수 있다.

투사체 로직

쿼터니언과 벡터의 곱셈

  • Q * V : 쿼터니언을 벡터만큼 돌려라
  • 순서에 유의 : 반드시 쿼터니언 * 벡터 순서.
private static Vector2 RotateVector2(Vector2 v, float angle)
{
    return Quaternion.Euler(0f, 0f, angle) * v;
}

오브젝트 풀링

게임 성능을 개선을 위한 널리 알려진 테크닉.

  • 비용이 큰 작업 : 생성과 소멸을 최소화시켜 성능을 향상시킴
  1. 미리 만들어두고 풀에서 꺼내 쓰고 넣는 방식.
    • 더 필요한 경우 사용중인 가장 첫번째 것을 반납받고 다시 사용.
    • 파티클 등 예외적인 경우
  2. 미리 만드는 것이 아니라, 필요할 때는 만들고 반납 받기.

문제

오브젝트 풀을 마음대로 쓸 경우 발생

  • 100만개를 생성해서 쓰는 경우
  • 100개가 필요한데 2개 미리 만들어두고 계속 생성시키는 경우

어떤 상황이냐에 따라 유동적으로 대처할 필요가 있음.

profile
사파 개발자

0개의 댓글