프로그래밍(C#) /유니티공부

[유니티C# 스크립팅 마스터하기] - 1챕터

정체불명의 모모 2022. 5. 8. 00:47

유니티 C# 스크립팅 마스터하기 책에 

1챕터 내용을 다뤄 보도록 하겠습니다.

1챕터는 필요한 내용만 다루고 기본적인 내용은 스킵 하였습니다.


스크립트 인스턴스화

: 유니티의 각 스크립트 파일은 인스턴스화 가능한 주 클래스를 하나씩 정의하고 있습니다.

  기본적으로 스크립트는 메시(mesh), 오디오 파일과 같은 다른 종류의 유니티 애셋과 동등하게 취급 됩니다.

 

  특정 오브젝트에 스크립트를 컴포넌트로서 추가해 숨을 불어넣는 과정을 인스턴스화(instantiation)이라고 합니다.

   (public 변수는 유니티의 오브젝트 인스펙터창에서 접근과 편집이 가능하게 되며, 다른 클래스에서도 접근할 수 있다.)

• Stats 패널이 표시되어 게임의 성능에 관련된 전반적인 통계를 보여줍니다.   이 패널에서 오브젝트의 update 가 얼마나 자주 호출되었는지, 그리고 게임의 일반적인 성능을 표시 하는 FPS가 얼마인지 볼 수 있다.

이벤트 함수의 실행 순서

: 유니티 스크립트를 실행하면 사전에 지정한 순서대로 여러 개의 이벤트 함수가 실행됩니다.

유니티 라이프 사이클

⁃ Reset : 오브젝트를 생성 후 인스펙터 뷰에서 리셋을 눌러줄 때 실행 됩니다.

  객체의 속성을 초기 값으로 설정해 줄 때 사용합니다.

 

⁃ Awake : 스크립트가 실행될 때 한번만 호출됩니다. 모든 오브젝트가 초기화 된 후 호출되기 때문에

   GameObject.Find 같은 명령문을 안전하게 사용할 수 있습니다. Awake 함수는 언제나 Start 함수

   전에 호출되므로 초기화 순저를 정할 수 있게 합니다.(Coroutine 사용 불가)

 

⁃ OnEnable : 인스펙터뷰에서 체크를 통해서 게임 오브젝트를 활성화 할 때 사용됩니다.
   활성화 할 때 마다 호출 됩니다.

 

⁃ Start : Update 함수가 호출되기 전에 한번만 호출 됩니다. 

 

⁃ FixedUpdate :  주로 물리 엔진을 사용하는 경우 일정 시간 간격으로 힘을 가할 때 사용하는 함수 입니다.
   발생 주기가 일정합니다.(Default : 0.02초)

 

⁃ Update : 프레임마다 호출되는 함수로 게임의 핵심 로직에 사용됩니다.
  주기가 일정하지 않습니다.

 

LateUpdate : 모든 Update 함수가 실행되고 나서 호출됩니다. 주로 카메라 이동 로직에 사용합니다.

 

⁃ OnDisable : 게임 오브젝트 또는 스크립트가 비 활성화 되었을때 호출됩니다.(Coroutine 사용 불가)

 

⁃ OnDestroy : 오브젝트 생존기간의 마지막 프레임이 업데이트 된 후 실행됩니다.(Object.Destroy 또는 씬 종료 시)

 

⁃ OnApplicationQuit : 응용프로그램 종료 전에 모든 오브젝트에서 호출됩니다.
  에디터에서는 플레이 모드를 중지하면 나타납니다.

• 함수 코드의 집합인데 각각의 집합은 고유한 이름을 가지고 있어, 이 이름을 통해 원하는 시점에 함수 안의 코드 라인
   순서대로 실행 된다.

• 이벤트는 본질적으로 함수인데, 독특한 방식으로 이용된다. (앞에서 봤던 Start 와 Update 함수는 사실 유니티 고유의
   이벤트라고 하는것이 정확하다.)

   이벤트는 레벨이 시작되었다거나 새 프레임이 시작되었다거나 오브젝트에게 중요한 것이 일어났다는 사실을 알릴 때 불리는 함수 이다.

C# 프로퍼티

:  프로퍼티는 C# 에서 클래스 내부에 선언한 변수의 값을 외부에서 접근할 수 있도록 하면서,

  동시에 캡슐화를 지원하는 언어의 한 원리 입니다.

  프로퍼티를 사용하는 이유는 변수의 값을 변경하거나 가져올 때, 조건을 걸어서 변수의 접근을 제어 할 수 있기 때문입니다.

  (캡슐화는 정보 은닉을 위해 클래스에서 선언된 변수가 외부에서 접근이 안되도록 public이 아닌 private로 선언하여

    외부에서 접근을 불가능하게 만드는 것 입니다.)


변수 표시

: 유니티 에디터의 인스펙터 안에 클래스의 public 변수들이 노출되어 실행 중에 값을 편집하고 볼 수 있도록 하는 기능 입니다.

  이 기능은 디버깅할 때 특히 편리하고, 실행 중에도 변경 할 수 있습니다.

   

 ▪︎ 클래스 안의 모든 public 과 private 변수를 다보길 원할 때 방법

   1. 인스펙터에서 Debug모드를 이용 합니다.

2. 특성attribute의 [SerializeField]를 함께 선언 한다.

 

위 방법을 이용하면 public변수들이 아닌 다른 변수들도 inspector 창에서 확인을 할 수 있다.

(특성,attribute에 관한건 나중에 설명 드리도록 하겠습니다.)


SendMessage와 BroadcastMessage

:유니티 API에 포함된 MonoBehaviour 클래스는 대부분의 새로 작성하는 클래스의 기본 클래스로서 SendMessage와 

BroadcastMessage 메소드를 제공 합니다.

이 함수들을 사용해 오브젝트에 붙은 모든 컴포넌트의 함수를 이름으로 실행 할 수 있습니다.

 (일반적으로 클래스에 접근하기 위해 인스턴스를 가리키는 참조 변수가 필요하지만, 이것을 통해 쉽게 호출이 가능합니다.)

 

◻︎ 리플렉션
: SendMessage와 BroadMessage는 오브젝트 간 그리고 컴포넌트 간 통신을 수월하게 만드는 효과적인 방법입니다.
  하지만, 내부적으로 C#의 리플렉션(reflection)이라는 기능에 의존하기 때문에 애플리케이션 실행 중에 스스로를 살펴보고
  실행할 코드를 찾습니다. 
  그렇기 때문에 일반적인 방법으로 함수를 실행할 때 보다 무거운 연산을 필요로 하기때문에 성능 저하를 일으킬 수 있습니다.


1챕터는 여기에서 마무리 입니다.

기초적인 내용이 빠지다 보니 비어 있는 부분들이 있을 수 있습니다!

다음 챕터는 2. 디버깅 입니다.