유니티 - 220721

리문·2022년 7월 21일
0

이벤트 함수

  • Awake()

    • Start 함수 전에 호출.
    • 비활성 상태인 경우, 게임오브젝트가 활성화 될때까지 호출되지 않는다.
  • OnEnable()

    • 오브젝트 활성화 직후 호출.
  • Start()

    • 스크립트 인스턴스가 활성화 된 경우, 첫 업데이트 전에 호출.
  • FixedUpdate()

    • 호출후, 물리 계산 및 업데이트가 발생됨.
    • 프레임 속도와 관계없이 델타타임을 적용하여 호출됨.
  • Update()

    • 프레임당 한번씩 호출.
    • 프레임을 업데이트.
  • LateUpdate()

    • Update()가 끝난 후, 프레임당 한번씩 호출.
    • Update()에서 시작한 계산을 완료함.
  • OnDisable()

    • 오브젝트 비활성화일 때, 호출.
  • OnDestroy()

    • 오브젝트의 마지막 프레임 업데이트 종료 후 호출
    • 오브젝트를 파괴함.

컴포넌트 패턴

  • 사용할 여러가지의 컴포넌트들을 만들어서 오브젝트에 필요한 컴포넌트들을 넣어서 사용한다.
  • 깊은 상속을 피하기 위해서 사용한다.
  • 유연한 재사용 가능. -> 필요한 기능만 선택적으로 사용가능.
  • 기획자의 프로그래머 의존도가 낮아짐. -> 프로그래머가 이미 만들어놓은 컴포넌트들을 사용하여 게임 오브젝트를 만들 수 있다.
  • 독립성 덕분에 기능의 추가와 삭제가 쉽다. -> 어떤 기능을 추가하거나 삭제할 때 다른 기능이 망가지지 않기 때문에.
    • 컴포넌트의 독립성
      • 게임 오브젝트는 컴포넌트들을 담아서 사용하는 그릇.
      • 컴포넌트는 다른 컴포넌트와 독립적으로 동작함.

라이트

  • 라이트 연산은 굉장히 비싼 연산이다. 그래서 웬만하면 라이팅 정보를 저장 해놓는다. 미리연산. -> 라이트 맵
  • 글로벌 일루미네이션(GI; Global Illumination) : 간접광 계산
  • 유니티에서 제공하는 라이트 종류
    • 점(Point) : 구 형태로 빛남.
    • 스팟(Spot) : 원뿔형 조명.
    • 직사광(Directional) : 태양광

애니메이션

  • 레이어를 여러 개 사용해서 동시에 여러 상태를 한꺼번에 표현할 수 있었음.
    • 위에서부터 아래로 차례대로 오버라이딩
    • 오버라이딩을 하기 위해 아바타 마스크
  • 좀 더 자연스러운 애니메이션을 위해 블렌드 트리를 사용할 수 있다.
  • 휴머노이드 릭(Humanoid Rig)
    • 리깅(Rigging) : 3D 모델의 골격과 움직임을 정의하는 조인트(관절) 계층 구조를 만드는 것.
    • 사람 형태의 모델은 휴머노이드 릭을 사용한다.
      • 휴머노이드 릭을 사용하기 때문에 모델의 골격이 달라도 리타겟팅(Retargetting)하여 애니메이션을 재사용 할 수 있다.

시네머신

  • 자연스러운 카메라 연출을 위한 패키지.
  • 브레인 카메라와 가상 카메라로 나뉨.
    • 브레인 카메라는 모니터로 화면을 송출하는 역할, 가상 카메라는 카메라 연출에 필요한 데이터를 저장.

최적화

  • Vector나 Quaternion 사용시 연산 순서에 주의해서 식을 작성해야 한다.

인터페이스

  • 객체지향 프로그램에서 메시지를 정의할 수 있는 도구.
  • 인터페이스는 여러 개를 구현할 수 있다.
  • 인터페이스를 상속한다면 반드시 해당 인터페이스에 정의된 메시지를 재정의해야 한다.
  • 인터페이스를 활용해 코드 간(객체 간) 결합도를 낮출 수 있다. -> 느슨한 커플링.

파티클 시스템

  • 어떤 형태가 고정되지 않은 동적 오브젝트를 표현하려면 파티클 시스템을 이용하면 된다.
    • ex) 불, 물, 연기 ...

스크립터블 오브젝트

  • 여러 데이터를 저장할 수 있는 데이터 컨테이너.
  • 유니티 에디터 상에서 데이터를 수정할 수 있음.
  • 프로그램에서 데이터 사본은 딱 하나만 생성됨. 즉, 각 인스턴스마다 데이터를 들고 있지 않음.
  • ScriptableObject를 상속하면 스크립터블 오브젝트를 생성할 수 있다.

리플렉션과 특성

  • 리플렉션(Reflection)은 동적으로 타입에 대한 정보를 제공하는 시스템으로 GUI 툴을 만들 때 유용함.
  • 특성(Attribute)은 C# 언어의 구성 요소 중 하나로 클래스, 메서드, 필드 등의 요소에 대한 메타데이터(추가 정보)를 제공하는 특수한 클래스
    • Attribute를 상속하면 특성을 만들 수 있다.

열거형

  • 문법은 C++와 같으나, 몇 가지 차이점이 있음.
    • 열거형으로 만든 기호상수 사용시 꼭 열거형을 앞에 적어줘야함. 즉, 이름 공간이 따로 있음.
    • int 타입으로 암시적 형 변환 불가능. 명시적 형 변환 해야함.
    • C++보다 좀 더 풍성한 기능 지원.

반복자 메서드 (Iterator Method)

  • IEnumerable / IEnumerator를 반환 타입으로 가지는 메서드.
  • yield 문 사용 가능. yield 문을 만나면 실행을 중단한다.
    • yield return : 반환값과 함께 중단.
    • yield break : 반환값 없이 중단.
  • MoveNext() 가 호출될 떄마다 이전에 중단됐던 지점부터 실행하며, 메서드가 끝나거나 yield 문을 만날 때까지 실행한다.

코루틴

  • 반복자 메서드를 활용해 함수의 명시적 실행 없이도 내부적으로 알아서 실행 시켜주는 시스템.
  • 시간 혹은 순차적 처리를 구현할 때, 직관적으로 코드를 작성할 수 있어 유용하다.
  • C#의 반복자 메서드를 이용하여 구현되었다.
  • WaitForSeconds(S) : S초 동안 중단.

운동학

  • 순운동학(FK; Forward Kinematics) : 상위 조인트의 변환에 따라 하위 조인트도 같이 변환이 되는 것.
  • 역운동학(IK; Inverse Kinematics) : 하위 조인트의 변환에 따라 하위 조인트도 같이 변환이 되는 것.
  • OnAnimatorIK() : IK가 적용될 떄마다 호출.
    • SetIKPositionWeight() / SetIKPosition() / SetIKRotationWeight() / SetIKRotation()

레이어

  • 레이어는 씬에 존재하는 게임 오브젝트를 구분할 수 있게 해주는 도구.
  • 충돌 검출에 활용한다.
  • 레이어 마스크를 이용하면 성능 향상의 이점이 있다.

레이캐스트

  • Ray를 기반으로 충돌 검출을 하는 것.
  • Physics.Raycast()

확장 메서드

  • 확장 메서드(Extension Method)는 기존 타입에 메서드를 추가할 수 있게 한다.
  • 정적 메서드로 구현하며, 첫 번째 매개변수에 this 키워드와 함께 확장시킬 타입을 적는다.
  • 확장 메서드는 확장하는 타입의 private에 접근할 수 없다. 즉, 캡슐화의 원칙을 위배할 수 없다.

C#의 객체지향 프로그래밍

  • 가상 함수는 virtual 키워드 사용.
  • 오버라이딩은 override 키워드 사용.
  • 추상 클래스 / 메서드는 abstract 키워드 사용.
    • 추상 메서드는 반드시 자식에서 오버라이딩 해야 한다.
  • 가상 함수와 추상 클래스 / 메서드의 차이
    • 가상함수는 다형성을 위한 도구로, 구현에 강제성을 가지지 않는다.
    • 추상 클래스는 반드시 구현을 해야 하므로 구현에 강제성을 가진다.
  • 추상 클래스와 인터페이스의 차이
    • 추상 클래스
      • 추상클래스는 클래스이기 때문에 메서드 외에 필드를 저장할 수 있다.
      • 추상클래스는 객체의 역할을 정의한다.
    • 인터페이스
      • 인터페이스는 메서드만 저장 가능하다.
      • 인터페이스는 메세지를 정의한다.
profile
개발자되기 대작전

0개의 댓글