no image
[Unity Editor Scripting] Editor관련 함수 정리
EditorWindowScriptableObject를 상속받아 구현된 클래스이며 UnityEditor의 네임스페이스에 속한다. 이 클래스를 사용하여 유니티 에디터의 기본 창과 유사하게 독립적으로 띄울 수있거나 탭에 부착 가능한 Editor window를 만들 수 있다.  다음 다이어그램은 에디터 윈도우의 실행 순서이다.OnEnable: 스크립트가 로드되거나 오브젝트가 활성화될 때 호출된다.EditorApplication.isUpdating: true라면, 에디터는 현재 AssetDatabase를 새로고침 중이다.CreateGUI: 에디터가 업데이트 중이 아니라면 GUI를 생성한다.Update: 프레임당 한 번 호되어 스크립트의 로직을 업데이트 한다.OnGUI: GUI 이벤트를 렌더링하고 핸들링하기 위해 ..
2024.10.25
[Unity] TransformDirection()
TransformDirection()Transform.TransformDirection은 local space의 `direction`을 world space의 direction으로 변환한다. 해당 연산은 scale이나 position에 영향을 받지는 않는다. 반환된 벡터의 길이는 `direction`과 같다.  그러나 해당 공식 문서의 설명만으로는 헷갈리는 감이 있어, 아래에 첨부한 참고자료를 살펴보고, 직접 사용해보며 내린 결론을 정리해서 다음과 같이 부연 설명을 덧붙인다. `TransformDirection()`함수를 사용할 때는 인자로 넘겨준 direction을 로컬 좌표계로 취급하는데, 이는 TransformDirection()을 호출한 gameobject의 로컬 좌표계를 기준으로 잡는다.Vect..
2024.10.09
no image
[C#] 제너릭 메소드
제너릭 메소드제너릭 메소드는 이처럼 형식 매개 변수를 사용하여 선언된 메소드이다.static void Swap(T lhs, ref T rhs){ T temp; temp = lhs; lhs = rhs; rhs = temp;}위처럼 선언을 하지않고, 메소드 이름 옆에 를 제거하면 오류가 발생하는 것을 볼 수 있다. 사실 가 없어도 바로 쓸 수 있을 것이라 생각하였는데, 그렇지 않았다. 형식 인수 `int`를 사용하여 제너릭 메소드를 사용하는 법static void Swap(ref T lhs, ref T rhs){ T temp; temp = lhs; lhs = rhs; rhs = temp;}static void Main(string[] args){ int a =..
2024.10.06
C#
[C#] CS0273에러 accessor must be more restrictive than the property or indexer
CS0273internal class Player{ public int PosX { get; private set; } public int PosY { get; private set; } private Board Board { get; private set; }}이 코드들 중 다음 부분에서 문제가 발생한다.private Board Board { get; private set; }  이것을 에러가 발생하지 않도록 바꾸려면 다음과 같이 만든다:private Board Board { get; set; }setter는 전체 프로퍼티의 접근성(accessibility)이므로 이미 private이다.  기본적으로 프로퍼티의 `get;` 또는 `set;`의 접근 제한자를 지정하려면 다른 경우보다 더 ..
2024.09.25
C#
no image
[수학] Manhattan distance (맨해튼 거리)
Manhattan distance 맨해튼 거리는 그냥 몇 칸을 이동했는지를 의미한다(선분 길의의 합). 유클리디안 거리는 시작점과 끝점이 주어지면 피타고라스 정리를 사용하여 구하게 된다. 맨하탄 거리는 몇 칸을 이동했는지를 보는 것이기에  x와 y각각 몇 칸 이동하였는지 계산하여 총합을 보며 다음의 식과 같다:$$d_1(\mathbf{p}, \mathbf{q}) = \|\mathbf{p} - \mathbf{q}\|_1 = \sum_{i=1}^{n} |p_i - q_i|$$맨해튼 거리: $d_1$벡터: $p, q$$\mathbf{p} = (p_1, p_2, \dots, p_n)$과 $ \mathbf{q} = (q_1, q_2, \dots, q_n)$ 머신러닝에서는 similarity 계산을 위해 사용했었는..
2024.09.21
no image
Blender에서 Unity로 모델 임포트
올바른 세팅값으로 모델 Import하기 블렌더로 육각형을 만들어서 유니티에 import했는데, Rotation값과 Scale값이 생각한 것과 달랐다. Edit → Export → .fbx → 표시된 창에서 Apply Transform적용 다시 유니티로 불러오면 Rotation, Scale값이 동일하게 잘 불러와진다. 참고자료https://lektion-von-erfolglosigkeit.tistory.com/235https://timeboxstory.tistory.com/148
2024.09.10
[유니티 미세 팁] 연산 순서
연산 순서transform.Translate(Vector3.forward * Time.deltaTime * _speed);유니티에서 코드를 작성하다보면, 위의 코드처럼 이동을 작성할 때가 있다. 그러나 이 방식은, 요소값을 3개 가진 Vector3에 대해 deltatTime곱셈을 시도하고, 추가적으로 Speed 상수를 또 연산해놓은 3개의 값에 곱셈을 하기에 총 6번의 연산이 이루어진다. 그러나 deltaTime과 speed를 먼저 계산한다면, 총 4번의 연산 횟수만에 값이 구해진다. 사실 큰 최적화는 아니지만, Rider 사용 시 에러가 신경쓰여 알아보았다.  참고자료https://stackoverflow.com/questions/57933831/unity-rider-order-of-multiplica..
2024.09.04
no image
[Unity, Git] Git으로 유니티 프로젝트를 관리하는 방법
대용량 파일이 있는 유니티 프로젝트를 어떻게 버전 컨트롤로 관리하나https://www.reddit.com/r/Unity3D/comments/19a6o8i/how_to_version_control_large_projects_with_big/ 해당 글에 따르면, Git LFS 사용 또는 PlasticSCM 사용을 권장하는 사람이 많이 보인다. Git을 사용한다면 게임 리포지토리는 정말 커질 수 있기에 꼭 필요한 것만 저장소에 보관하는 것이 좋다고 한다. 예를 들어 에셋 팩에서 에셋을 가져올 때는 프로젝트에 실제로 필요한 것만 가져와야 한다. LFS를 사용할 예정이라면, 모든 바이너리 파일 형식(이미지, 모델, 바이너리, 오디오 등)을 캡처할 수 있도록 LFS 속성을 제대로 설정하는 것이 중요하다.  그럼 ..
2024.08.29
no image
[수학] 삼각함수(3) 변의 명칭과 삼각비
변의 명칭삼각비 계산을 헷갈리지 않도록 하려면 변의 정의가 중요하다. 영어 명칭이 이해하기 편하여 같이 작성하였다.빗변(hypotenuse)은 직각의 대변에 위치한다.이웃변(adjacent)은 각 $\theta$와 인접하여 이웃변이라 하며, 밑변이라고도 한다.대변(opposite)은 각 $\theta$와 마주보고 있어 대변이라 하며, 높이라고도 한다.평균적으로 이웃변과 대변은 밑변과 높이로 불려서 많이 사용된다.    삼각비(Trigonometric Ratio)삼각비란 직각삼각형의 성질을 이용한 내용이다. 직각삼각형에서 직각을 제외한 각인 $\theta$에 대해 직각삼각형의 세 변의 길이가 이루는 비율이 일정함을 발견하였다. 그래서 각 $\theta$가 유지만 된다면, 삼각형의 크기(변의 길이)가 달라지..
2024.08.26
no image
[수학] 삼각함수(2) 호도법
육십분법(六十分法)육십분법이란 최대 중심각(원의 한바퀴)을 360$^\circ$으로 표현한 것을 의미한다. 즉, 원의 최대 중심각을 360등분한 것이다. 나는 여기서 360분법이라는 명칭이 더 직관적이라 생각했지만, 여기서 1도를 또 60등분하여 60$^\prime$ (육십분)으로 표기한 것이 유래가 되어 육십분법이라 명칭이 불리게 되었다.왜 중심각을 360등분 하였는지에 대한 이유는 해당 유튜브 영상에서 잘 설명해주었지만, 요약하자면 옛날 달력은 원이었고 1년이 360일이라 생각해서 그렇다고 한다. 호도법( 弧度法)호도법은 각의 크기를 나타내는 여러 방법 중 하나이다. 육십분법에 비해 호도법은 삼각함수의 미분에서 편리하며, 원의 넓이와 호의 길이를 구하는 방식이 편하여 사용하게 되었다. 큰 이유는 미분..
2024.08.22
no image
[수학] 삼각함수(1) 원의 개념
원기하학에서 원(circle)은 평면 위의 한 점(원의 중심)에 이르는 거리가 일정한 평면 위의 점들의 집합인 도형이다. 원의 중심에서 원 위의 점까지 잇는 선분의 이름을 반지름이라고 하며 이 반지름은 모두 동일한 값을 가진다. 이러한 원에는 다양한 성질들이 존재하는데, 정리하자면 다음과 같다.중심 (Center)반지름 (Radius)지름 (Diameter)둘레, 원주 (Circumference)면적 (Area)호(Arc)와 현(Chord)(1)중심, (2)반지름원의 중심은 원이 모든 점이 동일한 거리에 있는 점이여 이는 원의 대칭성과 관련되어 중요한 역할을 한다. 이 점을 기준으로 원의 반지름과 지름이 결정이 된다. 반지름은 원의 중심에서 원 위의 임의의 점까지의 거리를 의미한다. 반지름 길이가 클수록..
2024.08.20
[Unity, Git] .log 파일에 대한 gitignore
.log 파일은 gitignore에 등록하여도 되는가?github의 gitignore를 참조하면 일반적으론 .log 파일은 등록하는 것 같다. 그러나 해당 글의 kurt-Dekker 분의 답변에 따르면 .log 파일은 버전 컨트롤에 등록하지 않는다고 한다. 로그에 흥미로운 데이터가 있을 수 있지만, 본인은 실제로 포렌식 버그 추적에 도움이 되었던 적은 거 없었던 것 같다.  .log 파일 제외하기프로젝트 처음 시작 시 gitignore를 적용한다면, 바로 .log 파일을 제외하도록 만들면 되지만, git은 과거에 추적된 파일은 무시하지 않기 때문에 gitignore에 .log가 처음부터 적용되어 있지 않았다면 해당 방법을 사용하여 git의 캐쉬를 정리한 뒤 다시 gitignore를 적용하면 된다.  참고..
2024.08.18