본문 바로가기
학원

16일차-2024-08-21

by 하타라시 2024. 8. 21.

 

오늘은 수학에 관련된 내용을 많이 나가서 슬펐습니다...

이제부터라도 열심히 수학을 공부해야..........

 

우선 <T>를 통해 제네릭 메소드입니다.

추가로 파라미터로 float lifeTime = 2.0f;라는 것을 통하여 값 입력이 없을 시에 2.0이 입력되고,

뒤에 붙은 것은 where 제약조건입니다.

https://usingsystem.tistory.com/90

해당 조건의 경우는 where T : class에 해당합니다.

new()의 경우는 기본 생성자만이 가능합니다.

 

new()에 따르면 기본 생성자가 있어야하는데 저것을 주석처리를 했으므로, 문제가 생기는 모습입니다.

 

 

 

추가로 Item을 상속받지 않은 것을 넣어도 문제가 생깁니다.

 

그 외에 struct , notnull, unmanaged , interface, U가 있다고 블로그에서 보았는데,

저의 생각으로는 어지간한건 조건에 거는 것이 가능하다는 정도로 이해하였습니다.

 

배열이나 리스트같은 경우  처리를 조심하여야합니다.

기본적으로 공간을 차지하고 있는 것이고, 그 크기로 돌린 것이기 때문에 처리가 이상하게 됩니다.

 

하지만 역순으로 진행을 하면 문제 없이 처리 되는 모습입니다.

해당 문제는 예전에 게임만들다가 겪었던 것이 강의 내용중에 나와서 더더욱 반가웠습니다.

 

 

이전에 게임 제작하는 때에 멋도 모르고 GPT와 씨름하면서 해당 목표를 구현한 적이 있었습니다.

그저 A에서 B의 지점으로 곡선을 그리며 공격하는 것일 뿐이였습니다.

하지만 저는 수학적 지식이 부족했기에 짧게는 10 ~ 30시간을 소요하여 겨우겨우 구현하였었습니다.

NavMesh를 써보려다가 실패하고,,  물리를 활용해서 이동시켜보기도 했었지만, 결국 해결한건 수학을 활용했었습니다.

그 때, 만일 해당 지식을 제가 알았더라면 시간을 좀 더 절약했을지도 모릅니다.

짐벌락 현상때문에 어찌나 고생했는지....

 

 

https://sayhello06.tistory.com/14

간단하게 강의해주셨던 내용을 제가 이해했던 바는 이렇습니다. 

A + B => Vector2(1,1) + Vector2(3,3) = Vector2(4,4);입니다.  위치라는 의미가 됩니다.

A - B =>  Vector2(1,1) - Vector2(3,3) = Vector2(-2,-2); B에서 A까지 가기위한 방향이 됩니다.

즉 B지점 Vector2(3,3)에서  Vector2(-2,-2)만큼 가야합니다.

이것을 내적 외적 혹은 수학적으로 하려면 복잡하므로 벡터의 정규화를 거칩니다.

또다른 방향을 구한 a와 b를 정규화(normalized)를 거치면 Vector2 (-2,-2)가 1,1에 해당하는 값이 바뀝니다.

즉 -1,-1일 것입니다. 

큐브 A와 큐브 B와의 거리를 구한 것입니다.

분명 normalize가 있기 때문에 1,1,1로 정규화 되었지만, distance를 통해 2라는 거리만큼 곱해주었습니다.

 

https://m.blog.naver.com/hjleesm/221735513555

이처럼 간단한 곳에서는 문제 없지만 복잡한 것으로 들어갈 때에 문제가 된다고 말씀주셨습니다.

 

 

Vector3.Dot이라는 메소드입니다.  내적을 구하는 메소드인데,

해당 과정을 좀 더 들어가면 복잡해집니다.

 

https://lalyns.tistory.com/entry/%EB%B2%A1%ED%84%B0-%EB%82%B4%EC%A0%81-%EA%B3%B5%EC%8B%9D-%EC%9C%A0%EB%8F%84-a-b-abcos%CE%B8-%EC%9C%A0%EB%8F%84%ED%95%98%EA%B8%B0

내적을 구하는 방법은 벡터 a * 벡터 b라고합니다.

수식을 줄이면  a · b = |a||b|cosθ라고 합니다.

 

 

GPT친구의 도움을 받았습니다.

계산하는 과정이 길다는 것은 확실합니다.

 

만약 1로 정규화를 했다면, 확실히 간단해집니다.

수식을 줄이면 a · b = |a||b|cosθ에서 a와b가 1이므로 cosθ일 뿐입니다.

추후 여유가 있을 때, 자료를 보충할 예정입니다.

 

결과적으로는 Dot은 내적을 구하는데 , lhs와 rhs라는 값을 받습니다.

lhs에는Vector3(0,0,1) / rhs에는 Vector3(0,0,-1)이 입력됩니다.

그러므로 그림판에 그린 것 처럼 반대방향이므로 -1입니다.

 

시도한다면 같은 방향으로 가는지 체크한다던가 활용방안이 무긍무진해 보입니다.

 

 

만약에 저런식으로 그려진다면 0이 됩니다.

 

 

이제 실제로 대입해보면 이런느낌으로 값이 나오는데,

왼손 좌표계 3d를 기준으로 어떠한 방식으로 처리가 되어 저리됬는지는... 오늘이든 내일이든 조사해서 작성 예정입니다.

 

 

외적은 좌,우를 판별하는데에 도움을 줍니다. GPT친구입니다.

솔직히 이해 못했으므로 블로그 글 몇 개라도 남겨봅니다. 얼릉 수학공부 하겠읍니다..

https://ks-factory.tistory.com/294

https://gnaseel.tistory.com/18

 

 

60분법은 이정도로 이해했습니다.

분명 예제를 봤는데 이해가 안가서 GPT친구한테 도움 요청했는데 이런 답변이여서 포기입니다..

얼릉 칸아카데미 진도나가서 이해하는 것이 목표입니다.

https://wikidocs.net/23171#google_vignette

 

호도법은 라디안을 단위로 각도를 나타내는 방식입니다.

180/파이 = 1 rad입니다. 대략 57도입니다.

https://blog.naver.com/junhwen/130123563033

즉 180 * 2/파이는 2라디안입니다.

라디안을 삼각함수에 활용 가능합니다.

 

구면좌표계는 주로 3D 공간에서 사용되는 것이고,

위도,경도,고도와 같은 좌표를 통해 구에서 위치나 방향추적 가능합니다.

https://mvje.tistory.com/210

짐벌락현상과 오일러각입니다.

X : Pitch
Y : Yaw
Z : Roll

 

Z축으로 찌르고서 시계방향으로 회전을 하게되는데, 만약 X나 Y축에 변동이 생기면 짐벌락현상으로 인하여 회전이 꼬이게 됩니다.

https://handhp1.tistory.com/3

 

추가로 오일러각과 연관됩니다.

3차원상의 강체의 방향과 회전을 정의하기위해 만들어진 것입니다.

편하게 회전하면 좋겠지만, 실제로는 짐벌락현상에 의하여 Z축을 회전하게 되면 X와 Y도 같이 변할 것입니다. 

이 때, 유니티에서 Quaternion.Euler를 통해 오일러각에서 쿼터니언으로 바뀌게 됩니다. 

그러면 자연스레 짐벌락현상도 다소 해결 될 것입니다.

https://hub1234.tistory.com/21

 

이전에 지구본을 회전하는 것이였는데, 맨위 혹은 맨 아래에서 회전을 하면 요상하게 회전되었었습니다.

Euler로도 해결을 못했었는데,, 추후 공부하다보면 관련 문제도 알게되리라 생각중입니다.

 

마지막으로 OnDrawGizmos에 관한 것입니다.

이전에 관련내용이 있었을 수도 있는데 혹시나 해보겠습니다.

OnDrawGizmos의 블록안에 코드를 넣습니다.

Gizmos.color는 색깔을 지정해줍니다.

Gizmos.DrawLine은 라인을 그리는 것입니다.

그 외에 GizmosDrawxxxx 이런식으로 종류가 많습니다.

Unity - Scripting API: Gizmos (unity3d.com)

 

이런식으로 Application이 실행중인 경우에만 작동하도록 제약거는 형태도 가능합니다.

Unity - Scripting API: EditorApplication.isPlaying (unity3d.com)

 

아직 배울게 많다고 느끼고 있습니다,,,,,

 

 

감사합니다.

'학원' 카테고리의 다른 글

22일차-2024-08-27  (0) 2024.08.27
17일차-2024-08-22  (0) 2024.08.22
15일차 - 2024-08-20  (0) 2024.08.20
14일차-2024-08-19  (0) 2024.08.19
13일차 - 2024-08-18  (0) 2024.08.16