분류 전체보기 64

1. 벡터 대수 : 점

위치벡터 3차원 그래픽 프로그램에서 공간안에 어떤 위치를 지정할 수 있어야 한다. 그렇기에 한 벡터를 위치를 지정하는데 사용할 수 있는데, 이러한 용도로 쓰이는 벡터를 위치벡터라고 한다. 따라서 위치벡터에서 중요한 것은 방향이나 크기가 아니라 벡터의 머리끝 좌표이다. 점을 벡터로 표현하는 방식을 쓰면, 벡터 연산들을 활용할 수 있다. 또한 벡터처럼 점의 위치도 어떤 특정한 좌표계에 상대적이며, 벡터 대수 자체에 이러한 개념이 딸려있기에 추가적인 작업을 해 줄 필요는 없다.

1. 벡터 대수 : 외적

외적 내적과 다른 벡터 곱셈으로 외적이 있다. 결과가 스칼라인 내적과는 다르게 외적의 결과는 벡터이다. 또한 외적은 오직 3차원 벡터에 대해서만 정의된다. 두 3차원 벡터 u와 v에 외적을 취하면 u와v 모두에게 직교인 벡터 w가 나온다. u=(ux,uy,uz), v=(vx,vy,vz) 라고 할때, u⊗v = (uy·vz - uz·vy, uz·vx - ux·vz, ux·vy-uy·vx) 로 나타낼 수 있다! 외적에서는 교환법칙이 적용되지 않는다. 즉 u⊗v != v⊗u 이다. 또한 u⊗v = -v⊗u이다. 2차원 유사 외적 외적을 이용하면, 2개의 3차원 벡터에 직교인 벡터를 구할 수 있다. 2차원에서는 2차원 유사외적을 통해, 하나의 2차원 벡터 u=(ux,uy)에 수직인 벡터 v=(-uy,ux)를 구..

1. 벡터 대수 : 내적

벡터의 내적 내적은 스칼라 값을 내는 벡터 곱셈의 일종이다. u = (ux,uy,uz), v = (vx,vy,vz) 라고 할때, 내적은 다음과 같다. u·v = ux·vx + uy·vy + uz·vz 이런 정의만 봐서는 내적의 기하학적 의미가 분명하지 않지만, u·v = ||u|| ||v|| cosθ 로 보면 내적이 두 벡터 사이각의 코사인을 벡터 크기들로 비례시키 것임을 알 수 있다. 특히 벡터 u와 v가 단위벡터일 때, u와 v의 내적은 두 벡터 사이각도의 코사인이다. (즉 u·v=cosθ) 따라서 다음과 같은 유용한 기하학적 속성들을 이끌어 낼 수 있다. u·v = 0 이라면, 두 벡터는 직교한다. (cosθ =0이라면 θ= 90도이니깐) u·v > 0 이라면, θ는 90도보다 작다. u·v < 0..

1. 벡터 대수 : 길이와 단위벡터

벡터의 크기 벡터의 크기는 해당 선분의 길이이고, 백터의 크기는 이중 수직선으로 표기한다. (u의 크기는 ||u||로 표기) 2차원 벡터에서, 피타고라스의 정리를 통해 벡터의 크기를 구할 수 있고, 3차원 벡터에서도 피타고라스의 정리를 두번 적용하면 3차원 벡터의 길이를 구할 수 있다. $$||u|| = \sqrt{x^{2}+y^{2}+z^{2}}$$ 벡터의 정규화 벡터는 크기와 방향을 가지는 값이지만, 순수하게 방향을 나타내는 용도로 사용할때, 벡터의 길이가 중요하지 않을 수 있다. 그럴때 벡터의 길이를 단위 길이가 되게해서 단위벡터로 만드는 것을 벡터의 정규화라고 한다. 벡터의 각 성분을 벡터의 크기로 나누면 벡터를 정규화 할 수 있다. $$\frac{u}{||u||}=(\frac{x}{||u||},..

1. 벡터 대수 : 벡터

벡터 벡터란 크기랑 방향을 모두 가진 수량을 가리키는 말이다. 대표적인 예시로 힘, 속도등이 있고, 3차원 게임에서는 플레이어가 보는 방향이나 광선이 이동하는 방향 등 순수하게 방향만 사용해는 경우에도 벡터를 사용한다. 벡터는 그려진 위치는 중요하지 않고, 두 벡터가 오직 길이가 같고 같은 방향을 가리킬 때에만 상등이다. 벡터와 좌표계 컴퓨터는 벡터를 기하학적으로 다루지 못하기 때문에, 벡터를 수치적으로 지정하는 방법이 필요하다. 그렇기에, 3차원 좌표계에 벡터의 꼬리를 원점으로 이동시키면 벡터를 v=(x,y,z)와 같은 좌표로 표기할 수 있다. 이때 같은 벡터라도 기준계가 다르면 좌표 표현이 달라질 수도 있다. 하지만 벡터의 방향과 크기는 변하지 않고, 좌표계에 따라 바뀌는건 벡터를 표현하는 좌표뿐이다..

#5 odyssey 개발일지 : 베지어 곡선으로 곡선 지형 생성

지금까지는 임시로 곡선 지형을 만들었는데 이제는 베지어 곡선으로 지형을 만들려고 한다. 베지어 곡선이란? n개의 조절점과 선형 보간을 통해 얻을 수 있는 곡선으로, n-1차 베지어 곡선이라고 부른다. 3차 베지어 곡선을 그린다고 할때, 각 조절점을 A, B, C라고 가정하면 선분 AB, 선분 BC를 그릴 수 있다. 선분 AB와 BC 사이에서, 0~1사이의 값 t 만큼 비례한 점인 D, E를 찾는다. 선분 DE에서도 위에서 했던 것처럼 t값 만큼 비례한 점인 F를 찾고, t가 0~1까지 변화할때, F가 그리는 궤적이 2차 베지어 곡선이다. 코드로 구현 유니티에서 Vector3.Lerp()라는 함수를 통해 쉽게 구현할 수 있었다! public class BezierGenerator : MonoBehaviou..

odyssey 2023.03.17

#4 odyssey 개발일지 : 상태 패턴으로 리팩토링 하기

지난 4달동안 개발일지를 쓰지 않았다 개발일지를 쓰고 바로 여행+기말과제+기말고사를 치르고 나서 종강을 했고 종강을 하고나서 5일 뒤에 오리키우기를 출시했다 오리키우기를 출시하고 많은 피드백을 받았고.. 방학동안은 오리키우기 개발에 집중했다. 오리키우기 다음은 뭘만들지 고민이 많았는데 그냥 odyssey 개발하던거 이어서 개발하기로 마음먹었다 어차피 마땅한 아이디어도 없었고 오리키우기와 장르가 다른만큼 배우는게 있을 것 같아서이다. 그래서 이번 1학기에는 odyssey 개발 완료하는것이 목표이다. 그래서 이번에는 기존의 PlayerController 스크립트에 상태 패턴을 적용해보았다. 상태 패턴이란? 디자인 패턴 중 하나로, 상태를 체크해서 특정 행위를 하는 것이 아니라, 상태 자체를 객체화 하는 것이..

odyssey 2023.03.13

유니티 애드몹 보상형광고 크러시

오리키우기 내부 테스트 중에... 보상형 광고를 보고 close를 하면 앱이 강제종료가 되는 현상이 발생했다. 광고를 띄우는 것까지는 문제가 없었는데 광고를 다보고 종료하기만 하면 강제종료가 되었고 당연히 보상도 들어오지 않았다. 구글링을 해보니 쓰레드 충돌 문제라고 하는데 (아마도) TextMeshPro가 주로 문제가 되는 듯 했다. 애드몹에서 광고를 실행하는 동안 게임을 일시중지하기 위해 유니티와 분리된 스레드에서 광고가 실행되는데, 광고후 첫 프레임에서 TMP로 텍스트를 렌더링할때 충돌하는 현상이 있다고 한다. 해결책으로 TMP를 비활성화 하면 된다고 하는데... 이미 만들어놓은걸 비활성화 하긴 아까워서 광고가 끝났는지 체크하는 bool형 변수를 만들고 update에서 해당 변수가 true면 inv..

error CS0120: An object reference is required for the non-static field, method, or property 'Camera.ScreenToWorldPoint(Vector3)'

오리키우기 디버깅 하다가 발견한 버그이다. Camera.ScreenToWorldPoint 메서드에서 해당 에러가 났는데, Camera.main.ScreenToWorldPoint 로 바꾸니깐 잘된다^___^ 참고: https://answers.unity.com/questions/947643/camerascreentoworldpoint-error-cs0120.html Camera.ScreenToWorldPoint error CS0120 - Unity Answers answers.unity.com

#3 odyssey 개발일지 : velocity와 애니메이션 커브로 자연스러운 점프 만들기

이제 이동도 만들었으니 캐릭터 점프를 만들 차례다. 그런데 addForce로 하면 쉽게 만들 수 있을줄 알았는데... 문제가 발생했다. addForce로 Vector2.up 방향으로 힘을 줘도 점프를 하지 않는다.. 이유는 내가 velocity로 매 프레임마다 속도를 직접 조절하기 때문이다. velocity와 addForce의 차이를 잘 이해하지 못했는데... velocity는 rigidbody의 velocity 값에 직접 접근해서 속도를 조절하고 addForce는 원하는 방향대로 직접 속도값을 계산해서 rigidbody의 속도값을 조절해주는 메서드라고 이해했다. 나는 이동을 구현할때 매 프레임마다 velocity를 조절하기 때문에 addForce를 해도 묻히는 것 같았다. 아마 내가 점프를 구현하기 위..

odyssey 2022.11.10