[Unity]TIL (40) | 2023.09.18 | 유니티 레이어 마스크

kjg5370·2023년 9월 18일
0

TIL

목록 보기
40/91
post-thumbnail

들어가기 앞서

유니티 숙련 주차가 시작되었습니다.
지급 받은 강의가 생각보다 어렵고 많네요
그래도 한번 열심히 들어서 최대한 이해해보도록 하겠습니다.
이해한 다음에는 응용도 해야겠죠. 개인 과제도 열심히 구현해서 익혀나가야할 개념들을 확실히 익히겠습니다.
오늘 강의에서 처음 보는 것이 나왔는데 바로 레이어 마스크로 충돌 처리를 하는 것입니다.
그래서 오늘은 이것에대해 공부해보려고 합니다.

오늘 배운 것

  • 레이어
    레이어는 오브젝트들의 그룹을 만들고 관리하는 데 사용.
    씬의 일부분만 렌더링 하거나 물리적 충돌을 판정하는 데 사용.

    • 유니티 기본 레이어
      유니티는 0~7까지의 기본 레이어 외에 커스텀 레이어를 만들 수 있음.
      게임오브젝트를 여러 레이어에 할당하여 보여줄 오브젝트, 서로 상호작용할 수있는 오브젝트, 카메라가 표시하지 않을 오브젝트 등을 설정할 수 있음.
  • 레이어 마스크
    기본적으로 여러 레이어의 조합.
    게임 오브젝트나 카메라와 같은 요소들이 어떤 레이어에 속해 있는지를 제어하고 사용할 때 유용한 기능.
    비트 마스크로 표시되므로 여러 레이어를 한 번에 간편하게 지정할 수 있음.

    • 레이어 마스크 사용 예시
      	 using UnityEngine;
      	
      	public class ExampleScript : MonoBehaviour
      	{
      	    // 적 레이어에 대한 레이어마스크 생성
      	    public LayerMask enemyLayer;
      	
      	    private void Update()
      	    {
      	        // 플레이어가 적 레이어와 충돌하는지 확인
      	        if (Physics.CheckSphere(transform.position, 0.5f, enemyLayer))
      	        {
      	            Debug.Log("Player is colliding with an enemy");
      	        }
      	    }
      	}
  • 레이어 및 레이어마스크 사용의 이점

  1. 렌더링 관리
    레이어를 사용하여 카메라가 어떤 오브젝트를 렌더링할지 결정할 수 있음.
    게임 내에서 특정 오브젝트의 가시성을 제어.

  2. 충돌 감지 제어
    Physics.Raycast나 Collider 컴포넌트를 사용하여 특정 레이어 간의 충돌만 감지할 수 있으며, 불필요한 계산을 줄여 성능을 향상시킬 수 있음.

  3. 상호 작용 관리
    특정 레이어에 속한 오브젝트와만 상호 작용하도록 코드를 구성할 수 있음.
    예를 들어, "적" 레이어와 "플레이어" 레이어가 충돌할 때만 데미지를 입히거나 체력을 감소시키는 경우.

  4. 성능 최적화
    레이어와 레이어 마스크를 사용하여 불필요한 연산을 방지하고 특정 작업을 최적화할 수 있음.
    게임의 성능을 향상시키고 리소스를 효율적으로 활용하는 데 도움을 줌.

  5. 코드 관리
    레이어와 레이어 마스크를 사용하여 코드를 더 읽기 쉽게 만듦.
    레이어 마스크를 활용하면 복잡한 조건문을 사용하지 않고도 원하는 작업을 수행할 수 있음.

기억 할 것 & 진행 사항

  • 레이어 비트 연산
    Unity에서 게임오브젝트의 레이어를 빠르게 검사하고 조작하는 방법.

  • ex

    levelCollisionLayer.value == (levelCollisionLayer.value | (1 << other.gameObject.layer))

    • 1 << other.gameObject.layer
      other.gameObject.layer에 해당하는 비트를 활성화시키는 것.
    • levelCollisionLayer.value | (1 << other.gameObject.layer)
      비트가 levelCollisionLayer.value에 이미 설정되어 있는지 확인하는 것.

진행 사항

지급 받은 강의 듣기(진행중)

내일 할 일

  • 하루 계획
    • 오전
      • 09:00 ~ 10:00 : 알고리즘 코드카타
      • 10:00 ~ 10:30 : 팀 회의 및 알고리즘 리뷰
      • 10:30 ~ 14:00 :
        • 오늘 계획 (Task)
          • 강의 듣기 마무리
          • 개인 과제 구조 짜기
      • 12시-1시: 점심식사
    • 집중 코딩
      • 14:00 ~ 18:00
    • 저녁
      • 6시-7시: 저녁식사
      • 19:00 ~ 20:00 : 집중 코딩 시간 부족한 부분 해결해보기
      • 20:00 ~ 21:00: TIL 작성, 마무리 회고 진행
      • 21:00 : 내일은 위한 휴식!
profile
학생입니다

0개의 댓글