꽃미남 프로그래머 김포프가 창립한 탑 프로그래머 양성 교육 기관 POCU 아카데미 오픈!
절찬리에 수강생 모집 중!
프로그래밍 언어 입문서가 아닌 프로그래밍 기초 개념 입문서
문과생, 비전공자를 위한 프로그래밍 입문책입니다.
jobGuid 꽃미남 프로그래머 "Pope Kim"님의 이론이나 수학에 치우치지 않고 실무에 곧바로 쓸 수 있는 실용적인 셰이더 프로그래밍 입문서 #겁나친절 jobGuid "1판의내용"에 "새로바뀐북미게임업계분위기"와 "비자관련정보", "1판을 기반으로 북미취업에 성공하신 분들의 생생한 경험담"을 담았습니다.
Posted by ozlael

cocos2d-x에 프로파일링 기능이 제공되고 있지만, 기본적으로 배포시에는 비활성화 되어 있지요. 그 사용법에 대한 간단한 팁을 제공해드리고자 해요. 뭐 거창한건 아니구요 원하는 구간의 시작과 끝에 태깅을 하면 그 구간의 호출 수 및 시간등을 보여주는 방식이지요.

일단 기능을 활성화 기키려면 ccConfig.h에 디파인 되어 있는 CC_ENABLE_PROFILERS 를 1로 켜주면 되요. 그리고 사용 시는 원하는 구간에 CC_PROFILER_START("") CC_PROFILER_STOP("")로 달아주면 끝!

그리고 프로파일링 결과를 보고 싶으면 CC_PROFILER_DISPLAY_TIMERS()를 호출해주면 출력창에 결과가 나오지요. 물론 출력창에 찍는것이니 매 프레임 호출하는것은 미친짓이겠지요. (저는 이 함수를 참고해서 화면에 출력되게 개조해서 써요)

근데 한가지 손봐줘야 할 것이 하나 있는데요, CC_ENABLE_PROFILERS를 켜주고 빌드하면 링크 에러가 나지요. CC_PROFILER_START, CC_PROFILER_STOP, CC_PROFILER_DISPLAY_TIMERS 등의 디파인은 CCProfiling.h에 선언되어 있는 전역함수들을 매핑한 것인데, 선언 시 CC_DLL 가 빠져있네요. 혹시 심심해할까봐 이런 소소한 똥방울 심어주는 오픈소스의 센스 ㅎㅎ

다음과 같이 CC_DLL이 빠진 곳은 빈칸 채우기를 해주면 되요.

class CC_DLL CCProfilingTimer : public CCObject

...

extern void CC_DLL CCProfilingBeginTimingBlock(const char *timerName);

extern void CC_DLL CCProfilingEndTimingBlock(const char *timerName);

extern void CC_DLL CCProfilingResetTimingBlock(const char *timerName);

그리고, CCParticleBatchNode.cpp에 있는  CCParticleBatchNode::draw() 메소드에서 프로파일러를 사용하고 있는데,  CC_PROFILER_START로 되야 할 곳에  CC_PROFILER_STOP로 되어 있어요. 이곳도 살포시 수정 해주시고 빠진 include도 추가해주세요. 귀챦지만 어쩔 수가 없네요. 이런게 오픈소스의 잔재미죠;;

디버깅이 잘 안되서 머리 식힐 겸 글을 올리는데 하나도 안식네요. 훗. 롤이나 한판 해야겠어요. 그럼 모두들 즐트롤~

반응형
,
Posted by ozlael

들어가며

많은 게임 개발자들이 그렇듯이 저 역시 어릴적부터 게임을 즐겨왔습니다. 게임은 유년기에 있어서는 좋은 추억이었고, 청소년기에 있어서는 꿈이었습니다. 그리고 현재에 있어서는 삶의 동반자입니다. 하지만 모두들 아시다시피 게임은 사회의 적으로 몰리고 있고, 개발자들 역시 범죄자 취급을 받으며 최악의 상황으로 치닫고 있습니다. 저 역시 항상 이에 대해 분개하고 있고 게임이 나쁜 것이 아니라고 외치고 있습니다. 게임을 하면 폭력적으로 변한다느니 뇌가 손상된다느니 등의 헛소리에 대한 반박은 문제가 되지 않습니다.

그럼 아이들이 게임에 왜 빠지는데? 게임이 일부러 빠지게 만드는거 아니야?

셧다운제 아니면 방법이 있긴해?

하지만 이러한 질문들에 대해서는 스스로 벙어리가 될 수 밖에 없습니다. 뭔가 아니긴 한데 딱히 뭐가 어떻게 되는 것인지는 논리적으로 설명을 할 수가 없습니다. 그냥 아니라고 그건 잘못 생각하는거라고 아우성치는 것 뿐 할 수 있는게 없습니다.

정말... 정말 게임이 나쁜것인걸까... 난 지금까지 뭘 한거지?

사실 제가 게임을 만드는데 있어 그럴싸한 철학이라든지 사상이라든지 따위는 없었습니다. 그냥 게임이 좋아서 게임을 만들어왔고, 모두들 그러한 게임을 즐겁게 즐겨줄 거라는 막연한 생각 뿐이였습니다. 그러다보니 현 시국에 와서는 사상이 흔들릴 수 밖에 없었습니다. 정말 궁금했습니다. 내가 가지고 있는 사상은 무엇일까? 내가 생각하는 게임이 잘못된것일까?

그래서 게임과 중독에 관한 생각을 정리하고싶어서 관련 글들을 이것 저것 읽어보았었습니다. 많이 읽어보지도 못했고 아직도 봐야할 것 들이 많지만 그동안 제가 생각한 내용들을 정리해볼까 합니다. 제가 똑똑하지 못하여 잘못 이해한 것이 있을수도 있지만 제가 생각하는 답변들을 정리해볼까합니다. 그동안 아무 생각도 없다가 급하게 급조하여 프랑케슈타인처럼 이것 저것 짜집기 해 놓은 논리라 빈 틈이 많을 수도 있습니다. 제 생각이 무조건 옳다 주장하는게 아니라 여러분들과 생각을 공유하고 의견을 나누고 싶어 쓰는 글이니 많은 의견 부탁드립니다.


현재의 게임

우리가 20년전만해도 PC게임을 즐기는 아동청소년은 일부에 불과했습니다. 예전이라 통계가 없어 기억에 의존할 수 밖에 없어 정확하지는 않지만 전체의 5%정도에 불과하지 않을까 싶습니다. 하지만 오늘날에는 게임이 일부만의 문화가 아닙니다.  2011년 청소년 매체이용 실태조사에 의하면, 70%이상이 온라인게임을 이용한 경험이 있다고합니다. 그렇다면 무엇때문에 게임을 이용하는 아동청소년들이 증가한 것입니까? 물론 PC와 인터넷의 보급이 절대적인 이유를 차지하겠지만 그것만으로는 설명하기에는 2%가 부족한 감이 있습니다. 

또한 장르가 편중화 되어 있다는 것도 예전과 다른점이라 할 수 있겠습니다. 예전만 해도 슈팅, 아케이드, 액션, RPG 등 장르 불문하고 게임을 즐겼습니다. 현시대에 와서 그 장르는 더 다양해지긴 했지 주 선호 장르는 MMORPG로 고정되어 있습니다. 한국게임산업개발원에서 보고한 "청소년 게임중독 예방 프로그램 효과 검증 연구"에 따르면 청소년들이 가장 주로 하는 게임 장르가 MMORPG라고 합니다. 초등학생은 46%가, 중학생은 32%가 MMORGP 를 즐긴다고 합니다. 유독 MMORPG가 인기 있는 이유는 또 무엇입니까? 아무래도 그 이유를 찾아보기 위해서는 요즘 어린이들의 생활부터 살펴봐야 할 것 같습니다. 


현재의 아이들

요즘의 학교 생활은 아이들에게는 가혹하기만 합니다. 학교에서는 제대로된 실험실습은 사라진 지 오래이고 모든것을 책으로만 학습합니다. 방과후에는 친구들과 놀지도 못하고 학원을 전전하며 밥도 제때 못먹습니다. 저녁시간에 집에 가 봤자 엄마도 없어 정크푸드로 끼니를 때우기도 합니다. 그것도 그럴것이, 아이의 학원을 몇 개씩 보내려면 부모도 맞벌이를 할 수 밖에 없어서 아이를 챙겨주기도 힘듭니다. 정시 퇴근도 못하고 밤 늦게 되서야 퇴근 할 수 밖에 없습니다. 밤되고나서야 가족이 모이면 “우리가 너 공부시키려고 이렇게 고생한다”라며 아이를 압박합니다. 당연히 아이는 스트레스를 받으며 성적을 비관할 수 밖에 없습니다. 아이들이 받는 스트레스는 그 나이대에 견디기에는 너무 가혹합니다. 학교가 가기가 싫어지고 심지어는 자살 충동도 느낄 수 밖에 없습니다. 

- 지식채널E, 2007 -

"청소년 자살예방 NECA 원탁회의 합의문"에 의하면 청소년의 사망 중 자살이 30%에 이른다고 합니다. 최근 10년동안 2배 가까이 늘어난 것입니다. 아이들이 행복했다면 자살같은거는 생각도 하지 못했을 것입니다. "2012한국어린이청소년행복지수국제비교"에 의하면 우리나라 어린이와 청소년들이 느끼는 행복감은 OECD 국가중 가장 꼴지라고 합니다. 조사를 시작한 2009년부터 연속 4년동안이나 계속 꼴지인 것입니다. 우리나라 아동청소년들은 행복을 느끼지 못하고 불행속에서 하루하루를 살아가고 있는 것입니다.

어린 시절의 행복감은 성인이 된 이후에도 삶의 질에 영향을 준다는 것은 학자들이 공통적으로 하는 이야기입니다. 행복은 다양한 측면에서 인간의 삶에 긍정적으로 기여를 하며 그 중어린 시절에 경험한 행복감은 그 자체로서도 중요할 뿐만 아니라 평생에 걸쳐 긍정의 힘을 제공하는 원천이 된다는 것입니다. 특히 초등학교 시기는 자아성장의 결정적인 시기로써 순조롭게 발달하지 못하고 실수나 실패를 거듭하게 되거나 가정, 학교, 사회가 부정적인 태도를 취하게 되면 아동은 부적절함과 열등감을 갖게 됩니다. 어린시절이 행복하지 못하다면 성인이 되어서도 건강한 사회 구성원이 되는데 큰 어려움이 따르게 되는 것입니다.


행복이란

그렇다면 행복이란 무엇일까. 사실 행복이라는 단어는 그 자체가 추상적인데다가 무형적인 개념이라서 적절한 기준과 정의를 내리기는 애매합니다. 다만 행복의 관점은 여러 학자들에 의해 오랜시간동안 논의가 되어 왔고 그 중 하나가 철학적 견해와 사회과학적 견해가 수렴된 심리적 안녕감( psychological well-being)이라는 구체적인 개념의 정의입니다. 심리적 안녕감의 관점에서 삶의 질이 높다는 것은 한 개인이 사회 구성원으로서 심리적으로 잘 기능하고 있음을 의미합니다. 이 심리적 안념감은 다음과 같은 여러 요인들로 이루어집니다.

 첫째, 자기수용(self-acceptance). 이는 자기 자신을 있는 그대로 만족스럽게 받아들이고 인정하는 것을 의미합니다. 자신의 행동과 동기 그리고 감정을 적절하게 인지하는 것을 넘어선 자신에 대한 긍정적 관심으로써 일종의 자기에 대한 평가(self-evaluation)라 할 수 있습니다. 합리적인 목표의 자기애로써 쉬운말로는 자존감과 어느정도 일맥상통한다고 볼 수 있습니다.

 둘째, 개인적 성장(personal growth). 이는 자기실현에 관련된 것으로써 지속적인 잠재력 개발 과정을 포함합니다. 인생의 각 단계에서 지속적으로 성장하고 발전하고 있다는 느낌을 받는것입니다. 또한, 새로운 경험에 기꺼이 도전하는 자세를 의미합니다. 

 셋째, 타인과의 긍정적 관계(positive relations with others). 시간과 장소를 불문하고 타인과 친밀하고 의미 있는 관계를 맺는 것은 행복한 삶을 구성하는 중심적 요소라 할 수 있습니다.

 넷째, 삶의 목적(purpose in life). 삶에 내재한 근본적인 도전은 삶의 의미와 방향을 매순간 새롭게 정립해야 한다는 것입니다. 

 다섯째, 환경에 대한 통제능력(environmental mastery). 이는 자신이 심리적 상황에 적합한 환경을 만들어내고,그 환경에 적극적으로 참여하고, 환경을 지배할 수 있는 능력을 의미합니다. 즉, 복잡한 환경들을 조절하고 다루기 위한 능력을 요구하며,육체적 정신적 활동들을 통하여 창조적으로 변화하는 세계 속으로 나아가기 위한 능력을 강조하는 것입니다.

 여섯째,자율성(autonomy). 이는 자기결정,독립심 그리고 그 속에서 행동의 통제와 같은 특징입니다. 자율성이 강한 사람은 집단적인 두려움 등에 집착하지 않고 스스로의 결정에 의해 생각하고 행동하게 되는 것입니다.

아마 이쯤에서 제 의도를 눈치 채셨을겁니다. 제가 하고싶은 말은 바로 게임에서 이러한 행복을 느낄 수 있다는 것입니다. 심리적 안녕감과 게임에서 제공해주는 보상은 놀라우리만치 정확히 일치합니다. 그럼 게임에서 어떠한 요인들을 제공해주는지 한번 짚어보겠습니다.


도전과 성장

게임은 플레이어에게 웅장한 도전을 제시합니다. 플레이어는 그 도전을 뛰어넘고 게임은 더 높은 도전을 또 제시합니다. 도전을 뛰어넘고 나면 끊임 없이 난관을 제시하고 그 난관을 뛰어넘는 기회를 제공합니다. 

 하지만 그 난관이 터무니없이 높은 목표를 제시하지 않습니다. 그 어떤 게임도 이제 막 나무몽둥이를 쥐고 나무갑옷을 입은 레벨1 모험가에게 화산지대가서 레벨 100 레드드래곤을 잡아오라는 어려운 일을 시키지 않습니다. 모험가 역시 그러고 싶어하지도 않습니다. 그랬다가는 너무 높은 목표에 좌절을 느끼고서는 하고자 하는 의지를 잃어버리고서는 금새 관둬버릴것입니다. 그러므로 게임에서의 도전은 플레이어가 인내할 수 있는 수준 내에서의 조금 높은 난이도로 제공합니다.

 여기서 잠깐 조금 재미없는 이야기를 하고자합니다. 게임의 재미나 중독을 설명하는데 응용되는 이론들 중 몰입(flow)이론이란 것이 있습니다. 칙센트 미하이 교수가 30년에 걸쳐 체계화한 이론인데 게임 뿐 아니라 스포츠나 작곡 등 삶의 전반에서 목적으로하는 도전 정신이나 즐거움에 의한 자발적인 행동에서 나온 몰입경험을 설명하는 이론입니다. 이 이론에서 플로우(flow)를 다음과 같이 정의합니다.

몰입을 통해 행복한 기분을 느끼는 심리상태. 어떤 일에 집중을 해 내가 나임을 잊어버릴 수 있는 심리적 상태로, 곧 행복을 의미한다. 즉, 인간의 행복은 개인이 갖고 있는 잠재능력을 한껏 발휘하는 상태에서 나온다.

이런 최적의 경험 상태(state of optimal experience) 에 도달하기 위해 인간은  도전(challenge)과 기술(skill) 이 두 가지의 전제조건이 있어야 한다고 설명합니다. 도전과 기술이 너무 어렵지도 않고 너무 쉽지도 않은 일정 수준 이상에서 균형을 이루고 있으면 몰입에 빠져들게 된다는 것입니다. 이러한 개념을 게임에 적용시켜보면 다음과 같은 그래프로 표할 할 수 있을 것이고 앞서 제시한 레벨 1 모험가의 성장에 적용 해 볼 수 있을것입니다. 이러하듯 게임은 적절한 난이도의 목표를 플레이어에게 제공하며, 플레이어는 해결과 도전을 반복하며 성장을 하며 모험에 빠져들게 됩니다. 

출처 : MMORPG의 재미 평가 모델에 관한 연구, 윤형섭

또한 이러한 도전과 모험을 통한 성장 과정에 있어서 항상 긍정적인 피드백이 제공됩니다. 게임에 있어서 가장 중요한 요소가 피드백이라고 해도 과언 아닐 정도로 중요합니다. 퀘스트를 수행하고나면 단 돈 1원이라도 보상을 해줍니다. 꼭 거대한 용이 아니더라도 몬스터를 잡고나면 즉각적으로 경험치로 피드백을 제공을 해줍니다. 뿐만 아니라 경험치 + 100 ,힘 +10 등 능력치의 향상을 시각적으로 보여줌으로써 플레이어가 성장하고 있음을 확실히 긍정적으로 느끼게 해줍니다. 이러한 모험과 성장을 통해 플레이어가 스스로 현재의 능력에 대하여 제대로 평가하고 미래에 대한 긍정적인 도전정신과 함께 성장을 해 나감으로써 자기수용(self-acceptance)과 개인적 성장을 느끼면서 행복감을 얻게 됩니다. 

 하지만 우리나라 아동청소년들의 현실에서는 이러한 긍정적인 피드백이 존재하지 않으며, 항상 높은 목표와 어려운 성장에 부딪히게 됩니다. 결과는 항상 저 멀리 있어 잡히지 않고 쉽게 지쳐버리고 실패에 직면합니다. 그렇게 좌절하고 불안해하고 비관을 느끼고서는 불행해 할 수 밖에 없습니다. 


협력

물론 게임에서도 항상 성공만 있는 것은 아닙니다. 때로는 혼자 하기에는 너무 벅찬 난관에 부딪히기도 합니다. 하지만 그렇다고 해서 바로 좌절하는 것이 아니라 다른 사람들과 협력하여 난관을 헤쳐나갑니다. 길드나 파티를 통해서 서로 신뢰하고 유대감을 가지며 플레이하는 것입니다. 이들은 같은 목표를 향하여  협력하여 각자의 역할을 수행해나갑니다. 이는 예전의 우리가 어린시절에 플레이해왔던 스탠드얼론 게임에서는 찾아 볼 수 없는 강력한 시스템입니다. 

이러한 협력을 꼭 온라인 친구들하고만 하는 것은 아닙니다. 이러한 협력은 학교 친구들과도 함께 합니다. 2007년 행안부에서 조사한 바에 따르면 아동 청소년들의 PC방에 가는 이유 중 60% 이상이 친구들과 함께하기 위해서라고 합니다. 이러한 협력을 통해서 서로 친해지며 그룹 구성원으로써의 유대감을 가지게 됩니다. 

 최근 이혼률이 증가하면서 혹은 맞벌이가 늘어나면서 등의 이유들로 가정에서도 외로움을 느끼는 사례가 많아졌습니다. 학교에서도 학우들은 경쟁의 대상, 비교의 대상 혹은 폭력의 대상일 뿐입니다. 청소년의 자상 요인 중 1순위가 외로움이라는 한국정보문화원의 발표를 통해 그 심각성을 알 수 있습니다. 하지만 게임을 통해서 타인과의 긍정적 관계(positive relations with others)를 맺음으로써 행복을 느낄 수 있는 것입니다.  


서사시

플레이어는 게임속에서 거대한 세계를 여행합니다. 그 세계관의 웅장한 대 서사시 안에서 영웅이 되어 이야기를 진행합니다. 장엄한 임무의 주인공이 되어서 영웅으로써의 맏은 바 임무를 수행하며 모험을 합니다. 서사적이든 비서사적이든 그 이야기 안에 동화되어 임무를 수행합니다. 그렇기때문에 모험을 하면서 동기와 영감을 얻고 세계를 여행합니다. 현실에서는 왜 하루종일 공부해야하는지, 왜 스트레스 받으며 고통스러워야하는 지 모른채 강압에 의해 수동적인 삶을 살지만, 게임 안에서는 삶의 목적(purpose in life)을 가지며 기꺼히 도전합니다.

 그렇기때문에 게임 안에서는 그 누구도 수동적이지 않습니다. 그 누구도 모험을 강요하지 않지만 스스로의 의지로써 각자 맡은바 목적을 수행합니다. 자신의 의지를 이야기에 개입시키고 게임은 다시 그 결과를 반영함으로써 플레이어로 하여금 이야기를 이끌어 나가도록 합니다. 플레이어가 한 의사 결정과 행동으로 인하여 게임의 세계가 변하게 되는 것을 경험하는 것입니다. 게임의 세계에 플레이어가 직접 개입함에 따라 전개가 달라지는 데에 영향력을 행사 할 수 있습니다. 이미 정해져있는 스토리 라인이라도, 그 내용의 전개는 플레이어들 간의 상호작용과 의사결정에 따라 달라 질 수 있습니다. 이는 게임의 세계에 대한 영향력을 갖고 통제력을 행사 할 수 있다는 것을 의미합니다. 이러한 과정으로 환경에 대한 통제능력(environmental mastery)과 자율성(autonomy)을 얻음으로써 현실에서 채워주지 못하는 행복을 느낄 수 있는 것입니다.

이토록 아동청소년들이 게임을 한다는 것은 행복하고 싶어하는 인간의 기본적인 욕망에 기인한 것입니다. 현실에서는 행복하지 못하기때문에, 본인은 인지하지 못하지만, 본능적으로 자신을 보호하기 위해서 게임에서 행복감 찾는것입니다. 그로써 건강한 사회 구성원으로써 성장할 수 있도록 노력하는 것입니다.


동기

여기서 또 잠깐 심심한 이야기를 또 꺼내보도록 하겠습니다. 인간이 어떠한 행동을 하는 데에는 동기가 주된 요인이라 여기고, 어떠한 요인이 사람의 행동을 일으키고 유지시키는가에 초점을 맞추는 동기(Motivation) 이론이란 것이 있습니다. 이는 게임의 재미 연구에서도 사용되는데, 심리학적 기반의 연구에 초점을 맞추어 플레이어들이 어떤 동기에 의하여 게임을 이용하는지 설명하는데 사용됩니다. 심리적 충족감 때문에 게임에 빠지게 된다는 것입니다.

동기는 크게 내적 동기(intrinsic motivation)와 외적 동기(extrinsic motivation)로 나누고 또한 이를 성취(achievement)와 비성취(non-achievement)로 구분하여 설명되고 있습니다. 그러한 요소들을 보자면 성취 내적 동기 차원으로는 보상이나 승리 등이 있을 것이며, 비성취 외적 차원으로는 대인 관계 등이 있을 것입니다. 앞서 설명한 내용들과도 일맥 상통 합니다. 즉, 게임에 대한 동기는 내적, 외적 차원과 성취 비성취 차원에서 모두 발생하는 것입니다. 

그러한 동기들을 욕구로써 부여하는 관점도 있습니다. 매슬로우가 제시했던 욕구계층 5단계를 3단계로 개선한 알더퍼의 ERG 이론이 그것입니다. 여기서는 인간의 핵심적 욕구를 존재욕구(existence needs), 관계욕구(relatedness needs), 성장욕구(growth needs) 세 가지로 분류합니다. 생퍼 욕구는 의식주같이 생존을 위해필요한 생리적이나 물리적인 욕구를 의미합니다. 관계욕구는 타인들과의 관계를 맺으며 사회적 존재로 소속되고자하는 욕구입니다. 더 나아가서는 사랑과 존경을 받고자 하는 욕구를 포함합니다. 성장욕구는 말 그대로 개인의 성장을 하고자하는 내적 욕구를 의미합니다. 개인의 능력을 최대한 이용할 뿐 아니라 새로운 능력을 개발하는 것을 포함합니다. 자아실현과 일맥 상통합니다. 이러한 모델에서도 게임을 하는 욕구를 찾아 볼 수 있을 것입니다.

- 이미지 출처 : ryuaryua.tistory.com -

이는 스마트폰 게임에서도 쉽게 찾아 볼 수 있을 것입니다. 최근 스마트폰이 많이 보급화되면서 게임이 많이 보편화 되었는데, 주로 아이러브커피나 퍼즐주주같은 소셜 게임을 실생활에서의 친구들과 매일 접촉하기 위해 사용합니다. 이런 게임들은 친구들과의 관계가 작용하지 않았다면 아무런 인기를 얻지 못했을 게임들입니다. 바로 ERG 이론의 관계욕구를 충족시켜주는 것입니다.

좀 더 나아가서 MMORPG와 LOL의 이야기를 한번 해보겠습니다. 플레이어는 웅장한 필드 전투나 협곡에서의 전투에 임할 시 각자 맡은 바 임무를 결정하여야 할 상황에 놓입니다. 이때 얼핏 생각해서는 적을 직접 타격하고 컨트롤해가면서 더 강력한 공격을 퍼붓는 기사나 마법사등 소위 딜러의 역할이 더 재미있어 보일수도 있겠습니다. 하지만 실제로는 모두가 딜러라는 역할을 하는 것은 아닙니다. 오히려 이러한 딜러들이 공격받지 않고 안전하게 전투에 임할 수 있도록 어그로를 끌며 적들의 공격을 온몸으로 받아내고 기꺼이 적진으로 뛰어드는 탱커의 역할들도 인기가 많습니다. 또한 직접 전투에 뛰어들지는 않지만 동료들을 힐링해주고 버프를주며 전투를 이끌어나가는 힐러나 서포터의 임무들도 인기가 많습니다. 이러한 탱커와 서포터들은 팀을 승리로 이끌어가기 위해 자신들을 기꺼이 희생하고 몸을 내던집니다. 바로 명예를 위해서 말입니다. 이러한 희생을 했다고 돈을 더주거나 경험치를 더 주는 것도 아닙니다. 더 쎄지는 것도 더더욱 아닙니다. 이들은 바로 존경과 명예를 위해 이를 마다치 않는 것입니다. 단순히 팀원들과 그룹을 맺는데서 만족하는 것이 아니라, 덕분에 이겼다는 친창과 존경을 받고 명예를 얻는 욕구를 실현하는 것입니다. 관계욕구가 게임의 동기가 되어 욕구의 최고지점까지 끌어 올리게 되는 것입니다.

- 이미지 출처 : 리그 오브 레전드 -

또한, 게임이 앞서 예를 들었던 판타지만 있는 것은 아닙니다. 게임 안에서는 중세 판타지의 기사가 될 수도 있고, 미래 우주의 제다이 기사가 될 수도 있습니다. 꼭 전투만 하는 것이 아니라 유명한 카레이서가 될 수도 있고 훌륭한 경주마의 기수가 되기도 합니다. 아니면 동물들과 함께사는 동화의 주인공이 되기도 합니다. 비록 대리자아이긴 하지만 게임에서는 이처럼 다양한 자아를 표출 할 수가 있는 것입니다. 게임의 대리자아인 아바타 이를 통해 성장욕구를 충족 시킬 수 있기 때문에,  가장 영웅적이고 이상적인 미래상의 진실한 자신을 표현할 방법이 되는 것입니다.


마치며

이처럼 게임은 행복하고 싶다는 욕구에 대한 갈망이 반영되는 행위입니다. 아이들이 게임을 한다는 것은 단순히 저차원적인 순간의 쾌락을 탐미하는 것이 아닙니다. 인간의 근본적이면서도 고차원적인 자아 실현에 대한 갈망이 투영되는 것입니다. 무한경쟁체제에서 점점 없어져가는 자신의 가치를 잃어버리지 않고 자존감을 지키기 위한 몸부림인 것입니다. 게임은 이토록 건강한 여가 생활이지만 그걸 모르는 기성세대들은 게임이 무슨 어둠의 포스인마냥, 탐닉해서는 안되는 마약인 마냥 치부하고 있는것입니다. 

앞서서도 말씀드렸다시피 제 생각이 무조건 옳다고 주장하고자 쓴 글이 아닙니다. 많은 분들과 이에 대한 의견을 나누고 보완하고자 쓴 글입니다. 의견 있으시면 답글 달아주시면 좋겠습니다. 허접한 글 끝까지 읽어주시느라 수고 많으셨습니다. 감사합니다.




반응형
,

게이머 구분하기

QA 2013. 3. 4. 09:00
Posted by 알 수 없는 사용자

게이머 구분하기에 대한 글을 썼습니다.

표 같은게 삽입 되느라 블로그에 재가공해 올리기 어려워서 PDF 버전으로 바로 볼 수 있도록 링크를 공유 드립니다.

감사합니다.

본문 내용 중 서론 부분만 올려 봅니다. :)

———

옛날부터 하드코어 게이머와 캐쥬얼 게이머를 어떻게 나눌 것인가에 대해서는 게임 업계 혹은 게이머들
사이에서도 논란이 있는 화제 거리였다.
하지만 그 대부분이 게임의 장르 혹은 게임의 플랫폼을 기준으로 삼고는 하였다.

위키피디아의 게이머 설명 (http://en.wikipedia.org/wiki/Gamer)

간단하게 표로 정리해 보았다.
분명하게도 논란이 있는 기준이다. 나는 MMORPG를 하지만 레이드나 공대(길드) 활동은 하지 않고 퀘
스트만 즐긴다. 는 사람이 있다면 하드코어 게이머라고 부르기 애매할지도 모르겠다. (그래서인지 미들코
어 게이머, 익스트림 게이머등의 신조어가 생겨난다.)

왜 하드코어 게이머와 캐쥬얼 게이머를 구분 지으려고 노력하는 것일까?

———

본문 전체는 아래 링크에서 보실 수 있습니다.

https://docs.google.com/file/d/0B4CK_OCon1K7Z05iQjN5NGNxbzg/edit?usp=sharing
 

감사합니다.

반응형
,

밸런싱, 숫자의 함정

기획 2013. 1. 25. 10:00
Posted by 월하

기획, 특히 밸런싱쪽을 하다 보면 숫자를 믿게 됩니다.

 

'나의 엑셀 데이터는 완벽하다!' 라거나 "드랍 확률이 50%이니 두 번에 한 번은 나오겠지. 얻기 쉽네' 라거나 말이죠.

 

음... 물론 산술적 데이터를 작성하고 이를 바탕으로 밸런스를 잡는건 중요 합니다.

 

밑도 끝도 없이 무작정 우기는 것보다 더 명확하고 다른 사람(자기 자신을 포함)을 설득 하기도 쉽죠.

 

하지만 이 숫자에는 많은 함정이 있습니다.

 

속는 사람이 유저가 될 수도 있고 기획자 자신이 될 수도 있죠.

 

물론 잘만 이용하면 아주 사악한 컨텐츠를 만들수도 있죠.

 

 

 

확률 이야기를 잠깐 해볼까요?

 

가령...

 

 

1에서 100까지 적힌 숫자가 있는 종이 중 1이 적힌 종이를 뽑는 유저에게 뭔가 특별한 상품을 주기로 하였습니다.

 

정말 명확하게 1% 확률로 상품을 지급 하는 구조가 되겠죠.

 

그런데....

 

1. 하나의 상자가 있습니다.

2. 이 상자에는 1에서 100의 숫자가 적힌 종이가 들어 있습니다.

3. 유저들은 자기가 원할 때 이 상자에서 아무 종이나 무작위로 뽑습니다.

4. 한 번 뽑은 종이는 다시 상자에 넣지 않습니다.

5. 모든 종이를 다 뽑으면 그 때 다시 종이들을 모두 넣습니다.

6. 또는 하루가 지나면 뽑힌 종이들을 모두 넣습니다.

 

이런 조건 이라면 어떨까요?

 

 

명확하게 1%의 확률이라고 할 수 있을까요?

 

처음에 시도한 사람이 1이 적힌 종이를 뽑는다면?

 

정말 1%의 확률 일까요?

 

1이 적힌 종이가 안나올수록 당첨 확률은 증가 됩니다.

 

하지만 1이 적힌 종이가 나온 이후로는 확률이 0%가 됩니다.

 

'뭐 이런 엉망인 시스템이 다 있어!' 라고 할지 모르지만..... 

 

 

 

자.... 지금부터 재미있는 이야기가 됩니다.

 

 

1. 유저들에게 당첨자가 있다는걸 알려 주지 않는다.

 

자~ 당첨자가 나왔지만 유저들은 계속 해서 뽑기를 돌립니다.

 

아니 돌릴 마음이 있는 유저들은 계속 돌리겠죠.

 

한 명이 한 번만 돌릴수도 있고, '계속 돌리면 언젠간 나오겠지!'라고 정말 계속 돌리는 유저가 있겠죠.

 

정말 고마운 유저죠. 어차피 꽝인걸 알면서도 계속 돌려주고 결국 초기화 되거나 날이 바뀌어 초기화 되어 당첨이 되는....

 

이미 당첨 유저가 나와 계속 꽝이지만 자긴 운이 없는줄 알거나 그렇겠죠.

 

어차피 날이 바뀌면 초기화 되는데도 열심히 돌려 초기화 시킨 후 당첨이 되겠죠.

 

 

 

2. 유저들에게 당첨자가 있다는걸 알려 준다.

 

유저들이 위의 룰을 알고 있다면 사실 알려주는게 더 재미있습니다.

 

자... 초반에 뽑을지 아니면 슬슬 눈치를 볼지.....

 

분명 당첨자가 나오기 전에는 늦게 뽑을수록 당첨 확률이 올라 갑니다.

 

1/100 에서 2/100, 3/100 4/100 ....... 100/100 이런식으로 말이죠.

 

그런데 중간에 누가 덜컥 당첨 된다면?! 그 뒤로는 전부 꽝!

 

유저들 입장에선 치열한 눈치 싸움이 일어나겠죠.

 

그런데 당첨이 나오면 더 재미있어 집니다!!

 

왜?!! 만약 후반에 당첨이 나왔고 남은 종이가 얼마 없는 경우...

 

1. '이번엔 후반에 나왔으니 다음엔 초반에 나올거야'

 

2. '이번에 후반에 나왔으니 다음에도 후반에 나올거야'

 

3. '순서는 어차피 랜덤이고 많이 뽑을수록 확률이 높아'

 

4. '어차피 랜덤. 될 놈은 되고 안될 놈은 안되지.'

 

 보통 이 네 가지로 나누어 지죠.

 

 

3, 4번 유저의 경우 뭐 아무일도 없지만...

 

1, 2번 유저의 경우  치열한 눈치 싸움이 벌어지죠.

 

1번 유저의 경우 앗싸리 미리 랜덤 박스를 다 돌리고 빨리 초기화 한 후 자기가 뽑을 지

 

아니면 날이 지나서 초기화 되면 그 때 잽싸게 할 지 눈치를 보겠죠.

 

2번 유저의 경우 초기화 될 때 까지 기다리다가 초기화가 되면 슬슬 눈치를 보겠죠.

 

두 유저 모두 초기화 되는 시점을 신경 쓰게 될 테고 초기화가 되는 순간

 

1번 유저의 러쉬와 2번 유저의 눈치 작전이 시작 되는....

 

확률 이야기는 여기까지 하고 이제 고정 수치(공격력) 이야기를 해볼까요?

 

 

 

A 유저는 10초에 한 번 10의 대미지로 공격 할 수 있습니다.

 

B 유저는 1초에 한 번 1의 대미지를 줄 수 있습니다.

 

두 유저가 싸우면 누가 이길까요??

 

자.... 두 유저 모두 체력이 20 입니다.

 

그럼 시간당 체력이 아래와 같이 되겠죠.

 

시간

A 유저 대미지

B 유저 대미지

A 유저 남은 체력

B 유저 남은 체력

0

0

0

20

20

1

10

1

19

10

2

0

1

18

10

3

0

1

17

10

4

0

1

16

10

5

0

1

15

10

6

0

1

14

10

7

0

1

13

10

8

0

1

12

10

9

0

1

11

10

10

0

1

10

10

11

10

1

9

0

 

A 유저가 이기네요.

 

그럼 만약 B 유저가 2초에 한 번 2의 대미지를 주면 어떻게 될까요?

 

시간

A 유저 대미지

B 유저 대미지

A 유저 남은 체력

B 유저 남은 체력

0

0

0

20

20

1

10

2

18

10

2

0

0

18

10

3

0

2

16

10

4

0

0

16

10

5

0

2

14

10

6

0

0

14

10

7

0

2

12

10

8

0

0

12

10

9

0

2

10

10

10

0

0

10

10

11

10

2

8

0

 

그런데 체력이 20이 아닌 21이 된다면 어떨까요?

 

시간

A 유저 대미지

B 유저 대미지

A 유저 남은 체력

B 유저 남은 체력

0

0

0

21

21

1

10

2

19

11

2

0

0

19

11

3

0

2

17

11

4

0

0

17

11

5

0

2

15

11

6

0

0

15

11

7

0

2

13

11

8

0

0

13

11

9

0

2

11

11

10

0

0

11

11

11

10

2

9

1

12

0

0

9

1

13

0

2

7

1

14

0

0

7

1

15

0

2

5

1

16

0

0

5

1

17

0

2

3

1

18

0

0

3

1

19

0

2

1

1

20

0

0

1

1

21

10

2

-1

-9

 

둘 다 동시에 죽겠군요.

 

이번에는 B 유저가 3초에 한 번 3의 대미지를 준다고 해볼까요?

 

시간

A 유저 대미지

B 유저 대미지

A 유저 남은 체력

B 유저 남은 체력

0

0

0

21

21

1

10

3

18

11

2

0

0

18

11

3

0

0

18

11

4

0

3

15

11

5

0

0

15

11

6

0

0

15

11

7

0

3

12

11

8

0

0

12

11

9

0

0

12

11

10

0

3

9

11

11

10

0

9

1

12

0

0

9

1

13

0

3

6

1

14

0

0

6

1

15

0

0

6

1

16

0

3

3

1

17

0

0

3

1

18

0

0

3

1

19

0

3

0

1

 

오오~ B 유저가 드디어 이겼습니다.

 

DPS(초당 공격력)는 1로 동일 합니다.

 

체력도 동일 합니다.

 

방어력 같은거 없이 무조건 고정 대미지가 들어 갑니다.

 

하지만 공격 속도, 체력에 따라 차이가 나게되죠.

 

DPS는 분명 대미지를 비교하는 좋은 기준이 될 수 있습니다.

 

하지만 상황에따라 많은 변수를 가지게 되는 녀석이라 맹신하게되면 망하죠. ㅋ

 

밸런싱을 잡을 때 가장 어렵고 귀찮은게 이런 요인들이 넘쳐 흐르기 때문이죠.

 

간단한 RPG게임이라도...

 

원거리와 근거리, 평타와 스킬, 지속 대미지와 한방 대미지....

 

몬스터와 플레이어의 이동 속도 등등...

 

고려할 사항이 너무 많죠.

 

그럼에도 이런걸 다 무시하고 산술적 수치만으로 밸런싱을 하게 되면 망하기 딱 좋죠.

 

뭐 결국 밸런싱은 테스트와 노가다의 극치입니다.

 

 

 

밸런싱을 하는 방법에는 몇 가지 방법이 있습니다.

 

일부 특출난 사람들은 감각적으로 밸런싱을 잡는 사람이 있다고 합니다.

 

하지만 그게 안된다면 계속 하여 반복 테스트 수정을 하는 거죠.

 

사실 밸런싱 만큼 공을 들인만큼의 퀄리티가 나오는것도 없습니다.

 

대신 경력이 늘고 노하우가 생기면 테스트, 수정, 최초 밸런싱을 할 때 시간이 줄어들게되죠.

 

 

 

.... 뭔 이야기를 하려고 했는지 잘 모르겠지만 여하튼

 

밸런싱을 할 때 숫자를 너무 믿으면 안됩니다!!

 

반응형
,
Posted by ozlael

들어가며


요즘 스마트 모바일 기기는 보편화되어있어 삶의 일부가 되어있어요. 스마트폰이 대중화되서 출퇴근길의 버스나 지하철의 사람들을 보면 거의가 스마트폰을 들고있죠. 또한 대중교통 안에서 뿐만 아니라 커피숖이나 공원에서 여유를 사람들을 보면 태블릿를 이용하고 있는 모습을 흔하게 접할 수가 있지요. 근데 이러한 스마트 기기를 이용하는 것을 보면 대부분이 게임을 즐기고 있어요. 모바일 기기가 대중화되면서 게임도 역시 대중화 된 것이예요.

하지만 게임이 많이 대중화 되었지만 그 흐름은 모바일에 있어요. 너도나도 모바일 게임을 개발하고 있고 오히려 모바일 게임을 개발하지 않는 곳을 찾아보기가 힘들어졌어요. 그러다보니 왠지 모바일 게임  한번쯤 만들어 보지 않으면 안될 것 같은 느낌이 들어요. 하지만 그렇다고 만사 때려치고 제대로 만들어보자느 것도 뭔가 아닌 듯 싶어요. 굳이 대규모 3D 게임까지는 필요 없고 간단한 2D 게임 정도만 만들어 보면 될 것 같아요.

자, 이번 글은 그런 분들을 위한 글이예요. 모바일 게임은 만들어보고는 싶지만 큰 시간 투자하기는 싫은 분들을 위한 글이라는 것이죠. 프로그래밍을 모르는 사람도 누구나 쉽게 만들어 볼 수 있는 모바일 게임을 하나 제작해보는 체험을 위한 글이예요. 물론 프로그래밍 없이도 게임 만들 수 있다는이야긴 아니구요, 제작 체험 정도는 무리 없이 해볼 수 있다는 이야기에요. 간단한 게임을 하나 제작해서 실제 스마트폰에 띄워보는 것 까지가 이 글의 목표예요.



개발환경


자 그럼 우선 대상 플랫폼부터 결정해야겠지요. 스마트폰 OS가 blackberry, win8, iOS, android 등 여러개가 있긴 하지만 점유율이 높은 구글 안드로이드와 애플 iOS만 고려하기로 해요. 두 플랫폼 모두 비중이 높기때문에 어느 하나만 지원해서는 안되고 두 플랫폼 모두 지원해야해요

안드로이드는 이클립스상에서 자바로 만들고, iOS는 Xcode상에서 오브젝티브C로 만들어요. 이렇게 두개의 플랫폼을 지원하기 위해 서로 네이티브 코드로 개발을 한다는 것은 상당히 껄끄럽겠지요. 네이티브로 개발하는 것이 불가능한 것도 아니고 또 그렇게 개발되고 있는 게임들도 있긴 하지만 우리는 큰 시간을 여기에 투자하고 싶지는 않으므로 고려하지 않기로 해요.

그럼 멀티플랫폼을 지원하는 개발환경을  고려해봐야겠지요. 먼저 떠오르는 것이 언리얼 엔진이나 유니티 엔진이겠네요. 인피니티 블레이드, 삼국지를 품다 등 실제로 많은 게임들이 이러한 엔진을 통해 탄생이 되었지요. 이러한 엔진들을 통하면 화려하고 강력한 그래픽으로 웅장한 게임들을 개발 해 낼 수가 있어요. 하지만 우리가 원하는 것은 단순한 게임이예요. 굳이 규모를 크게 만들고 싶지도 않고 그래픽도 그렇게 화려할 필요도 없어요. 애니팡이나 드래곤플라이트같이 아기자기한 2D 그래픽에 간단한 룰의 시스템이면 되요.

그런 간단한 2D 게임의 개발 환경이라면 플래시 만한게 없지요. 간단한 게임을 개발하기에 유용해서 예전부터 웹게임에 많이 채용되고 있었지요. 요즘은 플래시의 아성이 죽고 지는해가 되가긴 하지만 아직까지는 이만한 2D 게임 개발 환경은 찾아보기가 힘들긴 해요.

어랏? 근데 뭔가 이상하게 생각이 드실지 모르겠어요. 안드로이드야 웹브라우저에서  플래시가 지원되고있으니까 문제는 없는 것 같은데 아이폰은 플래시를 지원 하지 않으니 모바일에서는 멀티플랫폼이 아니지 않나요? 그리고 안드로이드에서도 돌아간다 쳐도 독립적인 어플리케이션이 아니라 웹브라우저 안에서 돌려보는 것은 원하는 형태가 아니지 않나요? 

하지만 걱정마세요. iOS와 안드로이드에서도 플래시로 만든 어플리케이션을 구동할 수 있는 방법이 있어요. 사실 오래 된 떡밥인데 많은 불들이 알지는 못하시더라구요. 쌩 플래시는 아니고 어도비 AIR(Adobe Integrated Runtime)를 이용하면 되요. 

AIR는 어도비에서 만든 RIA(Rich Internet Application) 프레임워크인데요, 인터넷 어플리케이션을 데스크탑 어플리케이션같이 사용 할 수 있게 해주는 것이라 보시면 될 것 같아요. (사실 정확한 뜻은 아니예요. RIA란 용어의 의미는 광범위하고 저도 완벽히는 몰라서 몇마디로 설명 드리기가 부족한데, AIR에서는 그런 의미로 쓰였다 보시면 될 것 같아요.) 플래시 액션스크립트로 제작을 하고 AIR 플랫폼으로 배포를 하게되면 웹브라우저 안에서 보는 방식이 아니라 독자적인 어플리케이션으로 배포를 할 수 있는 것이지요. 기업 SNS로 널리 쓰이는 yammer나 리그 오브 레전드의 런처가  AIR로 로만들어진 대표적인 어플리케이션이라 할 수 있을거예요.

그래서 이 AIR로 개발을 하면 안드로이드용 apk과 ipa로 배포를 할 수가 있어요. 물론 PC 어플리케이션으로도 배포 할 수 있지요. 이 AIR가 PC용, 안드로이드용, 아이폰용으로 존재하는 덕에 플래시로 개발해도 나름 멀티플랫폼 개발 환경이 되는것이죠. 이 글에서는 그걸 보여드리기 위해 플래시로 간단한 가위바위보 게임을 만들어서 스마트폰에 올려보는 것을 해보려구요. 플래시를 전혀 몰라도 상관 없도록 차근 차근 설명 드릴테니 일단 따라서 해보시면 재밌을거예요. 다만 죄송한 말씀을 드리자면 안드로이드에 올리는 것만 설명하고 아이폰에 올리는 것은 생략하기로 할게요. 제가 아이폰이 없어서 올려보질 못했어요 흙흙흙 하지만 안드로이드폰에 띄우는 것까지만 해보고 나면 아이폰에 올리는 것은 어렵지 않으실거예요. 아마도?



만들어보아요


개발 환경은 플래시 프로페셔널 CS5 이상만 있으면 되요. 플래시 CS5 이상부터 안드로이드나 iOS용 AIR로 개발을 할 수가 있어요. 기왕이면 상위 버젼인 CS6로 해보기로 할게요. 자 그럼 일단 긴말 필요없이 플래시를 구동하기로해요. 그럼 시작 배너가 뜰거예요. 이 창의 새로만들기 섹션보세요. AIR뿐 아니라 AIR for Android와 AIR for iOS가 있는 것이 보이시죠? 딱 감이 오실거예요. AIR를 택하면 데스크탑에서 구동하는 AIR 어플리케이션을 만들 수 있는 것이고 AIR for android를 택하면 안드로이드용 AIR 어플리케이션을 만들 수 있는 것이예요. 그리고, AIR for iOS를 택하면 iOS용 어플리케이션을 만들 수 있는 것이지요. 우리는 안드로이드용으로 만들것이니 여기서 새로 만들기 중 AIR for Android를 선택해요. 근데 사실 이중 뭘 선택해도 상관은 없어요. 아무때나 프로젝트의 속성창에서  안드로이드용 AIR인지 iOS용 AIR인지 데스크탑용 AIR인지 아니면 플래시 플레이어용인지 마음대로 바꿀 수 있어요. 



뭐 어쨌든 일단 AIR for Android를 선택해서 빈 템플릿으로 새 문서를 생성해요. 그럼 기본적으로 사이즈가 800x480 등 종횡비가 가로 기준 크기로 셋팅되어 있을거예요. 하지만 우리는 폰을 세로로 세워서 가지고 노는 게임을 만들고 싶으니 사이즈를 변경하고 싶어요. 그러니 우측의 속성창에서 크기의 숫자를 클릭해서 480x800으로 바꾸기로 해요.



자, 그럼 이제 하단을 보면 막 숫자가 찍혀있는 타임라인을 보아요. 네모난 작은 칸이 여러개 있는데 이 칸 하나 하나가 한 프레임을 의미해요. 타임라인이 진행되면서 프레임을 차근 차근 보여주는 방식이지요. 그럼 가위,바위,보의 이미지를 계속 돌리면서 보여주기 위해 세개의 프레임에 각각 가위 바위 보의 이미지를 넣어보기로 해요. 먼저 세개의 이미지가 필요하겠지요? 일단 이 세개의 사실적인(?) 이미지를 PC에 저장해보아요.

타인라인에서 1프레임을 누르고 우클릭한뒤 키프레임 삽입을 눌러보아요. 그럼 빈 옅은 네모였던게 진한 네모로 바뀌면서 하얀 동그라미가 그려질거여요. 이게 빈 프레임이였다가 키프레임으로 바뀐건데 뭐 복잡한 설명 필요 없이 ”아 뭐 그냥 뭔가 그릴 수 있는 프레임이 된거구나” 정도로 생각하심 될거여요. 그럼이제 2프레임과 3프레임도 마찬가지로 키프레임을 삽입해보아요.



그럼 이제 키프레임 세개가 만들어졌으니 각각의 키프레임에 가위 바위 보 이미지를 배치시켜야겠지요? 1프레임을 선택하고 상단의 파일 메뉴에서 가져오기 > 스테이지로 가져오기를 선택하고 가위 그림을 선택해요.그럼 스테이지에 그 가위 그림이 배치되요. 만약 가운데 안나타나고 이상한테 나타나면 드래그해서 가운데로 위치시켜줘요. 



이제 하단의 타임라인을 보시면 1프레임의 네모가 회색으로 채워지고 동그라미가 검은색으로 채워진게 확인되실거예요. 뭔가 보여질게 채워져서 더이상 빈 키프레임이 아니라는 뜻이예요. 



그럼 이제 나머지 프레임도 채워야겠지요. 2프레임을 클릭하고 마찬가지로 파일의 가져오기를 통해서 바위 이미지를, 3프레임에는 보 이미지를 삽입해주어요. 그럼 3개의 프레임 모두 회색에 검은 동그라미가 쳐진 상태가 되겠지요. 



자자, 여기까지 힘들게 왔으니 날려먹지않게 중간 중간 저장해주는거 잊지마시구요. 상단 파일 메뉴에서 저장을 해주기로해요. 저장까지 했으면 머리식힐겸 일단 게임 한판 하고 오세요.

...

자 칼서렌 하고 왔어요. 상쾌하게 졌으니 상쾌하게 다시 시작해볼까요?. 어랏? 근데 3프레임까지 보를 보여주고 끝나는게 아니라 1프레임으로 다시 돌아가서 가위부터 다시 보여줘야하지 않나요? 3프레임에서 끝나버리면 어떡해요? 예리하군요. 하지만 걱정 말아요. 플래시는 별 다른 설정 없으면 무한반복이여요. 그럼 어디 진짜 그런가 확인해보자구요. 지금까지 만든걸 돌려보는건 간단해요 컨트롤 누르고 엔터를 쳐보세요. 그럼 무슨 시뮬레이터 창과 함께 우리가 만든 가위바위보가 떠요. 오오옷~ 가위 바위 보가 계속 현란하게 바뀌네요.



아 근데 너무 빨라요. 너무 빨라서 가위 바위 보를 돌려서 보여준다기보다는 그냥 뭔 버그같아요. 그럼 프레임이 늦게 바뀌도록 해보자구요. 그건 그냥 간단해요. 우측 속성창에서 FPS를 좀 낮춰주기로 해요. 플래시는 FPS를 정해주면 그 수치에 맞춰서 프레임이 진행되는 방식이예요. FPS도 바꾸는거 간단해요. 속성창에서 FPS를 클릭해서 바꿔주면 끝이지요. 5FPS로 맞추고 다시 컨트롤 + 엔터로 실행해보아요. 오오 이제 뭔가 좀 그럴싸하게 바뀌는군요.



그럼 이제 터치를 하면 뙇! 하고 멈추는걸 해보기로 해요. 그러기 위해서는 살짝 코딩이 들어가야해요. 플래시에서 사용하는 언어인 액션 스크립트로 코드 몇 줄을 짜줘야하는데 어렵지 않으니 걱정말아요. 자, 우선 1프레임에서 우클릭으로 메뉴 열고 액션을 선택해주세요. 그럼 다음과 같은 스크립트 편집 창이 나와요. 그 액션 스크립트 편집창에 다음과 같이 코딩해보기로해요. 뭐 그냥 손아프게 타이핑하지 마시고 컨트롤씨 컨트롤브이 신공으로 샤샤샥 해봐요. 


import flash.events.MouseEvent;

var isStopped:Boolean = false;

stage.addEventListener( MouseEvent.MOUSE_DOWN, onTouch);

function onTouch( event:MouseEvent)

{

if( isStopped == true)

{

play();

isStopped = false;

}

else

{

stop();

isStopped = true;

}

}


코드 설명은 그냥 넘어가긴 섭섭하니 간단히 셜명 드릴게요. 여기서 핵심은 play()와 stop()이예요. 함수 이름만 보면 어떤 역할인지 딱 감이 오실거예요. stop()는 타임라인 진행을 멈춘다는 의미이고 play()는 타임라인 진행을 시켜준단 의미이죠. 화면을 클릭 또는 터치했을 때 이 play()와 stop()를 번갈아가며 수행해주는 onTouch()함수를 수행토록 이벤트로 연결해주면 끝이겠지요? 그 이벤트로 연결해 주는 것이 stage.addEventListener() 인 것이지요.

자 그럼 이제 다시 컨트롤 + 엔터를 눌러서 게임을 띄워볼까요? 오오 가위 바위 보 뺑뺑이 돌다가 클릭하면 멈추었다가 다시 클릭하면 다시 뺑뺑이를 돌리네요! 자 이제 입으로 큰소리로 “가위!”라고 외치고 클릭해보아요! 보에서 멈추었다면 이긴거고 주먹에서 멈추었다면 진거예요! 

자, 우리 게임 개발은 이걸로 완성되었어요. 응? ㅋㅋㅋㅋㅋㅋㅋ 말씀드렸잖아요 간단한거 해볼거라고 ㅋㅋㅋㅋㅋㅋㅋㅋ 일단 폰에 올려보는게 목적이니 욕심은 접어두고 여기까지만 해보도록 해요 ㅋㅋㅋㅋㅋ 절대 귀챦아서 그러는거 아니예요. 아닐거여요. 아마...

자 그럼 이제 안드로이드에 올릴 수 있는 apk로 만들어보기로 해요. 데스크탑에서 볼 수 있는 플래시 swf는 컨트롤 + 엔터로 구동시키는 순간 fla 파일이 있는 위치에 만들어져요. 하지만 apk로 만들고 폰에서 실행해보려면 따른 추가 퍼블리싱 작업을 거쳐야해요. 상단의 파일메뉴의 AIR for Android 설정을 눌러보세요. 그러면 배포 제작 할 수 있는 창이 뜰거예요. 세로로 세워서 수행할것이니 종횡비는 세로로 설정해요. 그리고 화면 빈틈 없이 꽉꽉 채우고싶으니까 전체화면으로 체크하구요. 렌더링모드는 귀챦으니 자동으로 설정해요. 



그리고 배포 탭에 가서 인증서를 만들기로해요. apk를 제작하려면 제작에 필요한 인증서가 필요한데요. 뭐 어짜피 인증서야 또 만들수 있는거고 테스트용이니 만들기 버튼 눌러서 대충 만들어주세요. 하지만 예의상 암호는 꼭 기억해주세요. 

안드로이드 장치에 직접 띄울거니 android 배포 유형은 장치 릴리즈로 선택해요. 

AIR 런타임은 응용 프로그램에 AIR 런타임 포함으로 체크하기로해요. AIR 런타임 다운로드 위치를 선택해서 사용자가 AIR 런타임을 따로 받게 유도 할 수도 있지만 아마 귀찮아할거예요. 뭐 물론 이 가위바위보를 실제 배포하지는 않을거니 사실 뭘로하든 상관은 없어요.

게시 후는 연결된 android 장치에 응용 프로그램 설치하고 시작하도록 체크를 해요.

자 그리고는 안드로이드폰과 PC를 US 케이블로 연결해주세요. PC에 기기의 드라이버가 안깔려있다면 설치하시구요. 기기에서는 응용프로그램 설정에서 알 수 없는 소스에 체크해주시고 개발 옵션 설정에서 USB 디버깅을 체크해주세요. 


자! 그럼 이제 막타만 남았어요. 상콤하게 제작을 눌러주세요. 뭔가 권한 어쩌고 저쩌고 경고 메시지가 뜨지만 그딴것따위 중요하지 않아요. 과감히 경고창정도는 무시하고 닫아주세요. 짜잔~ 기기에 우리 가위 바위 보 게임이 떴네요. 큰 소리로 가위!를 외치시고 화면을 터치해주세요!!!! (종료 버튼은 따로 만들지 않아서 태스크 관리자로 강제로 꺼주세요 ㅋ)



마치며


이것으로 플래시를 이용한 모바일 게임 제작 체험을 마치기로 해요. 딱히 어렵지 않게 그냥 몇번 딸깍딸깍하고 타이핑 몇 줄 했을 뿐인데 이렇게 기기에 게임을 띄울수가 있네요. 그렇다고 플래쉬로만 개발을 해야한다고 주장하려는건 아니예요. 굳이 언리얼이나 유니티같은 엔진이 아니라 하더라도 모바일 개발을 할 수 있는 환경은 많이 있고, 플래시도 그 중 하나가 될 수 있다는걸 체험시켜드리는 것 뿐이여요. 물론 대규모나 고퀄리티의 게임을 만들기에는 플래시로는 무리가 있을 수도 있어요. 하지만 간단한 게임을 단기간에 만드는데에는 적합한 환경인 것 같지 않나요? 그럼 저는 밀당을 할 줄 아는 남자이므로 이만 여기서 글을 마칠게요. 모두들 즐거운 개발하세요~

반응형
,
Posted by 대마왕J

 

잠수하시면서 눈팅하시는 수강생분들 리플이나 달아봅시다. :)
몇 분이나 되시는지 보게 ㅋ

 

마지막회입니다 :) 그래도 꽤 오래 했어요.
첫 강의가 2011년 12월 18일에 한 거니까 우왘ㅋㅋ 1년 훨씬 넘었잖앜ㅋㅋㅋ
게대포에서 나보다 더 오래 연재한 사람 있으면 나와보라고 그래 ㅋㅋㅋ


근데 정말 빨리 지나갔네요.
처음에 이거 연재하겠다고 포프님하고 얘기할 때가 생각나네요.
그 때 대충 '한 20강 하지 않겠어요?' 라고 했는데
...부왘ㅋㅋㅋ 벌써 19강이라니요 ㅋㅋㅋ



사실 이것 이후로도 연재할 수 있는 내용은 더 있습니다. smoothstep을 이용한 fake SSS라던가,
으악 specular 얘기는 한 마디도 안했었군요 세상에 이런 왓더.
그리고 Reflection 이나 Refraction도 한 마디도 안했어요 어머나 세상에... 나 연재 끝내도 되는거니...

그림자... 같은것도 이걸로 할 수는 있게 되어 있는 것 같은데 아직 어떻게 하는지 찾지 못했구요
그 외에 Fur라던가 하여간 여러 기법들이 마구잡이로 생각나네요.

종합편으로 '메탈 재질 내 보기' 라던가 '피부 질감 내 보기' '물 만들어 보기' 같은 것도 할 수 있겠구요.
그거 다 하면 우왕 ..
만약 이거 연재로 먹고 살 수 있는거라면 진짜 한 3년은 걱정없이 살겠군요 ㅋㅋㅋ 유료강의로 전환시켜 버릴까 ㅋㅋㅋ

근데 어쨌건 이번 19강으로 일단 마무리를 지을까 합니다. :)
그 이유는 몇 개 있는데요.

- 일단 온라인 튜터리얼 강의 특성상 일정 이상 심도깊게 나가면 더이상 재미있게 하기가 힘듭니다. 깊은 내용이 많아져서 개그치고 있으면 너무 길어져서 주제를 잃어버린다던가 하는 일이 생겨요. 그래서 쓰는 것도 부담이 슬슬 되기 시작하죠. 게다가 읽으시는 분도 점점 어려워지면 떨어져 나가서 아주 소수의 구독자만 나오게 되구요.

- 회사 일이 바빠졌습니다. 몸이 안좋아 진것도 있지만 (...) 어쨌거나 전보다 더 집중해야 할 일이 생겼습니다. 저도 먹고 살아야지요 :D 올해는 벌려 놓은 일을 조금 추스리는게 목표거든요. 그리고 내공을 더 쌓는게 목표입니다. 이미 프로그래밍 학원은 다니고 있구요. 몇 년간 손 놓았던 그림도 다시 시작해 볼까 생각하고 있어요.

- 이게 잘 되면 책으로 낼까 하는 생각이 없었던 것도 아닌데요. 결론적으로는 무산되었습니다. 출판사쪽 입장이 아니라 제 입장에서 말이죠. 일단 이 프로그램이 맥스 2012를 마지막으로 더이상 버전업이 되지 않네요. 원작자에게 접촉을 여러 번 시도했지만 이 친구가 오토데스크에 입사했다는 소식 이후로 잠수 타 버렸고... 그래서 지금 책이 나온다 하더라도, 맥스 2013 이상은 지원하지 못하는 애매한 (?) 책이 되어 버려서 말입니다. 그래서 더 쓸 의욕이 떨어지기도 했습니다.

- 그래도 아티스트를 위한 shader 내용은 사실 책으로 써 놓고 싶긴 합니다. 아티스트들을 위한 그래픽스 기본 이론서 같은게 너무 없어서 말예요. 보기 쉽고 재미있는 책 한권은 써 보고 싶긴 합니다. 그런데 사실 shaderFX가 hlsl언어와 상당히 구조가 비슷하게 잘 되어 있고 이뻐서 좋았는데, 버전업이 안되니 곤란해서요. 언리얼의 메터리얼 에디터를 해 보자니 제가 언리얼을 안써서 그거 새로 배우기 귀찮고... 해서 지금은 유니티의 스트럼피 셰이더 에디터를 만져보고 있습니다.
유니티는 많이들 쓰시고, 스트럼피 에디터는 공개로 풀려서 소스가 다 있는데다가, 더스틴 스승님이 원하는대로 커스터마이징도 해준다고 하셔서 말이죠. 저도 좀 뜯어보고 이쁘게 만들 수 있으면 이쁘게 만들어서 , 개량된 스트럼피 셰이더 에디터를 만들어 볼까 생각하고 있습니다. 만약 책을 쓴다면 그걸로 쓰게 되겠죠 :)

- 이 강의의 또 다른 목적은 KOCCA (컨텐츠 진흥원 부설 게임 아카데미) 에서 하는 '테크니컬 아트' 강의에서 사용하는 교재의 목적이기도 합니다. 가르치긴 하는데 교재가 없어서 ... 학생들이 복습이나 예습하려고 해도 방법이 없었거든요. 그런데 학생들에게 10주동안 가르치는 부분의 분량이 지금 막 끝났습니다 ㅎㅎ

뭐 이런 저런 이유로, 이제 shaderFX 공식 연재는 끝내겠습니다.
아 그런다고 글을 안쓰겠다는 건 아니예요 ㅎㅎ

뭔가 단편적으로 요거다 싶을 때에는 언제던지 와서 글 쓰겠습니다.
모르죠 유니티 스트럼피 셰이더를 연재할지도요 ㅎㅎ 연구하다가 갑자기 정리가 필요해서 글 쓸 수도 있어요.
아니면 shaderFX를 하시다가 질문이 들어오면 (18강처럼요) 갑자기 특별연재를 할 수도 있겠습니다.

공식적인 연재가 끝난다는 말이지 글을 안 쓴다는 말은 아니니까요

아무튼 여태까지 잘 보고 따라와 주신 분들께 모두 감사드립니다.
빨리 공부해서 또 재미있는 글 쓰러 올께요 :)

 

반응형
,