2025/04 19

04/30 TIL - 유니티 입문(Stack Block)

Lerp를 사용하면 a에서 b까지의 값 중, value에 해당하는 위치의 값을 반환한다.Lerp(a,b,value) => 변하는 위치를 잡거나, 색상을 변경할 때 Stack Project블럭 쌓기 미니게임 프로젝트를 진행하면서 어려웠던 부분은 없었고, 생소한 함수들이 나왔다.Mathf.PingPong(T, Length) ==> 0부터 Length까지 T에 해당하는 값을 반환한다!처음에는 T의 크기에 따라 위치가 변하는 폭이 커진다 생각해서 상수를 넣고 오브젝트를 움직여보고자 했지만,제자리에 가만히 있었다. 결과적으로는 T의 값에 따라 0부터 Length 사이의 특정 위치를 반환해준다고 보면 되겠고, 이를 선형적으로 움직이는 것처럼 표현하기 위해 시간이나 증가하는 변수를 대입해야 원하는 결과(선형적인 위치..

04/29 TIL - 유니티 입문 강의 수강

텍스트 콘솔 rpg가 끝나고 새로운 주차가 되며 유니티를 본격적으로 배우기 시작한다.tappybird라는 새를 터치해서 장애물을 피해 계속 날아가는 형식의 게임을 제작하면서 이전에 배웠던 내용을 복습하는 시간을 가졌다.그 중에서 놓쳤던 부분이나 새롭게 알게된 것, 잊고 있었던 부분들에 대해서 정리해보자.- 충돌 처리를 하는 collider 2d에는 box 외에도 circle, polygon 등의 스타일이 있다.box는 네모, circle은 원, polygon은 지정한 스프라이트(오브젝트)의 모양대로 충돌 처리를 하는 영역을 추가해준다. - rigidbody의 속성에는 dynamic, kinematic이 있다.dynamic은 일반적인 물리 연산을 진행한다, 중력, 질량 등의 실제 물리 법칙을 적용하는 반면..

04/28 TIL - 복습내용(시간 기반 서버 루프 / 메모리 디버깅)

📒 시간 기반 서버 루프✅ 기본 개념서버는 일정한 주기로 동작하는 루프(loop) 를 가진다.정확한 루프 주기를 맞추기 위해 고해상도 타이머를 사용한다.✅ 주요 함수timeBeginPeriod(1): 타이머 간격을 1ms로 설정 (반드시 초기화 시 호출).QueryPerformanceCounter() / QueryPerformanceFrequency()고해상도 타이머 사용.Counter / Frequency를 나눠 초 단위 시간 계산.✅ 프레임 제어 방식목표 프레임 예시:MMO: 약 10fpsRPG: 약 30fps액션 게임: 50~60fps루프 구조:cpp복사편집while (running) { auto start = GetTime(); // QueryPerformanceCounter 사용 Process..

04/25 복습내용

c++ 및 서버 환경 관련 내용 정리✅ 1. 컴파일과 실행 최적화디버그 vs 릴리즈릴리즈에선 불필요한 코드 제거 및 최적화.디버그에선 존재하던 코드가 릴리즈에서 사라질 수 있음..pdb 파일: 소스코드와 기계어의 매핑 정보 포함 → 디버깅 시 중요.inline 최적화__inline만 강제 인라인 가능.너무 과도한 인라인은 오히려 코드 부풀림.volatile: 최적화된 코드에서 예상 못한 제거를 방지하기 위한 키워드.✅ 2. 시간/타이머 관리 (게임/서버 중심)타이머 종류clock(): C 표준 함수, 초 단위.GetTickCount() / GetTickCount64(): 밀리초, 경량 호출.timeGetTime(): 더 정확한 시간(정밀도 설정 필요).QueryPerformanceCounter(): 고해..

04/24 캠프 배치고사 및 복습 내용

오늘은 배치고사로 인해 팀 프로젝트보다는 이쪽으로 치중한 하루였다.기능 구현들은 거의 다 완성된 상태이니 리팩토링이나 사소한 수정 부분을 제외하면 남은 것이 없었기에 개인 공부에 시간을 투자했고, 그 과정 중 하나가 과거에 배웠던 내용을 복습하는 것이었다.어제 잠을 덜 자서 그런지 복습양이 많지는 않았지만 잊고 있었던 부분을 다시 돌아보게하는 시간이었다.✅ 디자인 패턴🔹 싱글턴(Singleton)하나의 인스턴스만 존재해야 하는 경우 사용.생성자 private, static 멤버 함수로 접근.inline static (C++17 이후)으로 멤버 변수 정의 가능.구현 방식지역 static 변수: 첫 호출 시 생성.동적 할당 시 atexit()으로 소멸자 등록 가능.주의사항정적 멤버 변수 간 초기화 순서, ..

04/23 TIL 인터페이스 클래스의 json 직렬화/역직렬화

TIL에 3일간 퀘스트 클래스와 관련한 얘기만 적어서 이 클래스만 작업한 것처럼 보이지만.. 인벤토리 수정과 플레이어, 아이템 리스트를 json으로 save/load 작업을 진행했어서 이 퀘스트 클래스도 금방 할 것 같았지만 막상 json으로 넣으려고 생각해보니, 인터페이스 리스트로 퀘스트의 전체 목록을 갖고는 있지만 얘들을 그대로 넣기에는 json 형식을 통일할 수가 없을 것이라는 예상을 했고, 이는 그대로 들어맞았다. 그래서 찾은 방법이 각 quest들을 동일한 클래스로 변환하고, 이를 json으로 저장하는 것이다. 처음에는 인터페이스를 자동으로 변환해주는 함수를 찾아서 검색을 했으나 사용이 복잡하다고도 하고 각 클래스가 노출될 수 있다는 위험성이 있다 보니 앞선 방식을 구현하게 되었고, 이 방식이 ..

04/22 TIL

오늘은 어제 작업하던 퀘스트 클래스의 연장선이었어서 추가적으로 공부한 것은 없고, 알게 된 것을 한 두가지 적는다.같은 프로젝트 내의 서로 다른 클래스에서 서로의 멤버를 접근하고자 할 때는 클래스 자체의 접근 지정자를 확인해야한다.public은 다른 프로젝트, 다른 어셈블리에서도 접근 가능한 접근자(다른 프로젝트라는 의미가 무엇인지는 확인이 필요, 내일 오전 중 확인할 것)internal은 동일 프로젝트 내에서는 자유롭게 접근 가능, private는 해당 클래스 내에서만 접근 가능(--> 사실상 쓰지 않는 접근자) git 커밋 후 PR(pull-request)시 충돌이 발생할 경우, 마스터 브랜치의 최신 버전을 받아와서 내 브랜치와 병합 후, 충돌이 난 부분을 수정 후 커밋하면 된다.. 고 하는데내 경우..

04/21 TIL 클래스 인터페이스, 이벤트 방식 고민

이전에 진행한 개인 프로젝트를 팀 프로젝트로 확장해서 진행하게 되었다.혼자 작업하는 것이 아니다 보니 남들이 내가 작업한 클래스에 접근하려면 어떤 방식이 제일 간편하고 유지 보수도 편할지를 계속 고민하게 되는 부분이다.언제나 최악을 가정해서 딸깍 한 번으로 내 클래스의 기능이 다 동작하게 한다면 좋겠지만, 아직 그렇게까지 유연하지도 실력이 되지도 않는 거 같다.잡설은 적당히 하고 인터페이스 방식과 이벤트 방식의 차이점에 대해서 알아본 것을 정리하고자 한다. 인터페이스 vs 이벤트 우선 둘의 공통점을 봐보자. 퀘스트를 작업하고자 했으니 퀘스트로 예시를 들자면- 조건을 외부에서 체크하지 않는다- 퀘스트 진행도와 완료 여부는 각 클래스(객체)에서 관리- 기능적으로는 동일하다( 특정 행동을 했을 때 해당 퀘스트..

04/18 개인 프로젝트 과제 마무리

두 번째 주차, C#문법 기초 강의의 개인 과제인 textRpg를 제출하는 날이었다.오전에 마무리 작업을 진행하고(도전 기능 중 하나를 놓쳐서 급하게 추가했다) 단순하게 구현만 하면 어려울 거 없는 과제였지만 그래도 나름 게임 개발자를 목표로 하니 어느정도 구조를 잡고 들어가려니 고민할 것들이 많았다.gamemanager를 따로 둬서 컨텐츠 호출을 지시할 것인데, 어디까지 호출할 것인지?(게임 시작 함수나, 각 컨텐츠를 불러오는 기능은 당연하다만 그렇다면 해당 컨텐츠에서 어느 요소까지 접근 가능한 것인지)player 클래스와 item 클래스를 따로 뒀지만 이들에게 직접 기능들을 넣는 것은 후에 수정이나 추가 등이 불편해 보여서 매니저를 따로 두는 것이 좋을 것 같아 player manager와 item ..

04/17 TextRPG 개인 과제 진행

오늘은 길게 쓸만한 내용이 없다.하루 종일 프로젝트의 클래스 구조와 확장성에 대한 고민을 계속하면서 작업하다 보니 속도도 제대로 안나오고 수정도 자주하게 됐다.출력하는 문장의 형식과 위치를 조절하는 것은 예전에 찾아서 배운 내용을 c# 스타일로 적용하는 것에 익숙하지 않았을 뿐 금방 찾아서 해결했고, 나머지는 수월하게 수정해나가는 중..내일 제출이니 오늘은 좀 무리해서 모든 기능 구현을 목표로 하자. ---------json 파일을 읽어올 때 set이 없으면 읽지 못한다.. 메모..