분류 전체보기(69)
-
[최종 프로젝트] 서버와 기획에 맞게 클라이언트 수정하기
오, 아름다운 나의 상상 코드팀원들의 작업 속도는 예상보다 빨랐고, 서버는 추가 기획된 부분까지 하나 둘 구현되기 시작했다. 문제는 추가 기획된 부분을 테스트하려면 기본 클라이언트를 수정해야 한다는 것이었다. 프로젝트를 위해서도, 후에 유니티 담당자분들과 협업할지도 모르는 미래의 나를 위해서도 일단 클라이언트 수정 작업에 도전해봐야겠다는 생각에 일단 작은 것부터 시작해보기로 했다. 실전으로 배우는 유니티작업자마다 다르겠지만, 개인적으로 유니티에서 UI를 먼저 세팅하고 스크립트를 연결하는 것이 가장 작업 속도가 빨랐다. 유니티에서 밑그림을 그리고, 그에 맞는 스크립트를 짜서 채색하는 느낌이었다. // 속성 아이콘이 출력될 위치[SerializeField] private Image imgElement;..
2024.12.16 -
[최종 프로젝트] 트러블 슈팅 - 1118
채팅이 왜 여러번 나올까?채팅이 왜 여러번 나올까? 위의 이미지처럼 던전에 다녀온 캐릭터가 채팅을 치면 2번, 3번씩 올라오는 버그가 발견되었다. 던전에 다녀온 횟수 만큼 채팅이 올라오는 것으로 미루어보아, townSession에 user 데이터가 중첩되어 쌓이고 있는 것 같다는 생각이 들었다. townSession에 user 데이터를 쌓는 것은 cEnterHandler가 호출될 때 뿐이므로, 해당 핸들러에서 기존 유저가 세션에 추가되는 로직을 다시 검토해보기로 했다. let newUser; // 닉네임 중복 확인 const existingPlayer = await findUserNickname(nickname); if (existingPlayer) { // 존재하는 유저일 경우, ..
2024.11.18 -
[최종 프로젝트] 트러블 슈팅 - 1115
기본 클라이언트를 파일을 받아, 기획에 맞게 수정하기 전에 일단 서버를 붙여보기로 했다. 기본적인 패킷 설명서가 있었기 때문에, 하나씩 분석하고 기능을 구현하던 중 코드가 너무 길고 비효율적이라는 생각에 정리를 해보자는 의견이 나왔다. 위치만 바꿨을 뿐인데, 사라져버린 캐릭터 최초 입장 시, 클라이언트에서 보내주는 C_Enter 패킷의 Response로 S_Enter 패킷을 보내주는 기능만 핸들러에 우선적으로 구현해둔 상태였다. 플레이어가 여러명 접속해도 서로의 모습이 보이는 부분까지 문제가 없는 것을 확인했기에, 위와 같이 주르륵 나열된 부분을 뜯어 utils 폴더에서 따로 관리할 수 있게 수정하는 것은 쉬운 일이라고 생각했다. 이전 프로젝트에서도 같은 작업을 해봤기에, 자신있게 시작했으나... 캐릭터..
2024.11.15 -
[알고리즘 코드카타] 바탕화면 정리
예시를 보고 더 혼란스러웠던 문제이다. (x, y) 순서대로 result가 나와야 할 것 같은데 (y, x) 순서대로 result가 나와야 해서 괜히 더 헷갈렸던 것 같다. 이중for문으로 좌표를 구하고, x의 최대/최소값과 y의 최대/최소값만 구한 뒤 순서대로 넣으면 될 것 같아서 코드를 짜기 시작했다.function solution(wallpaper) { let point = []; for (let i = 0; i 문득, 굳이 (x, y) 형태로 하나의 배열에 좌표값을 밀어넣을 필요가 있나? result를 뽑아내려면 너무 복잡해지지 않나? 라는 생각이 들어 x값과 y값을 따로 모아주는 형태로 바꾸기로 했다. function solution(wallpaper) { let X = []; let..
2024.11.09 -
[CH6] 타워 디펜스 리마스터 프로젝트 - 트러블슈팅110
특정 영역에 랜덤하게 길 만들기이전에 타워 디펜스 게임을 제작할 때, 팀원분이 sin 함수를 사용하여 화려하게 랜덤한 길을 그렸었다. 멀티 플레이 게임이 매칭되는 순간, 랜덤하게 길을 그려주고 시작해야 하기 때문에 해당 코드를 참고해보기로 했다.const path = []; let currentX = 0; const amplitude = height / 3; // 진폭으로 상하 폭 결정 const frequency = 0.025; // 주파수로 곡률 결정 const phase = Math.random() * Math.PI * 2; // 위상으로 파형 결정 (시작 지점 변동) while (currentX height) { currentY = height; ..
2024.11.08 -
프로세스와 스레드, 컨텍스트 스위칭
1. 프로세스와 스레드의 기본 개념운영체제에서 프로세스와 스레드는 중요한 역할을 담당한다. 프로세스는 실행 중인 프로그램을 의미하며, 독립된 메모리 공간을 가진다. 스레드는 프로세스 내에서 실행되는 단위로, 프로세스의 자원을 공유하면서 동시에 여러 작업을 수행할 수 있다. 프로세스는 각각 독립된 메모리 공간을 가지기 때문에, 프로세스 간의 자원 공유는 IPC(Inter-Process Communication)를 통해 이루어진다. 반면, 스레드는 같은 프로세스 내에서 Stack만 따로 할당 받고, Code/Data/Heap에 해당하는 메모리 영역을 공유하기 때문에 데이터 공유가 용이하다. 만약 프로세스를 여러개 실행하던 중, 하나의 프로세스가 오류로 인해 강제로 종료된다면 다른 프로세스들에 영향이 있..
2024.11.04