재미있는 실감미디어

꿈꾸는대로 만들어집니다.

유니티기초[유니티 기초] 17_게임오브젝트제어하기1 - 클래스와 오브젝트, C# 클래스 만들기

김혜영
2020-04-08
조회수 714

유튜브 17 - https://youtu.be/7nDdYg05Kk4

  • 클래스와 오브젝트
  • C# 클래스 만들기


지난시간까지 우리는 기본적인 개념을 배웠습니다. 오늘은 조금 더 깊이 들어가보는 시간을 가지도록 하겠습니다.


들어가기에 앞서… 유니티 홈페이지는 다들 아시죠? 자주 들어가셔서 최근의 이슈를 보시는 것도 좋을 듯 합니다. 


또한 유니티 허브에는 튜토리얼이 잘 되어 있습니다. 참고하시면 좋습니다. 꾸준하게 우리 공부해요^^


우리가 지난 여러 시간을 통하여 C#의 기본 문법을 살펴보고, 데이터 타입과 변수도 살펴 보았습니다. 또한 함수, 즉 메서드의 개념도 살펴보고 Start( ) 와 Update( ) 같은 이벤트의 개념도 살펴보았습니다. 연산자도 배우고, if 조건문이나 for 반복문같은 제어문을 배웠습니다. 또한 여러 값을 저장할 수 있는 배열도 배웠습니다. 처음 배울때는 이러한 부분이 정리가 안되고 뒤죽 박죽일 것입니다. 하지만 실제적인 코드 구현을 통해 하나씩 완벽하게 마스터하게 될 것입니다.


오늘 살펴 볼 개념들입니다. 약간 용어나 설명하는 부분이 익숙하지는 않을 것입니다. 하지만 오늘 과정을 잘 마치고 나면 무리없이 이해할 수 있을 것입니다. 한번에 이해되지는 않을 수도 있습니다. 찬찬히 여러번 보고, 나중에 또 보고, 반복하면 됩니다. ^^ 우리에게는 목표가 있으니까요^^

  • 클래스는 묘사하려는 사물(오브젝트)을 정의하는 틀입니다.
  • 클래스를 통해 대상에 관한 변수와 메서드를 정의합니다.
  • new 연산자로 클래스로부터 오브젝트를 생성할 수 있습니다.
  • 접근 제한자를 사용해 클래스의 멤버를 선택적으로 외부에 공개할 수 있습니다.
  • C# 기본 내장 변수는 값 타입입니다.
  • 값 타입의 변수는 변수가 값 자체를 저장합니다.
  • 클래스 타입의 변수는 참조 타입니다.
  • 참조 타입의 변수는 오브젝트로 향하는 참조를 저장합니다.
  • 참조 타입에서는 여러 개의 변수가 하나의 오브젝트를 가리키는 것이 가능합니다.
  • 컴포넌트는 클래스로 만들어져 있습니다.
  • 씬에 있는 게임 오브젝트가 컴포넌트의 참조를 변수에 할당하면 코드 상에서 변수로 해당 게임 오브젝트와 컴포넌트를 사용할 수있습니다.


자, 맨 처음 클래스를 설명하면서 보았던 그림입니다. 다시 한번 그림을 보고 개념을 이해하도록 합니다. 영상에서는 좀 더 자세히 설명하니 유튜브 영상을 참고하면 됩니다.


오늘 작업을 위해 3D로 빈 프로젝틀 하나를 생성합니다.


익숙하지요? Project 에서 C# 스크립트 파일을 생성합니다.


바로 이름을 변경해야 하는 것도 잊지 마세요^^


생성한 코드를 다음과 같이 변경합니다. Animal 이라는 클래스를 하나 만들었습니다. Animal 클래스는 상속하지 않고 그냥 만들었습니다. Animal 클래스 안에서 name 과 sound 변수를 public으로 선언합니다. PlaySound( ) 라는 함수를 public 형태로 선언합니다.여기서 name 과 sound는 값이 할당되지 않았습니다. 다른 곳에서 이 값을 할당하고자 함입니다.


Zoo 라는 스크립트를 하나 만듭니다.


Zoo 코드는 다음과 같이 수정합니다. Zoo 클래스는 MonoBehaviour 클래스로부터 상속 받았습니다. 앞서 Animal 클래스를 만든 것을 기억할 것입니다. Animal 타입으로 puppy 라는 새로운 Animal 클래스를 생성합니다. new 연산자는 클래스로부터 상속받아 인스턴스를 만들 수 있습니다. 여기서 Animal( ) 메서드는 Animal 클래스의 생성자로서 기능을 합니다. 앞서 Animal 클래스에는 PlaySound( ) 메서드를 미리 만들어 두었습니다. Zoo  클래스는 name 과 sound 에 값을 할당하고, PlaySound( ) 메서드를 통해 콘솔창에 해당 내용을 출력하게 됩니다.


이제 각각 스크립트가 동작하도록 빈 오브젝트를 생성합니다.


빈 오브젝트에 Zoo 스크립트를 어태치합니다.


플레이 모드를 통하여 결과를 확인합니다.


이제 개념을 정리해보겠습니다. 

  • MonoBehaviour를 상속한 클래스는 new로 오브젝트를 생성할 수 없습니다.
  • MonoBehaviour를 상속한 클래스는 드래그 & 드롭으로 스크립트를 게임 오브젝트에 컴포넌트로 추가하여 오브젝트를 만들 수 있습니다.
  • C#에서는 클래스를 기반으로 새로운 오브젝트를 생성할 때 new를 사용하나, 유니티 C# 스크립트는 다릅니다.
  • MonoBehaviour를 상속한 클래스는 컴포넌트로 동작하며, 컴포넌트는 게임 오브젝트의 부품으로만 존재합니다.
  • 컴포넌트는 게임 오브젝트에 추가될 때 컴포넌트로서 필요한 초기화 과정을 거칩니다.
  • new 연산자로 MonoBehaviour를 상속한 클래스를 오브젝트로 생성하면 필요한 초기화 과정과 게임 오브젝트에 추가되는 과정을 생략하고 오브젝트가 생성됨으로 오브젝트가 정상적으로 동작하지 않습니다.


앞서 우리가 만든 Animal 클래스는 name 과 sound 변수가 있습니다. 이러한 name 과 sound 를 멤버, 또는 필드라고 합니다. PlaySound( ) 함수도 클래스의 멤버입니다. 


기본적으로 클래스의 멤버들은 외부에서 보이지 않도록 감추어져 있으나, 접근 제한자를 사용하여 선택적으로 멤버의 공개 여부를 결정할 수 있습니다. 

접근 제한자는 멤버의 공개 여부를 결정하는 키워드입니다. public은 클래스 외부에서 멤버에 접근이 가능합니다. private은 클래스 내부에서만 멤버에 접근 가능(기본값)하며, 기본 값입니다. protected는 클래스 내부와 파생 클래스에서만 멤버에 접근 가능합니다ㅣ


그럼 다음 시간에 만나요^^




3 0

매일 한알의 마늘처럼 하나의 미션 수행!

동굴뛰쳐나가지 않고 매일 하나의 마늘을 먹기!!!

게임이나 VR, AR 에 유니티가 언리얼과 같이 많이 사용된다고 듣긴 했지만 나와는 관계없는 프로그램 같았습니다. 그러다가 우연한 계기로 게임 디자인을 하면서 유니티에 관심이 생겼습니다. 


자바스크립트가 유니티와 연동된다고 하니, 유니티가 매력있게 다가왔습니다. 유니티까지 활용한다면 작업 영역의 확장 뿐만 아니라 재미있는 콘텐츠를 제작할수 있겠다는 가능성이 보였습니다.


내가 기획하고, 디자인하고, 개발까지 하여 하나의 게임 앱을 만들수가 있다니! 얼마나 달콤한 유혹인지 모릅니다. 물론 수 많은 산을 넘고 에러를 넘고, 오류를 넘어야 하는 것은 각오를 해야 합니다. 그럼에도 불구하고 무척 매력적 입니다. 인고의 시간을 지나면 나는 상상력을 구현할수 있는 하나의 툴을, 도구를 장착할수 있는 것입니다. 아!이!언!맨! 처럼 말이지요!!!


카카오프로젝트 100은 게으른 저를 동기부여해 줍니다. 당장 통장에 계좌가 찍히는 일은 열심히 하게 되지만, 새로운것을 공부할 때는 의지가 참 약해지고 용두사미가 됩니다. 그런 의미에서 카카오프로젝트 100은 100일동안 의지를 불태울수 있는 작은 동기가 됩니다. 카카오프로젝트 시즌1에서는 자바스크립트 기초를 정리했습니다. 

시즌 2에서는 새로운 공부를 도전합니다. 바로 유!니!티!


여러분 생각은 어떤가요?

top