자가라 노트

분류 전체보기 24

[C#] 부동소수점 ( + int의 float 변환)

실수형 변수에는 decimal, float(single), double이 있고 그 안에서 '고정 소수점 방식'과 '부동 소수점 방식'으로 나뉩니다. decimal이 해당하는 방식으로 32bit(4byte) 중 [부호-1bit] [정수부-15bit] [소수부-16bit]로 이루어져 있고 이 방법이 일반적으로 생각하는 정수,소수 직접 다 저장하는 방식입니다. 따라서 표현가능한 범위가 크지 않습니다. float(single), double이 해당하는 방식으로 부동(不動)이 아니라 부동(浮動) : '부유해서 동동 떠다니는 소수점'이란 뜻입니다. 이 안에서 또 분류하면 단정도 float (4byte), 그 2배..

C# 2021.11.24

[게임수학] 내적

내적이 뭘까! 수학은 그림을 그려서 설명해야되서 그림그리기가 너무 귀찮다. 원점을 기준으로 한 두 벡터를 통해 삼각형의 넓이를 구할 수 있다. 원점O와 두 벡터 A(10, 5), B(3, 7)이 있다. 각∠AOB는 모른다. 이때 OAB의 넓이는 어떻게 구할까? 1. 각각의 벡터를 통해 원점에서의 길이 a, b를 구한다. 2. 내적의 공식은 OA·OB로 (A.x * B.x) + (A.y * B.y)이며 3. |a||b|cosθ와 같다. 4. 내적과 길이 a, b를 통해 cosθ를 구할 수 있고 5. 삼각함수 sin²θ + cos²θ = 1을 통해 sinθ의 값을 구할 수 있다. 6. sinθ를 이용해 A에서 B로 내리는 수직의 길이를 구할 수 있다.

게임수학 2021.10.25

[알고리즘] 소수 구하기

백준 1929번에서 파생되었습니다. 소수구하기 문제였습니다. 소수를 구하는 알고리즘에서는 요구하는 조건이 특정수의 소수판별 범위 소수 개수 판별 크게 이 2가지로 나뉜다고 볼 수 있습니다. 어떤수 n이 주어졌을때 소수를 판별하는 방법으로 흔히 n의 제곱근까지 비교하여 약수의 개수를 세는 방법입니다. 기준 1) 소수는 약수를 1과 자기자신 밖에 가지지않기 때문에 항상 약수의 개수가 2개입니다. 1의 경우 : 1은 약수로 1밖에 가지지 않습니다. 약수의 개수가 1개이기 때문에 소수가 아닙니다. 편의상 약수가 1개라 소수가 아니라는거지, 정말 1이 소수인 이유가 약수가 1개라서는 아닙니다. 3의 경우 : 3은 약수로 1, 3을 가집니다. 약수의 개수가 2개이기 때문에 소수입니다. 8의 경우 : 8은 약수로 1..

알고리즘 2021.10.25

[C#] GC 가비지 컬렉션

Garbage Collection 통칭 GC는 메모리 관리기법의 하나. CLR에서 GC는 자동메모리 관리자 역할로 어플리케이션의 메모리 할당 및 해제를 관리합니다. CLR : MS .NET의 가상머신 구성요소로 IL 실행을 담당합니다. 1) 현재 수행중인 스레드를 모두 중단하고 GC스레드를 활성화합니다. 2) 사용중인 객체 참조그래프 : 루트를 생성합니다. 루트 참조 각 스레드가 수행중인 메서드 로컬변수 CPU 레지스터 변수가 가지고있는 참조 사용중인 각 타입(클래스)의 정적필드 전역변수 3) 힙 메모리의 모든데이터는 처음에 쓰레기로 간주합니다. 4) GC는 루트를 참조하여 관계있는 데이터를 쓰레기에서 제외합니다. 5) 쓰레기 데이터를 삭제하고 현재 사용중인 객체의 위치를 재조정(메모리 컴팩션)합니다. ..

C# 2021.10.17

[Unity] 컴파일 방식 2) IL2CPP

IL2CPP는 Unity에서 개발한 (스크립팅 백엔드)AOT 컴파일러로, Unity가 스크립트와 어셈블리의 IL코드를 C++ 코드로 변환시켜 선택한 플랫폼에 적합한 네이트브 바이너리 파일로 만듭니다. IL2CPP는 Unity 프로젝트의 성능, 보안 및 플랫폼 호환성을 개선하는 등의 용도로 사용됩니다. 보안관련하여 IL2CPP로 빌드하게 되면 코드가 난독화되어 디컴파일시 코드가 바로 노출되지 않습니다. (최소한의 보안) - 유니티 매뉴얼 Mono의 문제점 C# runtime performance가 C/C++에 비해 여전히 느리다. 최신 버전의 .NET언어를 Mono에서 지원하기 힘들다. 다양한 플랫폼 아키텍처에 맞추기위한 포팅, 유지보수등의 작업에 너무 많은 노력이 든다. 실행 중 GC가 멈출 수도 있다...

Unity 2021.10.10

[디자인패턴] 상태 패턴 : FSM 유한 상태 기계

상태 패턴(state pattern)은 객체 지향 방식으로 상태 기계를 구현하는 행위 소프트웨어 디자인 패턴이다. 상태 패턴을 이용하면 상태 패턴 인터페이스의 파생 클래스로서 각각의 상태를 구현함으로써, 또 패턴의 슈퍼클래스에 의해 정의되는 메소드를 호출하여 상태 변화를 구현함으로써 상태 기계를 구현한다. 상태패턴 - 위키백과 상태 : 가질 수 있는 상태가 한정되며 한 번에 한가지 상태만 유지합니다. 입력 : 입력이나 이벤트가 기계에 전달됩니다. 전이 : 각 상태에는 입력에 따라 다음상태로 바뀌는 전이가 있습니다. 대부분 열거형을 통해 상태를 구분하고 그 중 하나를 현재의 상태로 저장합니다. 저장된 상태에 해당하는 행동을 하거나, 데이터를 유지합니다. Ex) 전구의 ON / OFF 일반적으로 상태패턴을 ..

디자인 패턴 2021.10.05

[C#][자료구조] Tuple 튜플

MS Docs - https://docs.microsoft.com/ko-kr/dotnet/api/system.tuple?view=net-5.0 Tuple : (1개 이상의 구성요소를 가질 수 있는 자료구조) Tuple ~ Tuple 까지 7개의 오버로드와 Tuple의 8번째 오버로드로 구성되어 있습니다. using System을 사용합니다. 8번째 오버로드 : Tuple ▶ T1 ~ T7까지는 일반적인 사용법과 같고 8번째 요소에는 반드시 Tuple이 들어가야 합니다. 이를 이용해 Tuple을 재귀적으로 물릴 수 있습니다. ▶ Tuple 이런식으로 늘립니다. ▶ 생성자에는 매개변수가 필수입니다. Tuple t2 = new Tuple(8, 9); // 매개변수를 넣어서 생성해줘야 한다. Tuple t8 =..

C#/자료구조 2021.09.16

[Unity][기초] 'Transform어쩌고' 좌표변환

Transform의 멤버함수 중에는 TransformDirection / TransformPoint / TransformVector 시리즈가 있다. 어느날 우연히 봤는데 궁금해서 정리했다. 1. public Vector3 TransformDirection(Vector3 direction); 로컬공간에서 월드공간으로 /direction/을 변환합니다. 이 연산은 transform의 스케일이나 위치에 영향 받지 않습니다. 반환된 벡터는 /direction/처럼 같은 길이를 갖습니다. Transform center; Transform target; center.TransformDirection(target.position); // Rotation없이 사용하게 되면 target의 좌표가 그대로 나온다. // 만..

Unity/기초 2021.08.26

[Unity][기초] Transform 이동

Transform을 이용한 이동에는 간단하게 3가지가 있다. Transform.position / Transform.localPosition / Transform.Translate 1. Transform.position 가장 기본이 되는 방식으로 오브젝트의 위치를 직접 변경해주는 방식. 절대좌표는 월드좌표를 따른다. // 원하는 위치를 직접 대입하거나 Transform.position = new Vector3(1.0f, 2.0f, 3.0f); // 현재위치를 기준으로 이동을 원하는 만큼 추가해주거나 Transform.position += Vector3.up; 2. Transform.localPosition 1번 방식과 대부분 유사하다. 절대좌표는 부모의 (rotation이 기울어져 있다면 기울어진) 좌표..

Unity/기초 2021.08.25

[Unity] Attribute 애트리뷰트

Attribute(속성) 는 class 의 위에 표시 되어, 스크립트 프로퍼티나 함수에 특별한 동작을 나타냅니다. 유니티 - Attribute(속성) 문서 1. 인스펙터 노출 관련 Attribute [SerializeField] 데이터를 직렬화 해주는 기능으로 변수 위 혹은 왼쪽에 선언됩니다. private, protected로 선언된 변수들을 public 변수와 같이 inspector에서 수정가능하게 해줍니다. public과의 차이점 - 사실상 private, protected 선언이기 때문에 다른 클래스에서 접근할 수는 없습니다. public class SomeClass : MonoBehaviour { [SerializeField] private int intValue = 2; [SerializeFi..

Unity 2021.08.13