낑깡의 게임 프로그래밍 도전기

2023년 8월 16일 수요일 Unity - 시작 전 C# 기본 구조와 형식, C++의 차이점 본문

Unity C#

2023년 8월 16일 수요일 Unity - 시작 전 C# 기본 구조와 형식, C++의 차이점

낑깡겜플밍 2023. 8. 16. 23:25
반응형

유니티 시작
start : 첫 시작시 실행
Update: 매 프레임 마다 실행
컴포넌트: 어떤 속성과 기능이 있는 것들을 유용하게 묶어 기능화 시킨 것
어떠한 기능을 수행하는 가장 작은 단위(현실"모듈" = 게임"컴포넌트")
 
 
C#스트립트 타입은 클래스이자 컴포넌트다 
c# 스크립트는 기본적으로  MonoBehaviour를 상속받고 있음 
소스를 타고 가면 확인가능(단축키: F12) MonoBehaviour : Behaviour : Component 

MonoBehaviour
 
기본 트랜스폼
게임오브젝트라고 하면 기본적으로 위치 크기 회전을 가짐
적합하지 않은 컴포넌트는 넣지마라
 

스크립트 생성할때 소스에도 똑같은지 확인 중요!

Start - 첫 실행 시 한번만 호출. 보통 초기화가 필요한 상태에서 사용함.(C#에서의 main과 같이 쓰기로 함)

          (*Start로도 초기화가 부족할 때 쓰는 것이 있음. 뭔지 모름)

 

Update - 매 프레임마다 호출되는 것. 프레임 사양마다 달라지니 잘 고려하여 사용.

*FixaedUpdata 프레임을 기본적으로 0.02초로 고정시켜주는 것(50프레임). 바꿀수있음(이동량 고정 시 필요)

 

Inspector내의 gm은 독립적인 객체이기 때문에 Start가 각각 (3번) 호출됨. (gm이라는 클래스에 대한 변수가 3개있다)

 

여기 들어오면 다 게임 오브젝트

유니티 실행중에는 수정을 반영 해주지않고 초기화가 된다. 유니티 실행 과정에서 위치 등 변화가 일어나면 실행 종료 후 자동으로 실행 전으로 초기화 해줌!(따라서 실행을 끄고 수정하자)

 

C#은 <<+ num 해주지 않아도 알아서 문자로 출력된다

깊은 복사는 값전체를 복사하여 새로운 객체를 또 창조하는것. 스택영역에 들어가기에 괄호가 닫히면 자동으로 할당 해제 얕은 복사는 주소를 복사하는 것.(가르키는것) 힙영역에 할당. 껍질카피라고도 부름.

 

구조체는 스택영역이라 자동으로 해제되기 때문에 변화가 많이 일어나는 것(할당이 많이 되는것)에 적함함. 

클래스는 덩어리가 너무 커서 큰연산, 복잡한 연산일 들어갈 땐 깊은 복사가 버거워 주소 복사가 필요할때 사용.

값타입은 새로 생겼지만 참조타입은 가르킴
값, 참조타입 확인 표

 

값타입에서 스왑 기능 하는 법.(값 타입일때 주소를 참조하는 법 - 참조자 사용법). 호출 때에도 ref를 적어줘야함

클래스를 만들때 MonoBehaviour 붙이지말것. MonoBehaviour 는 컴포넌트를 만들떄 사용되는 것이며 같은 스크립트 내에서 두개 이상의 이름을 가지고있으면 가기고 올때 오류가 생김

 

 

※ C++과 C#의 차이점

 - C#은 사용자의 에러를 막기위해 제한적인게 많다.

 - C#에서는 bool값을 숫자로 사용 불가. ture, false로만 사용가능.

 - C++의 강력한 기능인 포인터를 제한. 동적할당의 힙영역 해제를 안해주는 실수를 방지하기위해 C#은 자동으로 힙영역을 해제한다. (가비지 콜렉터: 사용하지않는 , 참조되어지지 않는 힙영역을 모아 삭제함. 가비지가 많아지면 그만큼 수집하고 해제하는 연산이 늘어나기 때문에 좋지 않다. 렉이 걸릴 수 있음. 그러므로 자동으로 삭제한다고 해서 사용 남발 자제)

 -  배열 C++ :  int arr[10];   /   C# :  int[] arr = new int[10];

 - C# 출력 Debug.Log(numA + "," + numB);  (<< 필요없이 +를 사용하여 바로 문자열를 출력해준다.)

 - 참조차 C++ :  int&  / C# :  ref

 - C++에서 구조체의 기본 디폴트는 퍼블릭, C#에서는 프라이빗 (헷갈리니 다 명시해주는 것도 방법)

값타입 참조 타입 색이 다르다

 

메인카메라 오브젝트를 불러오는 카메라 메니저 오브젝트 내 스크랩트 내용

메인카메라가 카메라매니저를 가지고 있는건 옳지 않아서 분리 후 카메라 매니저 스크립트 내에서 상단의 public Camera cam; 처럼 선언해주고 사용할 수 있다. (pubilc이 된 카메라는 유니티 인터페이스에 나타나게 되므로 끌어서 넣으면 된다.)

반응형