기록 보관소

[Unity/유니티] 입문: C# 프로그래밍 기초[B4] ~ 게임 오브젝트의 흐름[B5] 본문

유니티 프로젝트/유니티 3D 입문 : 공 굴리기

[Unity/유니티] 입문: C# 프로그래밍 기초[B4] ~ 게임 오브젝트의 흐름[B5]

JongHoon 2022. 1. 4. 23:53

개요

유니티 입문/독학을 위해서 아래 링크의 골드메탈님의 영상들을 하루에 2~3개정도 보고, 각 영상별로 진행 상황 사진 또는 캡처를 올리고 배웠던 점을 요약해서 적는다.

https://youtube.com/playlist?list=PLO-mt5Iu5TeYI4dbYwWP8JqZMC9iuUIW2 

 

유니티 강좌 기초 채널 Basic

유니티 개발을 처음 시작하시는 입문자 분들을 위한 기초 채널. [ 프로젝트 ] B00 ~ B12 (BE1) : 유니티 필수 기초 B13 ~ B19 (BE2) : 2D 플랫포머 B20 ~ B26 (BE3) : 2D 탑다운 대화형 RPG B27 ~ B37 (BE4) : 2D 종스크롤

www.youtube.com


1. C# 프로그래밍 기초[B4]

  • 변수

스크립트 파일
실행 결과 콘솔창

변수 유형은 int(정수형), float(숫자형), string(문자열), bool(논리형) 등이 존재

  • 그룹형 변수(변수들을 묶은 하나의 장소. 즉, 배열이나 리스트)

스크립트 파일
실행 결과 콘솔창

items.RemoveAt(0)때문에 삭제 후 출력시 items 리스트의 크기를 초과하여 마지막 줄에 오류가 발생했다.

  • 연산자

스크립트 파일
실행 결과 콘솔창

  • 키워드

여러가지 키워드들(int, float, string, bool, List 등)은 변수의 이름 또는 변수의 값으로 설정할 수 없다.

  • 조건문

스크립트 파일
실행 결과 콘솔창

여기서부터는 스크립트 파일이 너무 길어져서 수정/추가된 부분만 올린다.

개인적으로 윗 부분들 대부분은 이미 알고 있었지만 switch case문에서 슬라임, 사막뱀처럼 사용하는 것은 처음 알았다.

  • 반복문

스크립트 파일
실행 결과 콘솔창

콘솔창 독 데미지는 59~21까지 잘 출력되었지만 길이때문에 생략하였다.

추가로 배열의 길이를 구할 때는 .Length를 사용하지만, 리스트의 길이를 구할 때는 .Count를 사용해야한다.

그래서 스크립트 속 두번째 for문에서 string 배열 monsters의 길이를 구할때 .Length를 사용했다.

  • 함수

스크립트 파일 1
스크립트 파일 2
실행 결과 콘솔창

  • 클래스

새로운 스크립트 파일 Actor와 Player 생성
Actor 스크립트 파일
기존 스크립트 파일
실행 결과 콘솔창
Actor을 상속받는 Player 클래스 스크립트 파일
기존 스크립트 파일(Actor를 Player로 변경)
실행 결과 콘솔창

클래스를 만들때, 내부 변수와 함수들은 기본적으로 접근자가 private로 생략된 채로 선언되어 있어서, 다른 클래스에서도 사용하려면 해당 변수와 함수에는 public을 직접 붙여주어야 한다. (즉, public이 없으면 다른 클래스에서 생성자로 불러와도 변수와 함수 사용이 불가능하다.)

그리고 기존 클래스 NewBehaviourScript가 상속받는 MonoBehaviour은 유니티 게임 오브젝트 클래스다. 자바의 Object 클래스랑 유사한 개념인것 같다.


2. 게임 오브젝트의 흐름[B5]

영상 속 게임 오브젝트 흐름 요약
창 정리 및 새로운 스크립트 LifeCycle 생성
LifeCycle 스크립트 파일
실행 결과

  • 초기화-최초 Awake()

Awake()는 게임 오브젝트 생성할 때, 최초로 실행되는 함수. 한번만 실행된다.

  • 초기화-프레임 시작 Start()

Start()는 업데이트 시작 직전, 최초로 실행되는 함수. 한번만 실행된다.

  • 프레임-물리 FixedUpdate()

FixedUpdate()는 유니티 엔진이 물리 연산을 하기 전에 실행되는 업데이트 함수. 여러번 작동하는 함수.

컴퓨터 성능과 관계없이 고정된 실행 주기(1초에 약 50회 정도)로 작동하며, CPU를 많이 사용한다.

주기는 콘솔창 옆에 숫자로 확인할 수 있다.

  • 프레임-로직 Update()

Update()는 물리 연산에 관련된 로직을 제외한 나머지 주기적으로 변하는 로직을 넣을때 사용하는 함수.

위 FixedUpdate()와는 달리, 환경(컴퓨터 성능)에 따라서 실행 주기가 떨어질 수 있다.

주기는 콘솔창 옆에 숫자로 확인할 수 있다.

  • 프레임-후처리 LateUpdate()

LateUpdate()는 모든 업데이트가 끝난 뒤에 마지막으로 호출되는 함수. 여기서는 캐릭터를 따라가는 카메라 또는 로직의 후처리를 한다.

주기는 업데이트가 끝난 뒤이므로, 위 FixedUpdate() 또는 Update()와 동일한 주기로 실행된다.(둘 중 빠른 주기로)

주기는 콘솔창 옆에 숫자로 확인할 수 있다.

  • 해제 OnDestroy()

OnDestroy()는 오브젝트가 삭제되기 직전에 작동하는 함수.

Awake()와 반대되는 개념이라고도 볼 수 있다. 

  • 활성화 OnEnable()

사실 게임 오브젝트는 삭제하지 않고 활성화/비활성화할 수 있다.

OnEnable()는 오브젝트가 활성화 될 때 실행되는 함수. 따라서 Awake보다는 늦게 실행되고 Start보다는 빠르게 실행된다.

최초 1회 실행이 아닌, 켜고 끌때마다 실행된다.

  • 비활성화 OnDisable()

OnDisable()는 모든 업데이트가 끝난 후 오브젝트가 비활성화되거나 삭제 될 때 실행되는 함수.

오브젝트를 비활성화하는 방법은 스크립트가 들어갔던 오브젝트의 Inspector 창에서 스크립트 앞 체크를 제거하면된다.

이후 다시 활성화하려면 다시 체크하면 된다.