자가라 노트

전체 글 24

[C#][Unity] is as 캐스팅 연산자

is, as는 C#의 캐스팅 연산자로 객체를 캐스팅 할때 사용. 기본적으로 상속관계의 클래스간 하향캐스팅을 할 때 사용된다. 하향캐스팅은 명시적으로 이루어져야 하는데 실행시점에 실패 할 가능성이 있다. is, as 연산자를 사용하면 런타임을 거치지않고도 성공유무를 확인 할 수있다. 캐스팅후 캐스팅 결과에 따라 bool값을 리턴한다. (캐스팅이 가능하다면 true / 캐스팅이 불가능하면 false를 반환한다.) 값타입, 참조타입 모두 사용가능 class child{ ... } void Test() { int i = 0; if (i is child) { } } 캐스팅이 가능하다면 캐스팅 결과를 반환하고 / 캐스팅이 불가능하면 null을 반환한다. 참조 타입끼리만 사용 가능하다. public class par..

C# 2021.08.12

[C#][Unity] Extention (확장 메서드)

(확장 메서드) 확장 메서드를 사용하면 기존 형식에 메서드를 "추가"할 수 있다. 주로 readonly나 상속 불가능한 클래스에 필요한 기능을 추가할 때 사용한다. 확장 메서드와 일반 메서드를 호출하는 데는 명백한 차이가 없다고 한다. 확장 메서드는 정적 메서드이지만 확장 형식의 인스턴스 메서드인 것처럼 호출된다. 놀랍게도 가장 일반적인 확장 메서드는 (쿼리 기능을 기존 System.Collections.IEnumerable 및 System.Collections.Generic.IEnumerable 형식에 추가하는) LINQ 표준 쿼리 연산자라고 한다! 참고 : MSDC - 확장명 메서드 static 클래스를 만든 후 확장메서드로 사용할 static 메서드를 만든다. 확장하려는 클래스를 매개변수의 첫번째로..

C# 2021.08.01

[게임수학]삼각함수

게임을 만들다 보면 이런저런 이유로 삼각함수가 필요할때가 생긴다. 각도가 필요하든.. 벡터가 필요하든.. 1) 삼각함수 Sin, Cos, Tan 기본정의 $$sinθ =\frac{c}{a}$$ $$cosθ =\frac{b}{a}$$ $$tanθ =\frac{c}{b}$$ 2) 라디안r 반지름이 r인 원에서 길이가 r인 호의 중심각의 크기를 1라디안이라고 하며 반지름의 길이와 상관없이 (180/π)º로 일정하다. $$1라디안 = \frac{180º}{π}$$ $$1º = \frac{π}{180}라디안$$ $$π라디안 = 180º$$ 1라디안은 약 57도이며 유니티에서 Mathf.Rad2Deg로 정확한 값을 사용할 수 있다. 3) 삼각함수의 역수와 역함수 삼각함수에는 sin, cos, tan와 그의 역수, ..

게임수학 2021.07.24

[Unity]Rendering 렌더링

렌더링 과정 GPU가 메시를 렌더링 하려면 GPU메모리에서 테이터를 읽어올 수 있어야 한다. 로딩시점에 데이터를 메모리에 올려놓고 씬전환 시점등에서 데이터를 해제. 게임중에는 데이터가 상시 메모리에 상주해야 한다. 텍스쳐 쉐이더등 렌더링에 필요한 데이터 모두 GPU 메모리에 존재해야한다. 렌더링 수행전 데이터 로딩 (메시정보를 GPU 메모리에 저장) CPU가 스토리지(HDD, SDD, SD등)에서 파일을 읽어들이고 데이터를 파싱 CPU 메모리에 데이터를 올린다. CPU메모리의 데이터를 GPU메모리로 복사 렌더링 렌더링 루프중 렌더링을 해야하는 시점이 오면 데이터(GPU에 텍스쳐, 버텍스, 쉐이더등)를 순서대로 전달해 줘야하는데 GPU에는 해당 정보들을 담는 테이블, Render State(렌더상태)를 가..

Unity 2021.06.30

[Unity][최적화] Batching, Draw Call, SetPass calls

Batching(배칭) 동일한 메테리얼을 공유하는 복수의 드로우콜을 하나로 묶어서 드로우콜하는 기법 Batching = Draw Call + SetPass calls ▶Draw Call(드로우콜) CPU가 GPU에게 화면에 오브젝트를 그려달라고 요청하는 것 한프레임에서 오브젝트를 하나 그릴때 여러 정보들이 CPU에서 GPU로 전달 DATA > Storage(HDD,SDD,SD) > CPU Memory > GPU Memory 매 프레임 화면에 그려야 하기 때문에 값이 클수록 프레임에 부하가 걸린다. 적정개수 PC : 1000개 이상 가능 ~ 3000개 모바일 : 100개도 많다. 최신 디바이스는 200개까지가능 일반적으로 오브젝트 단위로 1개씩 증가, 쉐이더에 따라서 추가적으로 증가 ▶SetPass cal..

Unity 2021.06.30

[git] 기본용어

나를 위한 기본용어 Repository : 작업저장소 Remote : 원격저장소 Local : 로컬저장소 Origin : 기본 업스트림 저장소 ≒ Remote, 원격 저장소 원본 Master : 로컬 메인 Branch : 메인 파생 레이어? Branch ⊇ Master Checkout : 현재 작업을 작업트리의 특정 구간으로 변경 Merge : branch간 합치는 작업 HEAD : 현재 작업중인 Branch의 최근 갱신 내용을 가리키는 포인터. Fetch : 원격 HEAD를 참조해 로컬에 없는 객체를 생성 Commit : 변경내역을 저장하는 작업 및 그 내용 단위 명령어 git Init git clone git fetch git add git commit git push git pull git stas..

GIT 2021.06.18

[git]add, commit, push

1. git add 이 왼쪽에 쌓이는 HEAD와의 변경점들을 말하는 것같다. commit전에는 add를 아무리 많이해도 git 저장소에는 영향을 주지않는다. $git reset HEAD // file 내의 변경점을 되돌리는 듯? 파일변경 -> unstaged상태 -> add -> staged상태 -> commit 혹은 취소하여 다시 unstaged상태 내가 git을 유니티로 밖에 안써봐서 add를 써본적이 없어 잘모르겠지만 왜 파일이 변경된파일이면서 unstaged상태? 변경되었지만 저장소에 저장될 정도는 아닌 파일이란 뜻일까.. 2. commit commit 취소 $git reset --soft (HEAD^ 혹은 commit id)// git add 상태로 $git reset (--mixed) (HEA..

GIT 2021.06.18

[git]이전 커밋으로 돌아가야 할때2 (git branch checkout)

사실 이게 처음에 했던 이상한 방법이다. 1. 1편과 같이 log/reflog를 사용해 commit id를 찾았다. 2. 해당 키로 checkout를 했다. $git checkout 그냥 잘 몰랐고 branch 넣는곳에 commit id를 넣었다. 그랬더니 잘 열였다? 3. 그런데 branch 이름이 이상했다. checkout에다가 넣고 열었더니 branch화되어서 열린 것 같았다. (내 생각) 열리긴 열였지만 제대로된 branch도 아닌거같고.. 4. Detached HEAD로 찾아봤다. HEAD -> branch -> 특정commit 순서로 가리키는 상태가 'attached HEAD'였다. HEAD에서 바로 특정 commit을 가리킬때를 'Detached HEAD'라고 한다. 그리고 역시 branch..

GIT 2021.06.18