-
Minor On Air 개발 - < 5 > TOP NEW
개요 반 발짝 옆에서는 되는데 여기서는 안 된다. 같은 바위, 같은 각도, 같은 클릭. 광질 게임을 만들다 만난 이 자리에서는 무엇이 달랐을까? 바위도 서버도 아니었다. 달라진 건 내 몸의 위치였다. 찍을 대상을 고르는 선이 바위보다 내 몸에 먼저 걸렸고, 2편에서 내가 세운 “자기 자신이면 무시” 필터가 그 클릭을 조용히 버렸다.. 이번엔 채굴 방식에 재미 요소를 넣어줬다. Unity NGO(Netcode for GameObjects)처럼 서버가 판정을 쥐는 구조에서 찍는 순간의 소리와 흔들림, 바위에 금이 가거나 부서지는 결과가 화면에서 같아야 한다. 이 둘을 어떻게 나눴는지, 그리고 그 사이에 숨어 있... Read More
-
Minor On Air 기획 - < 4 > TOP NEW
개요 등 뒤에서 쉿 소리가 점점 커진다. 방금 캔 터지는 광물이 가방에 들어갔는데, 가방은 등에 달린 해치라 내가 열 수 없다. 할 수 있는 건 옆 동료에게 “빨리 꺼내줘!!”라고 비는 것뿐이다.. Minor On Air의 세계관을 짜면서 제일 기억에 남는 장면이다. 이 장면은 세계관에서 나온 게 아니라 규칙에서 먼저 나왔다. 1편에서 정한 건 도망가는 광물, 터지는 광물, 팀킬 같은 규칙이었고, 세계관은 그 뒤에 “왜 광물이 움직이지?”, “왜 가방을 못 열지?”에 이유를 대려고 붙였다. 협동 게임을 기획하면서 규칙과 설정 중 뭘 먼저 잡을지 고민 중이라면, 규칙이 먼저 있고 설정이 하나씩 이유를 대 가는 ... Read More
-
Minor On Air 개발 - < 3 > TOP NEW
개요 건물마다 방송실이 하나씩 있다고 해보자. 1동 방송실에서 “광석이 맞았다!”고 방송하면 1동 사람은 다 듣지만, 2동에는 한 마디도 안 들린다. 2동까지 알리려면 전화를 따로 걸어야 한다. Unity NGO 멀티플레이에서 C# 이벤트가 이렇게 움직인다. PC가 건물이고, event가 방송, Rpc가 전화다. 2편에서 곡괭이 타격 검증 끝의 PublishHit은 로그만 찍는 자리였다. 여기에 타격을 기록하는 쪽, 연출하는 쪽이 붙어야 하는데 둘이 만날 곳이 없었다. 발행자(플레이어)는 런타임에 생기는 프리팹이고, 구독자는 씬에 미리 놓인 오브젝트라 서로 참조를 걸 수 없다. 그래서 이벤트 버스를 stat... Read More
-
이론 정리 - < 레드 블랙 트리는 2-3-4 트리다 > TOP NEW
개요 새로 들어온 사람을 무조건 바로 앞 입사자 밑에 붙이는 회사가 있다고 해보자. 사람이 들어올수록 조직도는 한 줄로 늘어지고, 막내의 보고가 대표에게 닿으려면 직원 수만큼 결재를 거쳐야 한다. BST에 정렬된 값을 순서대로 넣으면 이 모양이 된다 ( Python - < 10 >의 편향 트리 ). 이걸 막는 방법은 두 가지다. 어느 팀이든 양쪽 라인의 깊이가 2 이상 벌어지는 순간 그 자리에서 바로 조직을 재편한다. 깐깐한 대신 재편이 잦다. 팀 하나에 최대 세 명까지 두고, 넘치면 가운데 사람을 위 팀으로 올리고 남은 둘을 두 팀으로 쪼갠다. 조직이 아래가 아니라 위로 자라서 모든 말단... Read More
-
Python - < 11 > TOP NEW
개요 보고서 하나를 팀장이 반으로 쪼개 두 사람에게 맡기고, 그 두 사람이 또 반씩 쪼개 아래로 내려보낸다고 해보자. 맡은 부분이 서로 겹치지 않으면 각자 쓰고 모아 붙이기만 하면 되니 금방 끝난다. 곤란한 건 양쪽 모두에 같은 자료가 필요할 때다. 누가 먼저 조사해서 공유하지 않으면 아래로 내려갈수록 같은 조사를 하는 사람이 두 배씩 늘어난다. 앞 단계에서 “자료는 정리해서 넘겼다”고 했는데 정리되지 않은 채로 넘어와서, 그 말만 믿고 한 작업이 통째로 틀리는 일도 생긴다. 분할 정복을 배우고 문제를 푸는 동안 이 두 장면이 코드에서 그대로 나왔다. 거듭제곱을 반으로 쪼개는 코드는 한 줄만 잘못 써도 같은 ... Read More
-
Minor On Air 개발 - < 2 > TOP NEW
개요 서버 거리 검증 로그에 거리 0으로 통과한 타격이 하나 찍혀 있었다. 같은 요청에서 시작점이 대상 콜라이더 안에 있었고, 시작점과 콜라이더 중심의 X·Z가 똑같았다. 맞은 대상 이름은 Multiplayer Controller(Clone).. 곡괭이로 내 몸을 치고 있었다. 1편에서 정한 “살아있는 광물 채굴” 게임(Minor On Air)의 첫 작업으로, 곡괭이 타격을 클라이언트 의도 → 서버 검증 → 대상 반응 → 발행 흐름으로 만들었다. 그 과정에서 나온 버그와 판단을 적어보겠다! 입력·Raycast·대상 탐색, HitRpc 전달, 서버 검증(요청자·대상·쿨다운·거리)은 내가 짰다. 검증을 메서드로... Read More
-
이론 정리 - < 컨텍스트 스위치는 누가 일으키는가 > TOP NEW
개요 선점형 스케줄링의 출발점이 하드웨어 타이머 인터럽트라는 설명을 듣다가 거꾸로 생각해봤다. 그럼 유저 코드가 인터럽트를 꺼버리면? 타이머가 울려도 CPU가 안 받으니 커널은 CPU를 되찾을 방법이 없다. 무한 루프 하나로 선점형 스케줄링이 무력화된다. 그러니 인터럽트를 끄는 명령은 유저 모드에서 실행할 수 없게 막아야 한다 — 이게 특권 명령어였다. 특권 명령어가 왜 있어야 하는지를 선점 쪽에서 거꾸로 추론해서 도착했다. 프로세스, 스레드, 그리고 가상 메모리 6절에서는 컨텍스트 스위치가 왜 비싼가를 봤고, 스레드를 몇 개 둘 것인가의 “다음으로 볼 것”에 컨텍스트 스위치를 유발하는 주체를 적어뒀... Read More
-
Python - < 10 > TOP NEW
개요 힙을 배열에 1번부터 담으면 인덱스를 이진수로 쓴 것만으로 루트에서 그 노드까지 가는 길이 나온다. i >> 1이면 부모로 한 칸 올라가고, 맨 앞 1을 뺀 나머지 비트를 읽으면 왼쪽·오른쪽 순서가 된다. 오늘 배운 것 중에 이게 제일 신기했다! 마지막에 푼 힙 문제도 이 >> 1로 부모를 따라 올라가는 풀이였는데, 정작 틀린 곳은 올라가는 루프가 아니라 힙을 만드는 방식이었다. 수업은 트리 BFS에서 시작해 이진 탐색 트리( BST ), 힙 순서로 나갔고, 강의 뒤에는 AI가 던지는 질문에 답하면서 이해한 걸 확인했다. Python - < 9 >의 Prim에서 쓰던 he... Read More