-
[Unity] SOILD 원칙 (1)
SOILD 원칙S: 하나의 클래스엔 하나의 책임(역할)만 부여 O: 기능 확장을 쉽게 하되, 기존 코드를 바꾸지 않아야 함 (Open - Close) L: 자식클래스(상속 받은 클래스)는 부모 클래스를 대체할 수 있어야 함.> 부모클래스가 할 수 있는 행위는 자식도 할 수 있어야 함.만약 자식클래스에서 부모클래스를 수정해야하는 상황이 생긴다면 수정하지 말고, Interface를 사용해보자.interface는 has, 상속은 is 개념 I: 인터페이스를 작은 단위로 나눠라.> 기능 단위로 나누자 D: 추상화가 세부 사항에 의존해서는 안됨. > 반대는 OK> 상위 개념은 하위 개념에 의존해선 안됨. 하위개념이 상위 개념에 의존해야함. 추상클래스(is) VS 인터페이스(has)추상클래스는 기본적으로 클..
-
게임 수학 강의 정리 (9)
반사 코드에서 벡터의 반사를 구할 때 Vector.Reflect(a,b)를 사용한다. 반사된 벡터를 구하는 공식은 아래와 같습니다. 평면으로의 사영 레이싱 게임을 하면 차가 벽에 비스듬하게 부딪혔을 때 튕겨나가지 않고 붙은 채로 나아가는 모습을 볼 수 있다. 이것이 어떻게 구현되는지 아래와 같다. 입사각과 법선벡터를 통해 튕겨나가는 방향이 결정되고, 공식도 확인할 수 있었다.
-
게임 수학 강의 정리 (8)
외적( cross product , Vector product ) 외적은 두 벡터 간의 연산이며, 새로운 벡터를 배출하고, 3차원 공간에서만 성립한다.외적의 결과물 벡터는 연산에 사용한 두 벡터와 모두 수직인 벡터이다. * 법선벡터(Normal Vector): 한 평면(선)에 수직인 벡터외적은 순서가 중요하다. 두 벡터의 외적은 각 좌표마다 연산하는데,C의 x좌표 = (ay*bz) - (az*by)이런식으로 교차하여 곱한다.(아래 사진 참조)외적은 순서가 중요하다. 외적의 크기는 두 벡터가 그리는 평행사변형의 너비와 같다.> 두 벡터가 이루는 각도가 0이거나 180이라면 평행사변형의 너비도 0이고, 외적도 0이 된다.> 90도(직각)에서 외적은 가장 크다. 이에 대한 공식이 있지만 게임 개발에선 자..
-
게임 수학 강의 정리 (7)
벡터의 정규화 = 벡터의 방향을 유지한 채 크기가 1인 단위 벡터로 바꾸는 작업ㄴ 벡터를 크기로 나눈다. > Vector.Normalize(v) 영백터는 벡터의 크기가 없다는 뜻이다.ㄴ 속도가 0인 경우 Vector.zero 내적(Dot Product): 벡터간의 곱 내적을 구할 때 두 벡터의 방향이 다르다면, 단위벡터를 곱하거나 cos연산으로 해당 방향의 성분을 구할 수 있다. 그 결과 아래 공식이 도출 된다. 두 벡터의 내적은 각 벡터의 크기와 cos각도의 곱이다. 위 공식의 변형으로 각도(세타)를 구할 수 있다. 게임에서 적용 예시- 플레이어의 위치 좌표, 바라보는 방향, 적의 위치, 시야각을 알 때 플레이어의 시야에 적이 들어와 있는지 알 수 있는가?> 마지막 공식인 각도(세타)를 구하여 계..
-
게임 수학 강의 정리 (6)
벡터의 크기를 구할 때에도 점과 점 사이의 거리 공식을 적용할 수 있다. Unity 는 왼손 좌표계를 사용한다.왼손으로 좌표계를 만들고, 엄지부터 x y z 순이다. blender같은 툴은 오른손 좌표계를 사용해서 이를 그대로 사용하면 혼동이 있을 수 있다.> 좌표의 축 순서를 바꾸거나 부호를 바꾸며 해결하는건 오류를 발생시킬 확률이 높다. 벡터의 합은 각 성분의 합으로 계산한다. 벡터에 스칼라를 곱한다는 것은 각 성분에 스칼라를 곱한다는 뜻이다.ㄴ 속도 등 계산에 사용
-
[Unity] Raycast 오류 해결
1. ray는 콜라이더를 감지하기 때문에 대상 오브젝트는 반드시 콜라이더 컴포넌트를 갖고있어야 합니다.2. 코드에서 Physics.Raycast 로 호출하는 매개변수 경우의 수가 16가지나 되기 때문에 올바르게 사용하고 있는지 확인해본다.주로 사용하는 매개변수 5가지는 아래와 같습니다. 1)시작위치와 방향을 갖는 rayㄴ Ray ray = new Ray(origin, dir);Physics.Raycast(ray) 2) RaycastHit 를 매개변수로 받고 Ray에 대한 정보를 RaycastHit에 반환하는 Rayㄴ Physics.Raycast(ray, out rayhit)3) Ray의 길이를 설정하는 distance 변수ㄴ Physics.Raycast(ray, out rayhit, distance)..
-
[Unity] 캐릭터 추적 시 떨림 현상 해결
캐릭터 움직임을 FixedUpdate에 RigidBody로 구현하고, 카메라는 움직임은 update나 LateUpdate에 구현한 경우입니다. FixedUpdate와 Update의 호출주기가 다르기 때문에 발생합니다. FixedUpdate는 설정된 시간 주기(Fixed Timestep)마다 호출되고, Update는 가변적인 호출주기를 갖기 때문이죠. 해결 방법은 Update 또는 LateUpdate에 작성한 코드를 FixedUpdate로 옮기면 해결! 만약 코드가 아닌 시네머신에 물린 카메라에서 이 문제가 발생한다면 시네머신 브레인 컴포넌트 > Update Method 와 Blend Update Method를 Fixed Update로 바꾸면 됩니다.
-
[Unity] Batching 2
유니티 성능 최적화 기초 내용입니다. - 배치(batches): CPU가 (Drawcall + Command Buffer)를 포장해서 GPU에 넘기는 것이자 한 프레임동안 유니티가 처리하는배치의 횟수- 배칭(batching): 한 프레임에 같은 종류의 오브젝트를 한 번만 호출하여 배치를 줄이는 기법 배치에 해당하는 것은 아래와 같습니다.- 스프라이트- 매쉬/머티리- 라인- 트레일- 파티클 머티리얼이나 스프라이트를 Atlas로 묶어서 관리하면 한 번의 호출로 묶음을 가져와 배치를 절약할 수 있다. 동적 배칭 (다이나믹 배칭): 같은 머티리얼를 공유하는 오브젝트들의 버텍스를 모아서 한 번에 처리하는 기능. 다이나믹 배칭 켜는법- Preference > Core Render Pipeline > Addition..