재미있는 실감미디어

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

유니티기초[유니티 기초] 33_유니티 싱글톤 복습

김혜영
2020-04-24
조회수 1066

유튜브 33 - https://youtu.be/YEGLuyDHIhA


안녕하세요~ 어느덧 33강을 맞이하고 있습니다. 지난 시간에 싱글턴을 배워보았는데요. 사실 좀 어려울듯 합니다. 그래서 오늘은 다른 방법으로 다시한번 싱글턴을 살펴보면서 변수를 서로 공유하는 방법을 살펴보겠습니다. 원리는 같은데 다른 방법으로 코드를 작성해보면서 이해를 높여보는 시간이 되겠습니다.


먼저, 잠간 이전에 배운 접근자에 대해 살펴봅니다. 접근자란 변수, 또는 함수를 접근할 수 있는지 여부를 결정하는 것입니다. 접근자에는  private, public, protected 이 3종류가 있습니다. 접근자는 변수, 메서드(함수)에 붙여줄 수 있으며, 기본값은 private으로 설정됩니다. private은 비 공개로 설정하며, public은 공용, protected는 보호받는 접근자라고 보시면 됩니다. 일단 코드를 통해 살펴보도록 하겠습니다.


다음과 같이 PlayerController 스크립트에 퍼블릭으로 선언된 speed 변수가 있습니다. 우리가 전에 열심히 배운 코드이지요. 


GameManager 스크립트에서 이러한 speed 변수를 인식할 수 있을까요? 다음과 같이 콘솔에서 에러를 볼 수 있습니다. 


우리는 전에 GameManager 스크립트를 static으로 선언하여 싱글턴 패턴으로 만들어 두었습니다. 이제 PlayerController 스크립트에서 다음과 같이 GameScore 변수를 인식하는 것을, 같이 공유하는 것을 볼 수 있습니다. 


그럼 PlayerController 스크립트의 speed 변수를 공유하기 위해 싱글턴 패턴으로 만들어 볼까요? 다음과 같이 Start( ) 함수에 작성해 봅니다. GameManager에도 디버그를 통해 speed 변수를 출력해 봅니다. 그런데 이와 같이 작성할 경우 처음에는 콘솔상에서 오류가 없지만 게임을 플레이해보면 중간에 에러가 납니다. 지난 시간에는 Start( ) 함수에 넣어도 에러가 나지 않았습니다. 왜 그럴까요?


다음과 같이 Awake( ) 함수에 instance1 변수를 할당하도록 코드를 수정합니다. 이제 게임을 플레이해도 에러가 나지 않습니다. 이와 같은 코드의 차이를 통해 우리는 Awake( ) 함수를 통해 초기화해야 함을 알 수 있습니다. 즉 Awake( ) 가 Start( ) 보다 먼저 실행되어 변수를 할당해주어야 되는 것이지요. 이러한 부분을 정확하게 이해해야 코드를 제대로, 자신의 맘대로 작성할 수 있을 것입니다. 


조금 어려웠을지도 모르겠습니다. 프로그래밍 공부를 전에 했다면 너무나 당연한 이야기일것이지만, 처음 배우는 분들은 너무 어려울 것입니다. 저는 플래시를 통해 프로그래밍을 배웠고, 자바스크립트를 통해 좀더 깊이 있는 이해가 쌓인 듯 합니다. 유니티 C#을 공부하며, 이제 좀 더 클래스의 개념, 오브젝트의 개념이 명확해지는 듯 합니다. 어렵다면… 다시 보고, 최대한 이해하려고 노력하며, 많은 자료를 살펴보시기를 추천합니다. 책도 다시 보고, 강의도 다시 듣고…. 그리고 너무 어려우면 좀 시간을 두고 나중에 다시 보시면 됩니다. ^^ 하다보면.. 이해됩니다. 얼마전 유니티 코리아에서 인디게임을 개발한 개발자가 그러더군요.. 그냥 했다고.. 프로그래밍은 우직하게 버티는 것이 중요합니다. 또.. 나는 할수 있다라는 자신감을 마음에 두고 꾹 참고 버텨야 실력이 느는 것 같습니다. 열심히 공부하신느 여러분들을 응원합니다. 33강까지 잘 오신 분들은 하실 수 있습니다. 화이팅입니다. ^^

2 0

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

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

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


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


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


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

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


여러분 생각은 어떤가요?

top