[C# / Unity] 서버-클라이언트 통신 시 데이터가 null이 되는 이유: JsonSerializer vs JsonUtility 멀티플레이 오목 게임을 개발하다가 C# 콘솔 기반 데디케이티드 서버와 유니티 클라이언트 간에 패킷을 주고받는데 필드값이 null이나 0으로 초기화되는 현상이 생겼다. .NET의 JsonSerializer와 유니티의 JsonUtility의 다른점 때문이었는데 첫번째는JsonSerializer: 기본적으로 프로퍼티({ get; set; }) 기반. 객체 지향의 캡슐화 원칙을 지키기 위해 외부로 노출된 인터페이스인 프로퍼티만 직렬화하고 내부 변수(필드)는 무시합니다.JsonUtility: 성능 최적화를 위해 필드(Field) 기반으로 작동합니다. public으로 선언된 변수나 ..
오브젝트풀 또 만들어야 돼?게임 아이디어가 떠올랐을 때 그 게임의 재미를 검증하는 방법은 핵심 게임 기능만을 담은 빠른 프로토타입 개발이다. 새로운 프로젝트를 만들어 개발을 시작할 때마다 기존에 사용하던 프로젝트에서 구현했던 유틸리티 클래스들이 다시 필요할 때가 항상 온다. 필요한 해당 코드들을 일일이 Ctrl+C, V 하는 아날로그 방식보다는 공통으로 사용되는 이런 보일러플레이트 코드들은 요즘은 AI로 딸깍하고 만들 수 있다. 하지만 조금 더 개발자 본인의 스타일이나 다용성에 맞게 한번 만들어 놓고 재사용하는 방법이 개발자 개인의 생산성 측면에서 유용하지 않나 싶어 알아본 방법으로 Unity Custom Package로 공통 모듈 라이브러리를 만드려고 한다. Unity Package Manager 이점..
데이터 구조란?데이터를 조직하는 방법자료 구조에 의해 데이터를 다루는 성능과 메모리 효율성이 달라진다.분류Linear Structure 선형 구조 : List(Array), Stack, QueueNon-linear Structure 비선형 구조 : Graph, Tree구현 방법Contiguous Data Structure 순차 자료구조메모리에 연속 저장임의 원소 바로 접근Cache Locality 캐시 지역성으로 인해 빠른 순회데이터 크기만큼의 메모리 크기Linked Data Structure 연결 자료구조데이터를 노드에 저장, 불연속적인 메모리 공간 사용선형시간의 임의 원소 접근흩어진 메모리 공간으로 느린 순회이어진 노드 정보 저장을 위해 여분의 메모리 사용Abstract Data Type 추상 자료형..
Rendering Pipeline3차원 데이터를 2차원 화면 이미지로 변환하는 과정Application Stage - CPU에서 렌더링에 필요한 데이터를 준비Scene의 모든 3D 모델과 카메라, 광원 데이터들의 렌더링 순서와 방법을 결정3D 모델의 기하학 정보(위치, 노멀, UV 좌표, 색상 등)를 담은 Vertex Buffer 생성Vertex Shader에서 사용할 Transformation Matrices(변환 행렬) 계산 (MVP)Culling - 화면에 보이지 않을 객체를 제거View Frustum Culling - 카메라 절두체 밖 객체를 제외Occlusion Culling - 다른 객체에 가려진 객체를 제외Draw CallCPU에서 준비된 데이터를 바탕으로 객체를 GPU에게 렌더링 하라는 명..
Network ModelOSI Model (7 Layer)통신 과정에서 특정 기능을 하는 7단계 계층으로 나눈 모델계층 분리로 개발, 유지보수 용이 → 안전성, 신뢰성Application Layer 응용 계층 (7)사용자와 상호 작용하는 응용 프로그램 지원HTTP, FTPPresentation Layer 표현 계층 (6)데이터 표현/변환하여 다음 계층으로 전달암호화/복호화 진행JPEG, MPEGSession Layer 세션 계층 (5)단위 : Message연결 설정/해제, 동기화, 세션 관리RPC, NetBIOSTransport Layer 전송 계층 (4)단위 : Segment올바른 포트로 신뢰할 수 있는 통신 구현접속, 재전송, 패킷 분할/조립, 순서, 오류 제어TCP, UDPNetwork Layer ..
이벤트 함수의 실행 순서이벤트 함수(Event functions)는 Monobehaviour script가 callback과 같은 메서드를 구현하여 선택적으로 구독할 수 있는 Unity 내장 이벤트들이다.Unity 하위 코어 시스템인 물리, 렌더링, 입력이나 Script 자체 생명 주기 (life cycle)들의 이벤트가 일어날 때 callback 메서드를 호출해 해당 event에 대응할 수 있는 코드를 구현할 수 있게 한다.⚠️ Monobehavior를 받은 instance들 간에서의 이벤트 호출 순서는 알 수 없다! ⚠️ (심지어 부모 자식 GameObject 간에도…)Project Setting - Script Execution Order settings 에서 직접 정할 수 있다.Scene이 시작될..
Delegate 대리자특정 parameter/return 타입의 함수를 reference 하여 나타내며 대리자라고 불린다.invoke(call) 하게 되면 delegate 인스턴스에 reference 된 함수 (혹은 함수들)을 부를 수 있다.delegate는 함수를 parameter로 전달 할 수 있게 한다.Callback 함수에 사용 된다.다양한 함수를 하나의 delegate에 reference 할 수 있다.Action, Actionparameter type 에 따른 delegateFunc, Funcreturn type에 따른 delegate.parameter type이 차례로 오고 마지막이 return type.lambda 식에서 괄호 안에 parameter를 입력. Eventevent를 구독한 ob..
Interface 인터페이스Class의 규약을 정의한다.상속 받는 Class는 Overriding을 강제 당하고 Interface에 정의된 규약을 구현 해야 한다.모든 것이 public으로 선언되고 Access modifier를 사용할 수 없다.규약을 정의하지만 구현부는 없고 Instance를 만들 수 없다.Abstract Modifier 추상 클래스abstract 키워드는 class가 상속 받는 class들의 base class로 만들어졌고 없는 부분이 있거나 불완전 구현이 있음을 나타낸다.abstract class는 인스턴스로 만들수 없다.class, method, property, indexer, event에 사용될 수 있다.abstract method는 하위 class에서 구현되어야 한다.
- Total
- Today
- Yesterday
- Event
- C++
- RenderingPipeline
- 유니티
- unity6
- initializer_list
- 유니티기초
- C#
- 코딩테스트
- delegate
- STL컨테이너
- 팩토리메서드패턴
- 렌더링파이프라인
- 개발모듈
- STL
- 문자열정수변환
- range based for
- 알고리즘
- Unity Package Manager
- dfs
- trailing return type
- 유니티패키지
- Algorithm
- ModernC++
- 유니티6
- modern C++
- 카카오코딩테스트
- UnionFind
- 이진 변환 반복하기
- emplace
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | ||
| 6 | 7 | 8 | 9 | 10 | 11 | 12 |
| 13 | 14 | 15 | 16 | 17 | 18 | 19 |
| 20 | 21 | 22 | 23 | 24 | 25 | 26 |
| 27 | 28 | 29 | 30 |
