728x90
728x90
유니티 함수 생명주기 - Awake / Start / Update / FixedUpdate / LateUpdate Update() 함수 Update() 함수는 프레임마다 호출하는 함수로, 시간 및 횟수 불규칙하다. 왜나하면 PC 성능/사양에 따라 갱신 여부(t)가 달라질 수 있기 때문인데 시스템이 빠른 곳에서는 0.01초만에 갱신될 수도 있고, 0.03초만에 갱신될 수도 있다. 터널링(Tunneling) 현상 발생 원인 이러한 경우 터널링 현상이 발생할 수 있는데 예를 들어 bullet을 벽을 향해 쏘는데 frame이 씹혀서 통과하는 경우가 종종 발생한다. 이는 t값이 Time.deltaTime의 값을 받기 때문인데 원래 Udpate에서는 t 가 Time.deltaTime으로 적용되 시간이 계속 증가해 ..
선형보간 (Lerp) 선형 보간(Linear Interpolation)이란 두 점 a, b 사이의 값(c)를 구하기 위해 a-b 두 점을 연결한 직선을 만들어 사이 값을 계산하는 방법이다. 유니티에서 Lerp는 선형 보간을 사용하여 부드러운 움직임을 표현하기 위해 Update()에서 넣어 사용하거나, 두 image를 blend 해서 하나의 material로 만들 때 주로 사용한다. Mathf.Lerp(float a, float b, float t) Lerp는 a, b 사이의 t(0 ~ 1) 만큼 위치한 값 c를 위와 같은 선형 보간 공식을 통해 구해준다. 여기서 t는 percet의 개념(0 ~ 1)이기 때문에 t = 0이면 a, t = 1이면 b와 같다. void Update() a = Mathf.Ler..
Unity 3D Rendering PipeLine 유니티 3D 공간 상에서 오브젝트를 그리는 전체 프로세스를 3D Rendering Pipeline이라고 부른다. 렌더링 파이프라인에서 가장 시작이 되는 프로세스는 카메라인데 카메라는 좌표에 따라 Local(model) - Global(World)로 나뉘고 Camera(View)로 시점을 나타낸다. 카메라 관련 프로퍼티 카메라를 사용해 3D 공간을 표현할 때 다음과 같은 중요한 프로퍼티들을 사용하고 있다. 시야 절두체(view frustum) 시야 밖에 있는 오브젝트는 삭제해서 그림 시야각(Field of View) 시야 절두체를 제외한 시야 범위 Clipping planes 시야 절두체를 벗어나는 부분을 자르고 그릴 범위(Near / Far) 투영(pro..
유니티에서 이미지 Image와 UV좌표 3D 오브젝트는 가로 x, 세로 y, 깊이 z라고 하지만 pixel을 가진 2D 텍스처 이미지는 가로 U, 세로 V해서 UV좌표라고 한다. pixel로 된 이미지를 3D mesh에 덮어 씌우는 것을 UV Wrap이라고 한다. UV Wrapping 할 때 시작점을 어디로 둘 것인지를 정하는게 Offset 값이다. 이미지 텍스처의 Wrap Mode를 보면 다음과 같은 컴포넌트 요소를 확인할 수 있다. Repeat 값으로 두면 텍스처가 특정 방향으로 이동하면서 사라지면 새로 나타나는 부분에 계속 붙어, 이미지가 계속 반복되며 연결되는 것과 같은 효과를 줄 수 있다. 드래곤 플라이트와 같이 2d 콘텐츠를 제작할 때 배경이 무한 스크롤 되게 하는 기능을 구현할 때 사용하면 ..
빛, 라이팅(Lighting) 빛은 음영(그림자)을 표현하는 수단으로 빛의 유무에 따라 2D 콘텐츠인지, 3D 콘텐츠인지가 결정된다. 유니티에서는 기본적으로 3가지 직접광 라이팅 컴포넌트를 제공하고 있다. (Directional Light, 방향 1개, Point Light, 360도 방향, Spot Light, 50~60도 방향) 콘텐츠를 제작할 때 라이팅은 매우 중요한 요소이지만 실시간으로 렌더링 해야 하기 때문에 연산량이 많아 개발을 매우 무겁게하는 요소이기도 하다. 특히, Point Light와 Spot Light는 방향이 광범위한 탓에 기본적인 연산량이 많고 최적화에 문제를 일으키기도 한다. 따라서 정말 필요한 상황이 아니라면 실무에서는 잘 안쓰고 그 대신 Light map을 사용한다. 유니티에..
게임 개발과 관련하여 팀 프로젝트 협업과 MVC 패턴의 이해 개발 팀 프로젝트를 수행하는 과정에서 클라 - 클라 / 클라 - 서버 간 협업을 자주 하게 된다. 여기서 문제는 개발 프로세스가 연결되어 있어 서로 영향을 주고받기 때문에 만약 한 쪽에서 구현이 안되면 다른 쪽도 개발 진척에 문제가 발생할 수 있다. 가령 서로 다른 두 개발자가 각각 피격 기능과 저장 기능을 구현해본다고 가정해보자. 피격 기능으로 체력이 깎인 데이터가 있어야 그 데이터가 저장되는지를 테스트해 볼 수 있기 때문에 개발 순서 상 피격 기능 -> 저장 기능 순으로 구현되어야 할 것이다. 하지만 개발 기간은 제한되어 있기 때문에 한쪽이 개발을 완료할 때까지 기다릴 수 없다. 이럴 때 실무에서는 모듈화(Modularity)를 통해 워크 ..