Unity 6

Big-O 표기법(Big-O Notation)

알고리즘의 효율을 측정하려면 Big-O 표기법을 사용한다.Big-O 표기법이 중요한 이유는 어떤 알고리즘이 작은 입력에서는 빠를 수 있지만 입력값이 많아진다면 느려질 경우가 발생하게 된다.시간 복잡도(Time Complexity)시간 복잡도란? 입력 크기에 따라 알고리즘이 얼마나 많은 연산을 수행하는지 나타내는 것이다.위 그래프는 오른쪽 아래로 갈 수록 효율적인 알고리즘, 왼쪽 위로 갈 경우 비효율적인 알고리즘을 나타낸다. Big - O 표기법은 가장 빠르게 증가하는 항만을 남기고 나머지는 무시해서 표현한다.이렇게 표기하는 이유는 함수가 정확히 몇 개의 연산량이 중요한 것이 아닌 데이터가 늘어남에 따라서 어떤 식으로 연산량이 증가하는지가 중요하기 때문이다. 예시: T(N) = 2N^2 + 3N + 5 =..

Algorithm 2025.03.31

Spinlock

Spinlock이란? SpinLock은 한 스레드가 락을 얻기 위해 반복해서 계속 확인(루프) 하는 방식의 락이다. Spinlock을 활용하면 멀티 스레드를 사용할 때 다른 스레드의 접근 제한을 막을 수 있다.아래는 While문을 활용한 스핀락 예시 코드다.using System;using System.Threading.Tasks;// While 문을 활용한 스핀락 예시namespace Server{ class SpinLock { volatile static bool _locked = false; public void Acquire() { while (_locked) { } _l..

Game Server 2025.03.30

Deadlock(교착 상태)

멀티 스레드멀티스레드 환경에서 값을 단순히 변수에 할당하는 것은 별로 큰 문제가 되지 않는다. 하지만, 할당된 값을 동시다발적으로 다른 스레드들과 같이 값을 쓰기 시작하면 문제가 된다.그래서 싱글 스레드처럼 쓰도록 바꿔줘야 한다. using System.Threading; 해당 네임스페이스를 추가하면 Monitor 클래스에 접근할 수 있다. Monitor 클래스는 멀티스레드 환경에서 리소스에 대한 접근을 제어하는 기능을 제공한다. 주로 여러 스레드가 동시에 공유 자원에 접근할 때 경쟁 조건(Race Condition)과 데이터 불일치 문제를 방지하기 위해 사용한다.// Monitor 클래스를 활용한 예시class ServerCore{ static int number; static object ..

Game Server 2025.03.29

유니티 애니메이션 리깅(Animation Rigging)

애니메이션 리깅(animation rigging)캐릭터 애니메이션의 뼈대(스켈레톤)를 설정하고 조작하는 과정이다. 이를 통해 캐릭터의 움직임을 자연스럽고 유기적으로 만들 수 있다.먼저 패키지 매니저에 있는 Animation Rigging을 Install 해준다. Animation Rigging을 설치하면 애니메이션과 관련된 여러가지 컴포넌트들을 사용할 수 있다.정상적으로 설치되었다면 왼쪽 상단 탭에 Animation Rigging이라는 항목이 추가로 생길 것 이다.  Animation Rigging을 눌러보면 아래의 항목이 나온다. 각각 설명하자면 Align Position - 두 트랜스폼의 위치를 일치시킴, 두 객체의 위치를 정확히 맞추어야 할 때 사용(물체를 잡는 등)Align Rotation -  ..

Game Engine/Unity 2024.07.15

Locomotion System 구현(2) - 기울기에 따른 움직임

움직이는 오브젝트에는 어떠한 콜라이더든지 존재한다. 콜라이더가 없으면 충돌을 처리할 수 없다.하지만 콜라이더 컴포넌트를 추가하면 계단이나 오르막길 같은 구조물에 올라갈 수 없다. 두 개의 콜라이더가 충돌하면서 더이상 물리적인 계산이 적용되지 않기 때문이다. 그래서 콜라이더를 띄운 상태에서 물리적인 힘을 계산하는 것이 좋다.따라서 위의 사진처럼 기울기가 있어도 콜라이더가 충돌을 하지 않기 때문에 자연스럽게 올라갈 수 있다.먼저 대각선의 각도를 얻기 위해서는 수직항력이라는 것을 생각해야 한다.수직항력이란?  표면에서 물체에 수직으로 향해지는 힘이다. 이러한 힘은 중력에 의해 상쇄되면서 각도가 낮은 방향으로 벡터의 방향이 정해진다. 이것을 이용하여 기울기에 따라서 콜라이더를 띄어보자.각도를 구하려면 두 가지의..

Game Engine/Unity 2024.07.04

Locomotion System 구현(1)

먼저 Github Desktop에 프로젝트를 레포지토리와 연동시켜줬다. (6일 전에 미리 했지만 기록용으로 남김)   Camera :  플레이어 오브젝트의 회전과 줌&아웃 기능을 구현Input : 마우스 입력, 키패드 입력 등 모든 입력을 받고 저장하는 부분Data : 레이어, 콜라이더, PlayerSO, 모든 상태에 사용되는 모든 데이터(속도, 시간, 각도 등..)를 저장States : 플레이어 오브젝트의 상태를 변경해주는 부분, 데이터로 저장된 속도,각도 그리고 프레임마다의 애니메이션를 정의해주는 등의 행동 수행StateMachine : 플레이어 오브젝트가 상태에 따라서 직접 수행하는 부분, PlayerStatement 스크립트에서 구현한 인터페이스 메소드를 수행한다.  기본적으로 InputActio..

Game Engine/Unity 2024.06.27