no image
[Unity] Time 클래스의 프로퍼티들
Time.time Time.time은 프로젝트 재생이 시작된 이후의 시간을 반환한다. Time.deltaTime delta는 값의 차이를 뜻하는데, 현재 프레임의 시작시간과 이전 프레임의 시작시간과의 차이이다. 이는 지난 프레임이 완료되는 데까지 걸린 시간 차이를 의미하는 것과 동일한 의미이다. 즉, 한 프레임을 진행하는데 걸린 시간을 뜻한다. ※ FixedUpdate에서 Time.deltaTime이 호출되면, Time.fixedDeltaTime을 반환하게 된다. 30 프레임, 60 프레임에서의 deltaTime 보통 30프레임 기준에서는 Time.deltaTIme이 0.033초 정도가 나오고, 60프레임 기준의 게임에서는 0.016초정도가 나온다. 이동관련 코드에서 deltaTime을 사용하지 않을 경..
2022.01.28
no image
[Unity] 인스펙터에 요소들 카테고리로 묶어서 표출하기
코드 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class InspectorFieldTest : MonoBehaviour { [System.Serializable] public class InspectorComponent { public Button createButton; public Image backgroundImage; } public InspectorComponent inspectorComponent; } 결과이미지 위 처럼 코드를 짰을 때, 관련있는 요소들끼리 묶어서 인스펙터에 보여줄 수 있도록 만들 수 있다.
2021.11.14
no image
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘(4) / 미로 준비, Binary Tree 미로 생성, Side Winder 미로 생성
맵 만들기 소스코드 class Board3 { const char CIRCLE = '\u25cf'; public TileType[,] _tile; // 배열 public int _size; public enum TileType { Empty, Wall, } // 배열 초기화 public void Initialize(int size) { _tile = new TileType[size, size]; _size = size; for (int y = 0; y < _size; y++) { for (int x = 0; x < _size; x++) { if (x == 0 || x == size - 1 || y == 0 || y == size - 1) _tile[y, x] = TileType.Wall; else _ti..
2021.10.21
no image
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘(3) / 선형 자료 기초
배열, 동적 배열, 연결 리스트 비교 프로그래밍은 데이터를 저장하고, 그것을 꺼내서 잘 활용하는 것이 게임이고 프로그래밍인 것이다. 자료 구조는 크게 선형 자료구조와 비선형 자료구조로 나눌 수 있다. 선형 구조 : 자료를 순차적으로 나열한 형태 배열 연결 리스트 스택 / 큐 비선형 구조 : 하나의 자료 뒤에 다수의 자료가 올 수 있는 형태. 트리 그래프 ex) 파일구조 자료구조와 알고리즘을 공부할 때 자료구조와 알고리즘은 책으로 복잡하게 외우는 것은 쓸모가 없다. 애초에 이 학문은 실생활 문제를 해결하고 도움을 주기 위해 발전한 학문이기에, 최대한 현실상황에 맞게 생각을 하면서 어떤 식으로 언제 활용할 것인지 공부하는 것이 오래 남는다. 배열 - 사용할 방 개수를 고정해서 계약하고 (절대 변경 불가) -..
2021.10.02
no image
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘(2) / 환경설정
환경설정 모든 게임은 입력 로직 렌더링 이 세 개를 계속 반복하는데, 입력단계는 정말 마우스나 키보드의 모든 인풋을 감지하는 거고, 이 인풋을 감지해서 로직을 실행하는 것이다. 인풋에 따라 연산된 아니면 게임AI의 로직들을 다 실행한다음에 최종적으로 연산된 게임세상을 렌더링을 통해서 이쁘게 그려주는 것임. 모든 게임은 이 세 가지 단위로 이루어진다. 온라인 게임은 그냥 게임 로직을 연산하는 부분이 서버에서 이루어진다의 차이가 있다. 로컬과 온라인의 큰 차이가 있진 않음. 네트워크 통신을 통해서 로직의 결과를 주고 받는다. --- 프레임 관리를 알아보자. 60프레임 정도면 OK. 30프레임 이하면 뚝뚝 끊기는 상황이 발생하면서 부드럽지 않게 표현이 될 것이다. 프레임은 단지 위 이미지의 루프가 1초에 몇번..
2021.10.02
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part2: 자료구조와 알고리즘(1) / Big-o 표기법
Big-O 표기법 BIG - O 표기법 1단계 : 대략적인 계산 - 수행되는 연산(산술, 비교 대입 등)의 개수를 '대략적으로'판단 BIG - O 표기법 2단계 : 대장만 남긴다. 규칙1) 영향력이 가장 큰 대표 항목만 남기고 삭제 규칙2) 상수 무시 (ex. 2N => N) O(1 + N + 4 * N^2 + 1) 이런식으로 나와도 N^2임. 근데 이러한 표기 때문에 사실 같은 O(N)이라도 속도가 다를 수 있다는 것도 염두에 두고 있어야 함. O(4 * N^2) => O(N^2) O는 Order Of라고 읽는다. 재귀함수같은 경우엔 좀 복잡할 수 있지만, 대부분의 경우에는 산출하기 쉽다. 빅오 표기법의 의미? => 데이터가 늘어남에 따라 어떤 식으로 연산량이 증가하는 지 알고 싶은 것. N^2은 워낙..
2021.09.29
no image
유니티에서 사용한 수식 모음
1. 슬라이더로 각도 조정하기 사용한 코드 angleRotation = rotationSlider.value * (max - min) + min; rotationSlider.value는 0과 1사이의 float값을 가진다. 나의 상황에서는 물체의 각도를 0~360로 조정할 수 있어야 했다. 예를 들어, 슬라이더의 값을 0.5를 두면 각도를 180도로 만들고 싶다면 0.5 * 360(총 회전가능한 각도)를 하면 된다. 만약, 각도의 범위가 180~360에서 270도를 슬라이더로 구해내고 싶으면 다음과 같이 계산하는 식을 거친다. 180 = min 360 = max 위와 같이 max와 min값을 설정하고 max-min을 통해 총 회전가능한 각도를 구하고, 슬라이더값을 0.5로 둔다. 그러면 90의 값이 나오..
2021.09.25
no image
[Unity] 유니티 디버깅 하는 방법 (Visual Studio)
1. 유니티 스크립트 에디터 설정 1. Edit -> Preference -> External Script Editor로 들어가서 Visual Studio를 스크립트 에디터로 설정. 위 과정을 거치면 유니티와 Visual Stduio의 연결이 됩니다. 위 처럼 Unity에 연결이 뜨면, 유니티와 Visual Studio의 연결이 제대로 된 것입니다. 2. 디버깅 하기 전 설정 1. Visual Studio에서 Break Point를 설정해줍니다. 왼쪽 이미지처럼 초록색 영역 부분을 클릭하면 오른쪽 이미지 처럼 "빨간색 점"이 찍히는 것을 확인할 수 있습니다. 이것을 브레이크 포인트(중단점)이라고 합니다. 보통 문제가 있는 부분이라고 생각되는 라인, 동작 결과가 어떻게 되는지 보고 싶은 라인을 중단점으로 ..
2021.09.04
no image
[Unity 문제해결] AddComponent 후 프리팹 참조할 때 null.
AddComponent 후 인스펙터에 연결해놓은 프리팹을 참조하려 했는데 계속 null이 떴다. 코드와 인스펙터는 다음과 같다. void Start() { findGameObject = GameObject.Find("EntireGeneratorManager"); monsterGenerators = new MonsterGenerator[2]; monsterGenerators[(int)MonsterType.Goblin] = findGameObject.AddComponent(); monsterGenerators[(int)MonsterType.Slime] = findGameObject.AddComponent(); } AddComponent를 사용하여 새로운 컴포넌트를 추가해주었기에 기존에 인스펙터 창에 연결해놓..
2021.08.23