전체 글169 2025-02-13 <최종 프로젝트 D-29> 이동동기화 핸들러 클라이언트에 적용하기 마을에 입장하자마자 이동할 때(첫 클릭) 왠지는 모르겠는데 폴리곤을 찾아내지 못한다. 분명 같은 NavMesh 데이터를 가지고 있을 텐데 어떻게 가능한 걸까? 디버그 터미널을 실행시켜보았다. 가장 처음 움직일 때 end 포인트(클라이언트에서 클릭한 지점)의 값이 어째선지 (0, 0, 0)으로 들어오는 중이다.두번째 이동 지점을 클릭했을 때 보다시피 제대로된 값이 들어온다. 클라이언트로부터 수신받는 첫 좌표가 잘못 된 게 확실하기 때문에 클라이언트에서 로직을 다시 살펴보았다.// 왼쪽 마우스 버튼을 눌렀을 때 (Input.GetMouseButtonDown(0))// UI 요소를 클릭하지 않았을 경우만 실행 (!eSystem.IsPointerOverGameObject())// 마우스 위치에서 3D 광선(.. JS/TIL(Today I Learned) 2025. 2. 13. 2025-02-12 <최종 프로젝트 D-30> 이동 동기화 구현 방안 (1) C_Move와 S_Move에서는 경로에 대한 검증을 하고 클라에선 navMesh 기반으로 움직인다. socket별로 path를 저장(가장 최신버전으로 timestamp도 저장) => Path ID를 생성하고 이를 공유하여 같은 경로를 여러 클라이언트가 재사용할 수 있도록 한다.(2) C_Location과 S_Location에서는 실시간 위치 검증을 한다.(속도가 같고 같은 경로로 이동한다면 좌표도 같아야 한다. 이동 알고리즘은 navMesh로 도출할 수 있을 것이다.) 이때 오차 범위를 루트2로 설정. 범위를 넘어가면 클라이언트의 위치 및 상태(hp, mp 등…)를 다시 동기화=> 클라이언트의 NavMesh 경로를 사용하고, 서버는 생성된 path로 검증, 중간에 범위 내에.. JS/TIL(Today I Learned) 2025. 2. 12. 2025-02-11 <최종 프로젝트 D-31> ❗코드 예제는 chatGPT의 도움을 받았습니다. 따라서 실제 구현과 괴리가 있을 수 있습니다. 사용할 모듈에 관해 충분히 공부를 마친 뒤 적절한 코드로 교체하도록 하겠습니다. 따라서, 이 페이지에서는 “게임 구현 방법론”에 초점을 맞추도록 하겠습니다.서버 디자인임태현, 게임 서버 디자인 가이드, NDC2013 | PPT 작은 규모의 게임 서버이므로, 접속자가 많을수록 동기화에 의한 부하가 막심해진다.=> 게임 채널을 분리한다면?(채널 : 메이플스토리, 와우, 로스트아크)=> 게임 룸을 만든다면?(디아블로, 딥락갤)=> 지역을 조각낸다.(클러스터링) → 그렇지만 마을이 그렇게 크지 않아서 문제…. 천 명을 넣어도 좁은 탓에 천명의 채팅을 모두 브로드캐스팅할 수밖에 없다. 파티 시스템을 고려한다면 게임 룸.. JS/TIL(Today I Learned) 2025. 2. 11. 2025-02-10 <최종 프로젝트 D-32> 출처Multiplayer Game Sync Techniques through CAP theorem | PPT Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem - Download as a PDF or view online for freewww.slideshare.netMMOG Server-Side 충돌 및 이동처리 설계와 구현 | PPT MMOG Server-Side 충돌 및 이동처리 설계와 구현MMOG Server-Side 충돌 및 이동처리 설계와 구현 - Download as a PDF or view online for freewww.slideshare.net JS/TIL(Today I Learned) 2025. 2. 10. 2025-02-07 <최종 프로젝트 D-35> 주간 기록 채팅 기능 구상하기 (1) 클라이언트에서 채팅 요청 패킷(C_Chat)을 생성하여 서버로 전송한다.(2) 패킷 헤더에 위치한 packetId를 통해 핸들러 함수(chatHandler)를 매칭한다.(3) chatHandler 함수에서 세션 내 모든 유저에게 채팅 응답 패킷(S_Caht)을 브로드캐스팅한다.핸들러 함수 구현하기패킷 직렬화function makePacket(packetId, payload) { // 패킷 아이디 -> 타입 const packetIdValues = Object.values(config.packetId); const packetIdIndex = packetIdValues.findIndex((f) => f === packetId,); const packet.. JS/TIL(Today I Learned) 2025. 2. 7. 2025-02-06 <최종 프로젝트 D-36> 채팅 프로그램 구상하기 프로토버프 구조 설계C_CreateParty필드명타입설명partyIdint파티 IDpartyLeaderIdint파티장의 playerIdS_CreateParty필드명타입설명partyIdint파티 IDpartyLeaderIdint파티장의 playerIdplayerCountint파티 멤버 수membersplayerIdrepeatedC_JoinParty필드명타입설명partyIdint파티 IDmemberIdint파티에 추가된 멤버의 playerIdS_JoinParty필드명타입설명partyIdint파티 IDpartyLeaderIdint파티장의 playerIdplayerCountint파티 멤버 수membersplayerIdrepeatedC_LeaveParty필드명타입설명partyIdint파티 IDmemberIdint.. JS/TIL(Today I Learned) 2025. 2. 6. 2025-02-05 서로 다른 테이블 조회하기1. JOIN(1) LEFT JOINLEFT JOIN은 왼쪽 테이블의 모든 데이터를 포함하며, 오른쪽 테이블에 일치하는 값이 없을 경우 NULL 값을 포함한다. 즉, 왼쪽 테이블을 기준으로 오른쪽 테이블과 매칭되는 데이터를 가져오는 방식이다. SELECT a.order_id, a.customer_id, a.restaurant_name, a.price, b.name, b.age, b.genderFROM food_orders aLEFT JOIN customers bON a.customer_id = b.customer_id;위 쿼리는 food_orders 테이블의 모든 데이터를 유지하면서 customers 테이블에 매칭되는 데이터가 있는 경우 함께 조회하고, 없는 경우 NULL 값을.. JS/TIL(Today I Learned) 2025. 2. 5. 2025-02-04 <최종 프로젝트 D-38> 내일배움캠프 Node.js 트랙 66일차최종 프로젝트_채팅 기능 구현채팅 시퀀스 구상하기 (1) 클라이언트에서 채팅 요청 패킷(C-Chat)을 생성하여 서버로 전송한다.(2) 패킷 헤더에 위치한 packetId를 통해 핸들러 함수(chatHandler)를 매칭해주기(3) chatHandler 함수에서 세션 내 모든 유저에게 채팅 응답 패킷(S-Chat)을 브로드캐스팅한다.핸들러 함수 구현하기패킷 직렬화function makePacket(packetId, payload) { // 패킷 아이디 -> 타입 const packetIdValues = Object.values(config.packetId); const packetIdIndex = packetIdValues.findIndex(.. JS/TIL(Today I Learned) 2025. 2. 4. 2025-02-03 JS/TIL(Today I Learned) 2025. 2. 3. 2025-01-31 <스레드 경쟁 상태 해소하기> 내일배움캠프 Node.js 트랙 64일차스레드와 경쟁 상태스레드 간의 경쟁 상태를 이해하기 위해선 스레드가 실제 어떻게 실행되는지를 이해해야 한다. 우리가 알아야 하는 건 컴퓨터는 생각보다 똑똑하지 않다는 점이다. 그야 물론 똑똑하기야 하다만, 인간에 비할 수는 없단 얘기다.스레드에게 두 가지 일을 시킨다고 생각해보자. 보통 사람에게 두 가지 일을 해달라고 부탁한다면 하나를 먼저 하고 그 다음 나머지 일을 처리할 것이다. 그러나 컴퓨터 운영체제는 일을 번갈아 수행한다. 1번 스레드를 실행하다가 2번 스레드를 실행하고 또 1번을 실행하고 3번을 실행하는 등 왔다갔다 프로세스를 진행한다.이런 과정을 컨텍스트 스위치라고 한다. 우스운 건 이 컨텍스트 스위치가 컴퓨터 입장에서도 부담스러운 일이라는 점이다. 컴퓨.. JS/TIL(Today I Learned) 2025. 1. 31. 2025-01-27 <운영체제 개요> JS/TIL(Today I Learned) 2025. 1. 27. 2025-01-24 내일배움캠프 Node.js 트랙 60일차자바스크립트의 함수 바인딩자바스크립트에서 함수는 객체로 취급되며, 따라서 변수에 저장되거나 다른 객체의 속성으로 할당될 수 있다. 그러나 함수가 일반 변수처럼 동작할 수 있다는 점에서, 호출 시 컨텍스트(context)가 변경될 수 있다는 점은 주의가 필요하다. 이때, 원하는 컨텍스트로 함수를 호출할 수 있도록 도와주는 개념이 "바인딩(binding)"이다.자바스크립트의 함수 바인딩은 평소엔 존재감이 없는 듯하다가 잊을만하면 발목을 붙잡는 개념이다. 특히 객체 메서드를 콜백으로 전달할 때 발생하는 'this' 정보 손실 문제를 해결하는 데 핵심적인 역할을 한다.'this' 컨텍스트 손실 문제객체 메서드가 객체 외부에서 호출될 때 'this' 컨텍스트가 손실되는 문제.. JS/TIL(Today I Learned) 2025. 1. 24. 이전 1 2 3 4 5 6 7 ··· 15 다음