기본 콘텐츠로 건너뛰기

1월, 2019의 게시물 표시

Django-Channels와 HTTP 통합해보기

Django-Channels와 HTTP 통합해보기 프로젝트로 IoT 애플리케이션을 제작하고 있는데, 처음 시도 해보는 부분이라서 어떻게 구축을 시작해야할지 막막한 부분이 많았습니다. 개인적으로 Python을 주로 사용하고 있고, 중앙 서버를 Django로 구축하기로 했기 때문에, Django에 관한 여러 정보들을 찾아보다가 Channels라는 Django 애드온을 알게 되었습니다. Channels를는 주로 채팅 관련 서비스에 사용 되는것 같은데, Django를 웹소켓 서버로 사용할 수 있도록 도와주는 점에서 잘 활용하면 계속 연결이 유지되어야하고, 양방향 통신이 필요한 IoT 서버로 사용할 수 있다고 판단하여 Channels를 사용 해보게 되었습니다. 하지만 어플리케이션과 IoT 서버가 항상 WebSocket으로 연결되어 있진 않을것 같았고... IoT기기와 서버가 웹소켓을 통해 항상 연결되어 있고, 어플리케이션은 해당 웹소켓 연결에 HTTP로 데이터를 던져주는 방향으로 생각을 해보게 되었습니다. Django-Channels 외부 Consumer에서 접근 Django-Channels 공식 문서에 힌트가 될 부분을 찾았습니다. Channels-Layer를 외부 Consumer에서 접근할 수 있는 방법에 대한 설명이었는데, 이 부분을 잘 활용하면 Django api로 웹소켓에 접근이 가능해보였습니다. ⚠️ 여기서 데이터를 받는 Consumer는 WebsocketConsumer를 통해 생성되었습니다. from channels.layers import get_channel_layer channel_layer = get_channel_layer() 먼저 이렇게 get_channel_layer() 함수로 channels를 조작할 수 있는 객체를 받을 수 있었습니다. await channel_layer.group_send( chat_name, {"type": "chat.system_message", "

'마그나복스 오디세이'부터 '조이콘'까지, 게임 컨트롤러의 역사 (2) - '슈퍼 패미컴 컨트롤러'부터 '듀얼쇼크'까지

'마그나복스 오디세이'부터 '조이콘'까지, 게임 컨트롤러의 역사 '슈퍼 패미컴 컨트롤러 '부터 '듀얼쇼크'까지 1990년 '슈퍼 패미컴 컨트롤러' '슈퍼 패미컴'은 뛰어난 기기의 성능 뿐만 아니라 컨트롤러 또한 호평을 받았습니다. 점점 복잡해지는 게임들과 그 조작에 대응하기 위해 '슈퍼 패미컴 컨트롤러'는 최초로 L, R버튼을 도입했습니다. L, R버튼은 현재의 컨트롤러에도 계속 사용되고 있는 혁신적인 버튼이었습니다. 1995년 '버추얼 보이' '버추얼 보이'는 최초의 게임용 HMD라 볼 수 있고, 최초로 3D영상을 채택한 게임기이기도 합니다. 하지만 휴대용치고는 너무 거대한 크기, 빨간색의 이상한 디스플레이 등으로 혹평을 받았습니다. 결국 '버추얼 보이'는 1년만에 생산을 중단하였고, '닌텐도'의 흑역사가 되었습니다. 하지만 게임계에서 최초로 HMD기술을 적용한 것이 이 게임기의 의의라고 볼 순 있겠네요. '버추얼 보이'의 빨간 LED디스플레이 1996년 '닌텐도 64 컨트롤러' 삼지창 모양의 특이한 '닌텐도 64 컨트롤러'는 현대 컨트롤러의 가장 큰 부분이라고 볼 수 있는 아날로그 스틱과 진동 기능을 최초로 탑재한 컨트롤러입니다. 기술이 발전하면서 3D게임의 비중이 높아지니 게임 조작체계에서도 변화가 필요했습니다. 기존의 디지털 방식은 3D게임에서 활용하기에 어렵기 때문입니다. 그래서 '닌텐도 64 컨트롤러'가 탄생하게 되었습니다. 이 컨트롤러는 아날로그 스틱 외에도 진동팩을 장착하여 최초로 진동을 가진 컨트롤러가 될 수 있었습니다. 또, '젤다의 전설 : 시간의 오카리나' 등에서 이 컨트롤러 하단에 Z버튼이라는

좋은 AI의 조건 (3)

▲이 글의 대부분은 Game Maker's Toolkit의 What Makes Good AI? 영상에서 인용하였습니다. 스스로 행동하고 목표를 지닌 AI '레인 월드'라는 게임에선 플레이어와 적의 관계만이 전부가 아닙니다. 적들 스스로 움직이고 행동하면서 그들끼리 만난다면 서로 싸우기도 하죠. 이것은 전편에서 말한 '플레이어와 상호작용하는 AI'의 연장선이기도 합니다. 하나의 AI 단독으로 움직이는 게임은 활력이 없습니다. 그들끼리 스스로의 목표를 가지고 행동하면서 서로 상호작용 한다면 더 살아있는 세계처럼 보일 것입니다. '스토커 : 섀도우 오브 체르노빌'도 이런 방식을 택했습니다. 'A-Life'시스템이라고 불리는 AI시스템은 핵전쟁으로 파괴된 세상에서 강도들은 홀로 다니거나 집단을 이루며 세상을 돌아다닙니다. 그들은 팩션끼리 우연히 만나면 전투를 하기도 합니다. '엘더스크롤 V : 스카이림'에서도 다양한 NPC들과 팩션들이 스스로 조우하면서 전투를 만들어내는 인카운터들이 발생합니다. 이것은 아마 만들어진 스크립트이지만, 이런 상황들은 플레이어들에게 오픈월드의 세계가 더 똑똑해보이는 효과가 있습니다. '웨이킹 마스'라는 게임에선 화성의 생명체들이 스스로의 목표를 가지고 생활합니다. 플레이어는 식물에게 물을 주거나 씨앗을 뿌리는 식으로 그들과 상호작용 합니다. 그리고 화성의 생명체들은 그들끼리 스스로 상호작용하면서 하나의 생태계를 만들어 나가면서 퍼즐을 푸는 게임입니다. 이 게임에서 화성의 생명체들은 징그럽게 생겼지만, 그들끼리 생태계를 만들어나가는 것이 정말 신기하고 아름답기도 합니다. 조금 다른 예시이기도 하지만 '몬스터 헌터 : 월드'의 대형 몬스터들도 비슷한 효과를 내고 있습니다. 그들은 오픈월드의 세계를 돌아다니면서 다른 대형 몬스터들과 싸우기도 하고, 도망가기도 하는 등 서

좋은 AI의 조건 (2)

▲이 글의 대부분은 Game Maker's Toolkit의 What Makes Good AI? 영상에서 인용하였습니다. 예측이 가능한 AI 좋은 AI는 플레이어가 예측이 가능합니다. 이것은 AI가 어떤 상황에 따라 일관된 반응을 보임으로써, 플레이어가 게임을 이해하고, 그 게임의 메커니즘을 이용해 자신만의 목표를 세우고 창의적으로 플레이하게 만들어줍니다. 예를 들어, 플레이어가 어떤 건물의 발전기를 끈다면, NPC가 발전기에 확인을 하러 옵니다. 플레이어는 이런 NPC의 특성을 예측하여 창의적인 플레이를 할 수 있게 됩니다. '헤일로'의 'Grunt'라는 몬스터는 방향을 알 수 없이 항상 도망다니기만 합니다. 만약 'Grunt'가 반만 도망다닌다면 플레이어가 충분히 예측할 수 없고 게임의 난이도가 어려워졌을 것입니다. '예측이 가능한 AI'는 플레이어가 창의적으로 플레이하고 있다고 느끼게 해주는 가장 큰 특징이라고 생각합니다. '히트맨'시리즈에서 플레이어들은 암살 상대의 이동 경로나 행동을 예측하여 플레이를 하는 경우가 많습니다. 이런 플레이를 할때 플레이어들은 스스로 창의적으로 플레이하고 있다고 느끼게 되는 효과가 있습니다. 예측이 가능하다고해서 게임의 난이도가 낮아지는 것이 아닙니다. '스펠렁키'에서는 모든 오브젝트들이 정해진 스크립트들에 의해서 일정하게 움직입니다. 이것은 플레이어들이 쉽게 예측할 수 있습니다. 하지만 이 게임에서는 그런 오브젝트들이 얽히고 섥혀서 또 새로운 결과가 일어나는 등 나비효과같은 일들이 벌어집니다. 그래서 '스펠렁키'에서는 작은 결과는 예측이 가능하지만 더 앞을 내다보는 것은 할 수 없습니다. 플레이어들은 이 게임을 그저 어렵기만 한 게임이 아니라 보다 합리적이라고 생각하게 됩니다. 스펠렁키 인게임 시스템과 상호작용 시스템과 상호작용하는 AI는 매우 매력적입니다.

좋은 AI의 조건 (1)

▲이 글의 대부분은 Game Maker's Toolkit의 What Makes Good AI? 영상에서 인용하였습니다. 최근 대부분의 게임에서 뛰어난 적의 AI가 채용된 것들이 많습니다. 좋은 AI는 플레이어에게 게임의 경험을 더 즐겁게 만들어주고, 뛰어난 기술력을 느끼게 할 수도 있습니다. 최근에는 '에일리언 : 아이솔레이션'에서는 복수의 AI를 부여하여 학습하는 에일리언을 구현하기도 하였고, '헬로 네이버'에선 이웃집 아저씨가 플레이어의 행동을 예측하고 정말 똑똑한 AI처럼 만들어 게임의 공포감을 훨씬 더 살렸습니다. 게임의 AI는 날이 갈수록 발전하는 만큼 좋은 AI의 조건, 좋은 AI처럼 보이게 하는 조건에는 어떤 것들이 있을까 살펴봅시다. 적의 체력과 AI의 관계 과거 좋은 AI를 가졌다고 알려진 'F.E.A.R'의 클론 병사들, '헤일로' 시리즈의 코버넌트, '하프라이프'의 해병대들이 있습니다. 이들의 공통점은 좋은 AI를 가진것 외에도 하나의 공통점이 있는데, 체력이 많다는 것입니다. '헤일로'의 '코버넌트'들은 엄폐, 근접 공격, 감각기관들을 가져서 좋은 AI라고 느끼기도 하지만 그들은 많은 체력을 가졌습니다. 실제로, '헤일로'를 개발한 '번지'에서 '헤일로'를 개발할 때 적의 체력이 많은 버전과 체력이 적은 버전을 따로 테스트를 했더니, 적의 AI가 영리하다고 느낀 비율이 각각 43%와 8%였습니다. (체력이 많은 적들은 플레이어들이 적을 처치하기 위해 그만큼 더 많이 생각하고 더 다양한 전략을 활용하고, 적 AI가 다양한 행동을 보이게 되기 때문인 것 같습니다.) AI의 형태를 다르게 설계 그리고 적의 AI는 어떤 컨셉의 게임인지에 따라 다르게 생성되어야 합니다. 2016년 '이드 소프트'가 '둠'을 개발 할 당시, 적의

'마그나복스 오디세이'부터 '조이콘'까지, 게임 컨트롤러의 역사 (1) - '마그나복스 오디세이'부터 '패미컴'까지

'마그나복스 오디세이'부터 '조이콘'까지, 게임 컨트롤러의 역사 '마그나복스 오디세이 '부터 '패미컴'까지 게임 컨트롤러의 역사는 게임의 역사라고 볼 수 있습니다. 게임을 플레이하기 위해선 컨트롤러가 꼭 필요하기 때문이죠. 게임을 즐길때 사용하는 컨트롤러는 플레이어가 게임을 어떤 방식이나 자세로 플레이하는 지 결정하고, 플레이어가 게임을 즐길 때 더 훌륭한 경험을 할 수 있게 도와주기도 합니다. 1972년 '마그나복스 오디세이' 마그나복스 오디세이는 랄프 베어라는 사람이 개발한 최초의 가정용 게임기입니다. 이 게임기는 당시 기술력으로는 그래픽을 만들 순 없었기에 기계는 흰 점만 출력하고, 플레이어가 직접 TV화면에 셀로판지를 부착하여 약 30개 전후의 게임들을 플레이 할 수 있었습니다. 이 게임기의 컨트롤러는 양 옆에 2개의 다이얼이 존재해 그 다이얼로 흰 점을 조종 할 수 있었습니다. ▲마그나복스 오디세이 TV광고 (세계 최초의 가정용 게임기 TV광고이기도 하다.) 1972년 '퐁' 최초의 상업적으로 성공한 게임이라는 타이틀을 가지고 있는 1972년 놀런 부슈널이 만들어 출시한 '퐁'입니다.  '퐁'의 컨트롤러는 두개의 다이얼 모양의 컨트롤러를 가진 것이 전부입니다. 그도 그럴것이 '퐁'은 2명의 플레이어가 각자의 막대를 위, 아래로 조종하는 것이 전부였기 때문입니다. 퐁이 인기를 끌자 아타리는 '퐁'을 가정용으로 개발하려고 마음 먹고 1975년 '퐁'이 가정용으로 출시되었습니다. 1977년 '아타리 2600 컨트롤러' '아타리 2600'은 비디오 게임을 가정에 보급하는 것에 가장 큰 역할을 했다고 볼 수 있는 '아타리 2600'입니다. '아타리

그 게임만의 특별한 메카닉, 기믹 만들기 (2) - 젤다의 전설

젤다의 전설 시리즈는 각 시리즈마다 특별한 기믹이나 개성을 뚜렷하게 표현한 것으로 유명합니다. 1986년 젤다의 전설의 초대 작품은 거대한 오픈월드의 세계를 구현하는 것이 그 게임의 큰 특징이었습니다. 젤다의 전설은 현재 최초로 오픈월드 게임을 구현했다는 평을 듣고 있습니다. 1998년 발매된 젤다의 전설 - 시간의 오카리나는 3D로 된 액션 어드벤쳐 게임의 레벨 디자인을 정형화 했다는 것에 큰 의의를 둡니다. 이 게임 또한 후대에 출시되는 3D게임에 크게 영향을 주었고, 역사상 최고의 게임으로 평가받기도 합니다. 2002년 발매된 젤다의 전설 - 바람의 지휘봉은 바다를 여행하는 젤다의 전설을 만들었습니다. 이 게임 또한 어쌔신 크리드 - 블랙 프래그 등의 해상 게임들에게 많은 영향을 주었습니다, 2006년 발매된 젤다의 전설 - 황혼의 공주는 wii를 이용해 직접 검을 휘두르는 조작을, 2007년 발매된 젤다의 전설 - 몽환의 모래시계는 NDS를 이용한 터치 조작을 보여주었습니다.  그리고 2017년 발매된 젤다의 전설 - 브레스 오브 더 와일드는 넓은 3D세계에서 플레이어의 자유도를 극대화한 새로운 오픈월드의 지평을 열었습니다. 이러한 젤다의 전설 시리즈의 중심 메카닉들은 각 젤다의 전설 게임을 각각의 개성을 가진 다른 게임처럼 보이게 합니다. 실제로 제가 플레이 해본 시리즈 게임들(FIFA나 배틀필드 등)은 시리즈의 다른 게임들 크게 다르지가 않습니다. 이런 게임들은 시리즈를 관통하는 하나의 큰 컨셉에서 크게 벗어나지 않습니다. 플레이어들은 시리즈의 새로운 게임이 나와도 그래픽이나 시대 배경만 다를 뿐 새로운 기술을 접목한 거의 같은 게임이라고 생각할 뿐입니다. 하지만 젤다의 전설 시리즈는 시리즈를 관통하는 큰 컨셉(미지의 세계를 모험한다)에서 작품마다 또 다른 메카닉을 만들었습니다. 그렇기 때문에 플레이어

그 게임만의 특별한 메카닉, 기믹 만들기 (1) - 게임의 컨셉과 어울리는 캐릭터 만들기

독창적인 게임의 기준이란 그 게임의 개성적인 그래픽이 될 수도있고, 감동적인 스토리 라인이 될 수도 있습니다. 이 글에서 살펴볼 내용은 '그 게임만의 특별한 메카닉'입니다. 게임의 메카닉이란 가장 기본적으로 그 게임의 컨셉을 만들 수 있는 '조작 방식'이나 '레벨 디자인' 등이라고 말 할 수 있습니다. 예를들어, 슈퍼 마리오 시리즈의 최신작인 '슈퍼 마리오 오디세이'에서는 마리오의 모자 던지기가 이 게임만의 메카닉이라고 할 수 있습니다. 플레이어들은 이 게임을 하면서 모자를 던지는 행위와 다른 오브젝트 들을 캡쳐하는 것을 가장 많이 사용하고, 이 게임의 매력이라고 생각할겁니다. 그 게임만의 특별한 메카닉을 만드는 것은 게임의 그래픽, 스토리 텔링보다 더 중요합니다. 물론 그 게임의 첫 인상을 주는 것은 게임의 그래픽적 요소일 순 있지만, 결국 게임을 플레이 한다는 것은 게임을 감상하는 것이 아니기 때문입니다. 게임은 영화와 달리 플레이어들이 직접 작동하고 그것에 대한 반응의 집합이라고 할 수 있기 때문에, 플레이어들이 게임을 어떻게 조작하는지에 대한 재미를 추구해야 합니다. 그렇기 때문에, 게임은 게임의 중심 메카닉을 먼저 정한 후에, 게임의 그래픽적 특징, 캐릭터의 개성을 그 게임의 중심 메카닉에 어울리게 정해야 합니다. 닌텐도의 스플래툰이라는 게임은 개발 초기 단계에 오징어라는 캐릭터를 사용하지 않았습니다. 스플래툰은 먼저 물감이 담긴 총을 쏜다는 컨셉을 잡고 직사각형의 캐릭터를 만든 후에, 토끼나 인간의 캐릭터를 잡아보기도 했습니다. 하지만 결국은 먹물을 쏜다는 것과 물총의 의미가 만나 오징어 캐릭터가 탄생하게 되었습니다. 스플래툰은 닌텐도의 가장 인기있는 IP중 하나가 되었습니다. CDPR의 위쳐 시리즈의 '위쳐'들과 닌텐도의 많은 캐릭터들 (커비, ARMS 등)의 캐릭터들이 그 게임의 중심 기믹과

하프라이프2의 훌륭한 튜토리얼 레벨 디자인

▲이 글의 대부분은 Game Maker's Toolkit의 Half-Life 2's Invisible Tutorial 영상에서 인용하였습니다. 요즘 쏟아져 나오는 게임들의 튜토리얼은 대부분 책 읽듯 글로 설명해주고, 한번 따라해보는 것이 대부분입니다. 이런 튜토리얼은 조금 더 적은 개발비용이 들고, 직관적이라는 장점이 있습니다. 하지만 이런 튜토리얼들은 게임의 몰입도를 떨어트리고, 게임안에 자연스럽게 녹여들 수 없습니다. 데드 스페이스의 적인 네크로모프는 팔이나 다리를 잘라서 죽이는 편이 효율적입니다. 그것을 이 게임에선 플레이어에게 이렇게 알려주었습니다. 시체 오브젝트와 피로 적은 'cut off their limbs'를 보여주고, 팝업 메세지로 보여주고, 음성으로도 알려줍니다. 플레이어들은 당연히 잘 알아듣고 튜토리얼대로 행동할겁니다. 튜토리얼로써의 기능은 완벽하네요. 하지만 플레이어들은 성인을 대상으로 만든 게임에서 애 취급을 받는 기분이 들 수도 있습니다.. 하프라이프2도 적의 몸을 자르면 쉽게 죽일 수 있습니다. 하프라이프2에선 어떻게 이렇게 알려주었습니다. 하프라이프2의 Ravenholm챕터입니다. 이 챕터에 들어오면 가장 먼저 플레이어들은 톱날에 잘려 죽은 좀비의 시체를 보게 됩니다. 그리고 다음 지역으로 넘어가는 길에 톱날이 꼽혀있어서 지나갈 수가 없습니다. 플레이어는 중력건으로 이 톱날을 제거합니다. (물론 게임 내에선 아무런 글로된 튜토리얼은 없습니다.) 그 톱날을 뽑아 든 순간, 옆에 있는 공간에서 좀비가 걸어 나옵니다. 그럼 플레이어는 자연스럽게 그 뽑아든 톱날을 좀비에게 발사하고 톱날이 효과적인 무기라는 사실을 알게됩니다. 분명 데드 스페이스와 하프라이프2의 의도는 비슷했습니다. '적의 사지를 잘라라' 하지만 제 생각엔 하프라이프2의 튜

긍정적이고 성취감을 줄 수 있는 '게임 조작에서의 즐거움'

▲이 글의 대부분은 Game Maker's Toolkit의 The Mechanics of Movement 영상에서 인용하였습니다. 1996년 출시된 툼 레이더와 2018년 출시된 섀도우 오브 더 툼 레이더는 조작에서 큰 차이가 있습니다. 툼 레이더1에서는 플랫폼을 넘어가기 위해 적당한 거리를 두고, 알맞은 각도를 향해 달리기를 하면서 정확한 타이밍에 점프를 해야합니다. 그리고 또 다른 곳에 매달리는 기능을 하는 다른키를 동시에 눌러서 건너가야 합니다. 쉽고 재미있다고는 할 수 없는 조작입니다. 당시 게임기 성능과 환경의 결과입니다. 하지만 현세대의 툼 레이더에선 다르죠. 이곳에서의 라라는 자동으로 점프하고, 방향을 맞추며, 플레이어가 점프할 타이밍을 맞출 필요도 없는데다가 플랫폼을 잡을 버튼도 없습니다. 이런 변화는 툼 레이더 시리즈에 접근성을 높여주었고, 그저 짜증나는 조작일 수도 있었던 툼 레이더의 조작을 현세대에 맞게 변경한 것이죠. 하지만, 이런 변화는 플레이어에게 성취감을 주진 못하였습니다. 1996년의 툼 레이더와 2006년의 툼 레이더 : 레전드는 비슷한 다리가 있습니다. 1996년의 툼 레이더는 앞서 말했듯이 매우 세밀한 조작을 요구하여 실제로 저 다리를 넘어가는 듯 어려움이 따랐고, 그에 따른 성취감도 높았습니다. 하지만 2006년의 툼 레이더 : 레전드는 그냥 앞으로 달려가기만 하면 라라 크로프트는 알아서 그 다리를 넘어갑니다. 어떤 도전과제가 있었는지도 알아챌 수 없죠. 게임을 플레이하면서 플레이어는 점점 더 컨트롤의 신이 되었고 성취감도 느낄 수 있었습니다. (친구들에게 자랑하는 것도 덤이죠.) 이러한 변화가 무조건 나쁜것이라고 볼 순 없지만(현세대에 맞게 이런 변화는 꼭 필요했다고 생각합니다.) 저희는 어떤 것을 잃어버린 듯 한 기분입니다.  유비 소프트의 Gr