전체 글 93

[유니티] 3D Portfolio #3 아이템, 인벤토리 구현

목표 기본적인 인벤토리와 아이템 획득 및 사용 구현 (작업기간 2023.08.11 ~ 08.18 (8일 소요, 15일 코로나 완치)) 1. 인벤토리 시스템 구현 - 슬롯 프리팹 제작 : 각 슬롯을 프리팹으로 관리하여 슬롯 안에 아이템 정보를 담음. ㄴ 장비의 경우 아이템 카운트 이미지를 사용하지 않음. - Grid Layout Group 를 사용하여 인벤토리 슬롯 정렬 ㄴ 아이템 사용으로 인해 슬롯이 비워지면 해당 슬롯의 내용물을 비우고 슬롯을 맨 뒤로 보낸다. (매번 새로 정렬을 만들어 정보를 넣는 것이 아닌 회전식으로 구현) ㄴ 인벤토리 아이템 숫자에 증감이 있을 때 이미 생성된 슬롯을 불러오기만 하여 정렬 비용이 적다. - 인벤토리 사용시 게임 속도 감속 ㄴ Time.timeScale을 사용하여 0..

[유니티] 3D Portfolio #2 UI, 미니맵 구현, 비동기 씬 로딩 구현

목표 UI 와 미니맵 구현 비동기 로딩 씬 구현 (작업기간 2023.08.02 ~ 08.10 (9일 소요, 코로나 확진으로 인한 작업 지연)) 1. UI 및 미니맵 구현 - UI 매니저 스크립트 : 싱글톤 패턴 사용으로 UI와 캐릭터가 HP와 SP를 공유하도록 제어 ㄴ DontDestroyOnLoad 함수로 씬을 넘어가도 유지되도록 함. - 체력과 기력 구현 ㄴ 움직임 시 기력 소모, 기력 부족 시 움직임 제약 (달리기, 점프 등) ㄴ 체력 및 기력은 움직임 상황에 따라 자연 회복량 변화 (가만히 있을 때 소량, 달리거나 움직일 시 극소량 회복) - 미니맵 구현 (추후에 카메라 없는 버전으로 재구현 예정) : 캐릭터 상공에 미니맵 용 보조 카메라 생성, 캐릭터 마커 구현 ㄴ 캐릭터 마커는 세모를 벡터 값..

[유니티] 3D Portfolio #1 캐릭터 움직임, 카메라 구현

목표 레데리 2에서 사용하는 캐릭터 움직임, 카메라 구현 (작업기간 2023.07.30 ~ 2023.08.01 (3일 소요)) 1. 캐릭터 움직임 - 기본 조작 : 캐릭터 컨트롤러 사용 (물리연산을 사용하지 않아 연산량이 작고 미끄러짐, 벽뚫기 등의 버그가 없어 채택) - 블렌드 트리 사용 : 정지, 걷기, 달리기 애니메이션의 자연스러운 연결 - 캐릭터 오브젝트를 외부와 내부로 구분 ㄴ 카메라 로테이션을 따라가는 외부, 이동방향을 따라 애니메이션 정면을 정렬하는 내부 - 쪼그리기 및 점프 시 캐릭터 컨트롤러 내부 캡슐 콜라이더 조정 ㄴ 자연스러운 접촉 판정을 위해 적절한 값으로 조정, 애니메이션 이벤트 적용시 판정이 늦어 직접 스크립트에서 적용 2. 카메라 - 기본 조작 : 마우스 움직임을 입력받아 방향..

[유니티] 캐릭터 fbx 파일 적용하기

https://www.mixamo.com/ Mixamo www.mixamo.com 게임 클라이언트 개발을 할 때 가장 곤란한건 캐릭터와 애니메이션을 구하는 것이다. 이를 해결하기 위해 Assetstore ,Mixamo, Sketchfab 등을 이용하는데 믹사모에서 받은 fbx 캐릭터의 색이 입혀지지 않는 문제가 발생하였다. 이는 유니티가 fbx 파일을 바로 받아들이지 못하여 생기는 문제며 이를 직접 세팅해주어야 한다. 1. 다운로드 하기 (다운로드 세팅) 다운로드 세팅에서 기본 fbx 파일로 받아도 되나 유니티에서 사용할 경우에 아래와 같이 유니티 포멧으로 받아주는 것이 좋다. 실제로 다운받은 파일을 보면 위의 For Unity 파일이 아래의 Binary 파일보다 용량이 조금 더 큰 것을 확인할 수 있다..

[C++] 알고리즘 #2 백트래킹 알고리즘 (Backtracking algorithm)

목차 1. 백트래킹 알고리즘 2. 로직 3. 구현 1. 백트래킹 알고리즘이란? - 모든 경우에 수에 대해 탐색 - 탐색 중에 해당 경로가 해가 될 가능성이 없다면 경로를 되돌아가 다시 결과를 찾는다. (가지치기) - 주로 DFS(깊이 우선 탐색) 방식으로 확인한다. 2. 로직 가. 유망성 검사 - 해가 될 가능성이 있는지 조건을 설정한다. 나. 가지치기 - 유망성 검사를 통해 가능성이 없는 경로를 차단(가지치기) 하여 탐색의 효율성을 높인다. 3. 구현 문제 예시 https://www.acmicpc.net/problem/15649 15649번: N과 M (1) 한 줄에 하나씩 문제의 조건을 만족하는 수열을 출력한다. 중복되는 수열을 여러 번 출력하면 안되며, 각 수열은 공백으로 구분해서 출력해야 한다. ..

C++/알고리즘 2023.07.09

[C++] 알고리즘 #1 유클리드 알고리즘(Euclidean algorithm)

목차 1. 유클리드 알고리즘 2. 로직 3. 구현하기 1. 유클리드 알고리즘이란? - 2개의 자연수 혹은 두 다항식의 최대 공약수를 구하는 방법 - 서로 나누어 해를 구하므로 유클리드 호제법(互除法 : 합(互)하고 나누는(除) 방법(法))이라고도 한다. 2. 로직 가. 최대 공약수 두개의 자연수 a,b (a>b)에 대하여 a를 b로 나눈 나머지가 r일 때, a와 b의 최대 공약수는 b와 r의 최대 공약수와 같다. 이에 따라 b와 r에 대해서 나머지 r2를 구하고 r을 r2로 나누는 과정을 반복하여 나머지가 0이 되었을 때 나누는 수가 최대 공약수가 된다. 나. 최소 공배수 최소 공배수는 최대 공약수를 이용하여 구할 수 있다. 두개의 자연수 a,b (a>b)에 대하여 a와 b의 최소 공배수는a와 b의 곱을..

C++/알고리즘 2023.07.06

[C++] 정렬 #3 병합 정렬 & 퀵 정렬 (Merge Sort & Quick Sort)

목차 ※ 정렬 #1 버블 정렬 & 선택 정렬 ※ 정렬 #2 삽입 정렬 & 힙 정렬 1. 분할 정복 알고리즘 2. 병합 정렬 (Merge Sort) 3. 퀵 정렬 (Quick Sort) 1. 분할 정복 알고리즘 - 엄청나게 크고 방대한 문제를 나누어 쉽게 풀 수 있는 작은 크기로 나누어 문제를 해결 한 뒤 합쳐서 해결하는 방식이다. - 어려운 문제를 간단하고 빠르게 해결 할 수 있다. - 함수 재귀 호출을 이용하여 구현하므로 오버플로가 발생할 수 있고 쪼갠 문제를 저장해야 하므로 메모리 사용량이 크다. ※ 3가지 단계를 거쳐 해결한다. 가. 분할: 문제를 더이상 분할할 수 없을 때까지 동일한 유형의 여러 하위 문제로 나눈다. 나. 정복: 가장 작은 단위의 하위 문제를 해결하여 정복한다. 다. 조합: 하위 ..

C++/자료구조 2023.07.03

레데리2 ERR_GFX_INIT 오류 해결

Red Dead Redemption 2 게임을 하다가 갑자기 ERR_GFX_INIT 오류가 뜨며 게임 실행이 멈추어 고통받았습니다. 같은 문제를 겪는 분들이 있다면 이 글을 보고 해결했으면 좋겠습니다. 목차 case 1 : 그래픽 카드 드라이버 호환 문제 case 2 : 불칸 버전 호환 문제 ※ 번외 : case1, case2 실패 시 - 게임 재설치 후 case 2 재 시도 - 필자는 재설치 이후 case 2 재시도를 통하여 성공하였습니다. 1. 그래픽 카드 드라이버 다운 그레이드 만약 최신 드라이버가 레데리 2와 호환 되지 않는 경우 이와 같은 방법으로 해결이 가능합니다. 가. 검색창에서 장치관리자 혹은 device manager 검색 나. 장치 관리자에서 디스플레이 어댑터 내의 본인 그래픽 카드의 ..

게임 2023.07.01

[C++] 정렬 #2 삽입 정렬 & 힙 정렬 (Insertion Sort & Heap Sort)

목차 ※ 정렬 #1 버블 정렬 & 선택 정렬 1. 삽입 정렬 (Insertion Sort) 2. 힙 정렬 (Heap Sort) 1. 삽입 정렬 (Insertion Sort) - 배열의 요소를 앞에서 부터 이미 정렬된 배열과 비교하여 자신의 위치를 찾아 정렬 - 1회전 마다 하나씩 요소들을 정렬해나간다. - 배열이 길수록 효율이 떨어진다. (비교할 정렬이 길어지므로) - 본인 위치를 찾아 삽입하여 정렬하므로 삽입 정렬이라 한다. - 시간 복잡도가 버블 정렬, 선택 정렬과 같은 O(n²) 이지만 둘 보다 빠르다. 가. 구현하기 2. 힙 정렬 (Heap Sort) - 완전 이진 트리로 구성되어 최대 힙 트리나 최소 힙 트리를 구성해 정렬. - 정렬된 최대(최소) 힙에서 루트 노드를 꺼내어 배열에 저장한다. -..

C++/자료구조 2023.06.30

[C++] 정렬 #1 버블 정렬 & 선택 정렬 (Bubble Sort & Selection Sort)

목차 1. 정렬 알고리즘 2. 버블 정렬 (Bubble Sort) 3. 선택 정렬 (Selection Sort) 1. 정렬 알고리즘 - 원소들을 번호 순이나 사전 순 같이 일정한 순서로 열거하는 알고리즘 - 다른 알고리즘을 수행 하기 전 최적화를 위해 우선적으로 실행한다. - 대표적인 정렬 알고리즘 6개가 존재한다. ㄴ 버블 정렬, 선택 정렬, 삽입 정렬, 힙 정렬, 병합 정렬, 퀵 정렬 ※ 시간 복잡도 Sorting Best Avg Worst 버블 정렬 O(n²) O(n²) O(n²) 선택 정렬 O(n²) O(n²) O(n²) 삽입 정렬 O(n) O(n²) O(n²) 힙 정렬 O(nlog₂n) O(nlog₂n) O(nlog₂n) 병합 정렬 O(nlog₂n) O(nlog₂n) O(nlog₂n) 퀵 정렬 ..

C++/자료구조 2023.06.29