Metaverse 62

RPG Project - Event

퀘스트를 구현하던 팀원이 넘겨줘서 몬스터 Die마다 monsterID를 넘겨주는 코드를 짜달라고 했는데, 내가 이벤트 핸들러를 구현해서 새로운 이벤트를 만들고 Invoke해야 하는 줄 알고.. 잘못 해갔다가 회의하면서 노션에 정리해둔 내용 보여줬는데 팀원이 당황했다...ㅎㅎ 그냥 구현되어 있는 Action에 매개변수만 넘기면 되는거였어서... 정말.. 바보였다... 다음부턴 커뮤니케이션을 잘 하기로 했고 덕분에 소통의 중요성을 깨달았다.. int MonsterID(object sender, EventArgs e) { if (this.CompareTag("Ork")) { monsterID = 2000; } else if (this.CompareTag("Golem")) { monsterID = 2005; }..

Metaverse/Unity 2023.09.16

Event

Win API 동작구조 WinMain() 함수를 통해 윈도우 응용 프로그램이 시작됨 사용자 입력 이벤트는 모두 메세지로 전환됨 윈도우 운영체제는 이벤트에 따른 메세지를 메세지 큐에 추가 메인 메세지 루프는 메세지 큐에서 메세지를 꺼내서 처리 (FIFO 구조) 윈도우 종료 메세지를 처리하면 메인 메세지 루프가 종료되고 응용 프로그램도 종료됨 C#에서 이벤트 작성 과정 이벤트 발생 시 처리해줄 메서드 작성 (이벤트 핸들러) 이벤트 핸들러의 형태와 일치하는 델리게이트 선언 (System.EventHandler 델리게이트를 사용하면 이 과정 생략됨) 이벤트 선언 (미리 정의된 이벤트인 경우 이 과정 생략됨) 이벤트에 이벤트 처리기 등록 이벤트 발생 이벤트와 대리자의 차이점 : 이벤트는 외부에서 직접 사용할 수 ..

Metaverse/Unity 2023.08.31

Mesh와 WireframeRendering

Mesh : 삼각형을 중심으로 물체에 관련된 정보를 기록한 데이터 삼각형을 이루는 각 점의 위치를 가지고 있어야 함 물체를 표현하는데 활용할 수 있는 색상이나 방향과 같은 다양한 부가 정보도 담아서 제공 위치 정보와 부가 정보를 묶은 특별한 점을 정점이라고 함 즉, 메시는 정점들이 모인 데이터 정점 버퍼와 인덱스 버퍼에 데이터 저장 ex) 정사각형을 구성하는 메시 정보 기준점 (0, 0) P0(-0.5, -0.5), P1(-0.5, 0.5), P2(0.5, 0.5), P3(0.5, -0.5) 정점 버퍼 순서 좌표 0 (-0.5, -0.5) 1 (-0.5, 0.5) 2 (0.5, 0.5) 3 (0.5, -0.5) 인덱스 버퍼 순서 삼각형 정점 순서 0 0 0 1 0 1 2 0 2 3 1 0 4 1 2 5 ..

게임 서버 - 관계형 데이터베이스와 NoSQL

관계형 데이터베이스의 부족한 점 기존 테이블에 레코드 1억 개가 이미 들어있다고 가정 필드 하나를 추가하면 데이터베이스 엔진은 기존에 있는 레코드 1억 개 전체에 필드를 추가해야 함 프로그램 구조가 복잡해질수록 테이블 구조도 변경, 유지보수하면서 점점 힘들어짐 데이터베이스의 수직분산과 수평분산 데이터베이스의 수직 분산: 여러 테이블을 각각 여러 데이터베이스 컴퓨터에 나눔 데이터베이스의 수평 분산: 테이블 하나가 레코드를 1억 개 가졌다고 가정하고 데이터베이스 컴퓨터가 100대 주어졌다면, 각 컴퓨터에 데이터베이스를 설치하고 1억을 100으로 나눈 수인 100만 개씩 레코드를 분배, 이렇게 수평으로 분산된 데이터베이스에서는 각 컴퓨터가 큰 테이블 1개를 조각조각 가진 셈으로, 이를 샤드라고 함 이 상태에서..

Metaverse/복습 2023.08.16

RPG Project 오류 일지 - Respawn

오브젝트 풀에 10개의 오브젝트를 할당해두고, 몬스터가 죽어도 전체 개수는 계속 10개로 유지하도록 구현했다. 구현하는 중에 오브젝트 풀을 Manager로 선언해서 싱글톤 패턴을 적용할까 싶었지만, Monster에만 관여하므로 굳이 싶었다.. (프리팹이 더 다양했으면 처음부터 Manager로 올렸을거다) 그래서 최대한 지금 상태에서 생각할 수 있는 방법을 적용하려고 머리를 굴렸다. 유니티 함수의 생명주기를 다 고려해보다가 죽은 몬스터의 인덱스를 찾는건 Update()가 가장 적절하다고 생각했고, 리스폰해주는 함수의 위치를 생각하는건 꽤 어려웠다.. 이 참에 생명 주기 함수를 모두 복습했고, 코루틴도 복습했지만 적절한 위치가 없었고, 코루틴은 메모리 낭비가 큰 것 같아 InvokeReapeating을 사용..

Metaverse/Unity 2023.08.15

윈도우 프로그램 분석

1. WinMain 함수 윈도우 응용 프로그램의 시작 진입점을 나타내는 함수 윈도우 응용 프로그램이 실행되면 윈도우 운영체제는 이 함수를 실행하여 응용 프로그램을 시작 이 함수가 종료(반환)되면 응용 프로그램이 종료됨 일반적인 윈도우 응용 프로그램이 되려면 이 함수는 다음과 같은 기본적인 일을 처리해야 함 윈도우 클래스를 시스템에 등록 (Register Window Class) 응용 프로그램 초기화 및 주 윈도우 생성 메시지 루프 2. 윈도우 프로시져 윈도우 클래스를 등록할 때 설정한 윈도우 프로시져 함수 주 윈도우가 처리해야 하는 윈도우 메시지가 주 윈도우에게 전달될 때 호출되는 메시지 처리 함수 메시지 루프에서 DispatchMessage() 윈도우 API 함수를 호출하면 WindProc()함수가 실..

Metaverse/DirectX 2023.08.03

DirectX12 - Project Setting

응용 프로그램 마법사가 자동으로 생성한 소스 파일 project명.h project명.cpp framework.h: 표준 시스템 포함 파일 또는 프로젝트를 위한 특정 포함 파일들을 포함하는 파일 Resource.h: 윈도우의 리소스(메뉴, 대화상자 등)의 ID를 정의하는 헤더 파일 targetver.h: 응용프로그램의 플랫폼을 정의하는 헤더 파일 1) framework.h의 파일명을 "stdafx.h"로 변경 : 프로그램에서 사용하는 주요 헤더 파일들을 포함, 나중에 이 파일에 Direct3D 12의 헤더 파일을 추가할 것 2) stdafx.cpp 파일 추가 후 헤더 include 3) 4) 프로젝트명.cpp 파일에 선언된 헤더 이름을 바꿔주고 빌드하면 설정 끝!

Metaverse/DirectX 2023.08.03

게임 서버 - 데이터베이스 기초

각 플레이어의 로컬 컴퓨터에 플레이어 정보를 저장하면? 플레이어가 자리를 옮겼을 때 자기가 플레이하던 정보를 이어서 할 수 없음 플레이어가 해킹을 할 줄 안다면, 자기가 컴퓨터에 저장된 플레이 정보를 조작할 수 있음 플레이어 정보를 서버에 저장하는 방법: 파일과 데이터 베이스 상용으로 서비스되는 게임들은 대부분 플레이어 정보를 데이터베이스에 저장함 파일 vs 데이터베이스 데이터베이스는 구체적인 상황에서도 빠르고 다각적으로 데이터 검색할 수 있음 데이터베이스 구성 데이터베이스에서 다루는 데이터는 표 형태의 집합 데이터베이스 인스턴스: 테이블의 집합으로 데이터베이스가 다루는 가장 큰 단위의 데이터 집합 데이터베이스에서는 행 단위로 데이터를 넣거나 뺄 수 있으며 이 행을 레코드라 함 레코드 안에는 표의 열이 ..

Metaverse/복습 2023.08.01

게임 네트워크 엔진

프라우드넷의 네트워크 모듈 1. NetServer 클래스: 게임 서버의 메인 모듈 클라이언트의 연결을 받으며, 클라이언트와 메시지를 주고받는 역할을 함 각 클라이언트의 네트워크 상황 등을 열람할 수 있음 2. NetClient 클래스: 게임 클라이언트에서 네트워크 모듈 서버로 연결을 맺은 후 메시지 주고받기를 수행할 수 있음 다른 클라이언트와 P2P 통신도 가능 NetServer 인스턴스를 생성하고 NetServer가 클라이언트 접속을 받으려면 다음 작업이 필요 CNetServer.Create()로 CNetServer 인스턴스를 생성 CNetServer.Start()로 서버가 클라이언트 접속을 받을 수 있게 함 Start()에 들어가는 필수 매개변수는 프로토콜 버전과 리스닝 포트 번호로, 프로토콜 버전은..

Metaverse/Network 2023.07.31

게임 네트워킹

모든 역할을 서버에서 하기 클라이언트가 하는 역할 사용자 입력(키 입력, 마우스 좌표) 화면 출력 서버에서 하는 역할 게임 로직 연산 화면 렌더링 (그래픽 데이터 보유) 화면 송출(비디오 스트리밍) 온라인 게임을 방해하는 레이턴시가 길어지는 요인 서버가 멀리 있으면 네트워킹 중에 레이턴시가 추가됨 클라우드 서버 안에서 가상머신은 다른 가상머신이 CPU 사용량을 잠식하면서 조금씩 지연 시간이 있을 수 있음 패킷 드롭으로 인한 재송신은 간헐적인 큰 지연 시간을 일으킴 인구가 낮은 국가에서는 인터넷이 느림 무선 네트워크에서는 레이턴시와 패킷 드롭률이 크게 증가함 서버 운영의 경제성 문제 고퀄리티 그래픽을 60프레임으로 렌더링하려면 그래픽카드 하나가 모든 능력을 동원해야 함 (서버에서 이것을 하려고 하면 서버에..

Metaverse/Network 2023.07.27