목록트러블슈팅 (4)
개발자공부일기
이번 프로젝트에서 플레이어클래스와 플레이어의 이동 동기화를 담당했습니다. 플레이어 클래스는 우리가 흔히 아는 형태로import { ATK_PER_LV, PLAYER_MAX_HUNGER, PLAYER_SPEED, PLAYER_DEFAULT_RANGE, PLAYER_DEFAULT_ANGLE,} from '../../constants/player.js';class Player { constructor(id, atk, x, y) { this.id = id; this.user = user; // User Class this.maxHp = PLAYER_MAX_HP; this.hp = PLAYER_MAX_HP; this.hunger = PLAYER_MAX_HUNGER; th..

지금 게임을 실행해 보면이렇게 내 캐릭터의 분신(?) 이 날 자꾸 밀치고 있다.하지만 다른플레이어의 시점에선 내 분신이 보이지 않는다. 왜 그럴까? 지금 내 코드에선 캐릭터를 랜더링할때 클라이언트에서 본인의 위치로 랜더링하고 세션에 존재하는 "모든" 유저들의 위치정보를 가져와서 한 번 더 랜더링 하기때문에 클라이언트 본인의 캐릭터는 2개가 랜더링 되는것이다! 그래서 단순하게 모든 유저들의 위치정보를 반환할때 클라 본인의것만 제외하고 반환하면 안될까..? 했고 // 모든 유저 위치 정보 가져오기 getAllLocation(userId) { const maxLatency = this.getMaxLatency(); // 최대 레이턴시 가져오기 const locationData = this.use..

버퍼객체를 주고받는 테스트를 하던 와중 이런 오류들이 클라이언트(unity)에서 발생했다. 뭐라는지 알아보자 Deserialize: Failed to deserialize data. Exception: System.IO.EndOfStreamException: Attempted to read past the end of the stream. at ProtoBuf.ProtoReader+State.ThrowEoF () [0x00000] in /_/src/protobuf-net.Core/ProtoReader.State.ReadMethods.cs:809 at ProtoBuf.ProtoReader+StreamProtoReader.Ensure (ProtoBuf.ProtoReader+State& state, Sy..
최고기록 갱신시 접속중인 모든 유저에게 전송배경 : 서버에 저장한다고 가정하는 src쪽 전역변수 highScore에 모든 유저들중 최고기록을 저장하고 갱신될때마다 실시간으로 모든 유저에게 업데이트(브로드캐스트)해주고 싶었는데 새로 접속(새로고침)해야만 최고점수가 갱신되는걸 발견발단 : 이렇게 되면 실시간통신이라 보기 힘들었다.전개 : 그래서 AI와 힘을 합쳐 코드를 천천히 읽어봤다.위기 : 아무리 봐도 코드상으로 이상한게 없었고 못찾을뻔했다.절정 : 데이터가 잘 전달 되는지(서로 응답이 잘 주고받아 지는지) 확인하던 도중 socket.on을 작동시켜줄 이벤트이름이 return 데이터에서 누락된걸 발견했다.setupSocketListeners(socket) { // 전역 최고 점수 업데이트 수신 ..