공부/Unity

Plane 아랫면이 안보이는 이유, 카메라, 메테리얼 생성, 컴포넌트 참조, 프리펩

월러비 2025. 8. 18. 19:43
  • 랜더링 파이프라인
    • 빌트인 렌더 파이프라인
    • 유니버셜 렌더 파이프라인
  • 각 파이프라인의 에셋들은 호환이 안된다.
    • 서로 변환이 가능한 에셋인지 확인이 꼭 필요하다.

유니티 실행 파일 빌드 방법

  • File - Build Profiles - Build 버튼 클릭
  • 빌드하는 플랫폼을 변경할 수 있다.
    • Window
    • Android
    • IOS 등

Plane 아랫면이 안보이는 이유

  • vertex 삼각형과 카메라가 비추는 면을 계산해서 비추지 않는곳을 렌더링하지 않는 것이다.

카메라

  • 카메라의 사다리꼴 기즈모 : 절두체 라고 부른다.
    • 가상의 육면체가 그려진다.
  • 카메라의 절두체 안에 들어온 오브젝트만 화면에 렌더링 된다.
  • 카메라 여백이 어떻게 나오는지 설정할 수 있다.
    • Environment
    • solid Color

부모 오브젝트에 포함 시킨 자식 오브젝트

  • 자식 오브젝트는 부모 오브젝트의 transform을 기준으로 자신의 로컬 transform이 인스펙터창에 보이는 것이다.

닷지

메테리얼 생성 및 적용

  • Project 창 - 우클릭 후 Material 에셋 생성
  • Base Map 변경
  • 메테리얼 에셋 변경 방법은 2가지다.
  1. 오브젝트에 드래그 앤 드롭
  2. Mesh Renderer의 Material 클릭 후 목록에서 원하는 메테리얼 선택

오브젝트의 컴포넌트를 참조하는 방법

  1. Public으로 인스펙터에서 참조
  2. 컴포넌트 참조 함수 호출
    1. GetComponent<T> : T에 해당하는 컴포넌트가 오브젝트에 있다면 참조를 반환한다.
private Rigidbody body;

private void Awake()
{
    body = GetComponent<Rigidbody>();
}

public 멤버를 인스펙터에서 초기화

  • 초기화 순서 : 스크립트 초기화 → 인스펙터 초기화 순서로 진행된다.
  • 결과 : 인스펙터 초기화로 덮어씌워지기때문에 주의해야한다.

함수

  • GetAxis(축 이름) : 입력받은 축으로 -1 ~ +1을 반환한다.

충돌 종류

프리펩

  • 현재 : 게임 오브젝트에 필요한 컴포넌트를 추가
  • 필요 : 같은 기능의 게임오브젝트가 여러개 필요
  • 결론 : 필요한 기능의 컴포넌트가 붙은 게임 오브젝트를 복사해서 사용한다.
  • 사용 이유 : 복사한 객체는 고유한 객체이기에 속성을 바꾸면 해당 속성만 바뀌게 된다.
    • 프리펩은 공통된 객체이기에 프리펩 원본 객체를 바꾸면 모든 객체가 바뀌게 된다.
    • 하지만, Hierarchy에 올라간 오브젝트는 고유한 속성이기에 고유한 오브젝트를 바꿔도 다른 오브젝트는 바뀌지 않게된다.
      • 바꾼 속성을 원본에 합치고 싶다면?
        • 인스펙터 좌측 상단 Overrides 목록 클릭
        • Revert All : 고유 객체 바꾼 속성 원래대로 되돌리기
        • Apply All : 프리펩 원본 객체를 현재 속성으로 덮어쓰기

FixedUpdate

  • 물리 업데이트 주기는 기존 업데이트와 별개로 동작한다.

오브젝트 검사

  • 오브젝트 이름 검사 - 비추천
  • 오브젝트 태그 검사 - 추천
    • 주의점 : 자식 오브젝트가 있다면 자식오브젝트 태그도 검사할 수 있다.
//if(other.gameObject.name == "Player")
//if(other.gameObject.tag == "Player")
other.CompareTag("Player")
  • 추천 이유 : 이름 복잡도는 O(N) 시간 복잡도이기에 비효율적이다.

함수들

  • GameObject.Find(오브젝트 이름) : 지금 열려있는 씬에 활성화 되어있는 오브젝트 중 같은 이름의 오브젝트를 반환하는 함수 - 비추천
    • O(N^2) 복잡도를 가지기에 매우 비효율적이다.
  • GameObject.FindWithTag(태그 이름) : 지금 열려있는 씬에 활성화 되어있는 오브젝트 중 같은 태그의 오브젝트를 반환하는 함수
    • O(N) 복잡도를 가지기에 위에거보다 이것을 쓴다.
  • FindObjectOfType<클래스>() : 지금 열려있는 씬의 모든 오브젝트를 순회하며 해당 클래스를 가진 오브젝트를 반환하는 함수 - 비추천