물에 살고싶은 개발자

카메라 무빙 및 카메라 가두기 본문

Unity3D

카메라 무빙 및 카메라 가두기

돼지사랑 2015. 12. 14. 18:52

게임을 만들다보면 은근히..아니 꽤 자주 쓰이는 것이 카메라 무빙이고 카메라를 가두는 것이다.

여기서 말하는 카메라 무빙은 유니티에서 지원하는 스탠다드에셋에 있는것처럼 캐릭터를 따라다니거나 하는 무빙이 아닌 유저가 터치 드래그로 카메라를 움직이는 것을 말한다.


일단 코드부터 보자 의외로 단순하다.

int touchCount = Input.touchCount;
if(touchCount == 1)
{
	Touch touch = Input.GetTouch (0);

	if( touch.phase == TouchPhase.Began )
	{
		prePos = touch.position - touch.deltaPosition;
	}
	else if(touch.phase == TouchPhase.Moved)
	{			
		nowPos = touch.position - touch.deltaPosition;
		movePos = (Vector2)(prePos - nowPos) * Speed;
		
		GetComponent().transform.Translate(movePos);
		
		MoveLimit();	
		
		prePos = touch.position - touch.deltaPosition;
	}
}


간단히 설명하자면 터치페이즈가 무브일 경우,

처음 터치한 위치와 현재위치의 거리벡터값에 속도를 곱해서 Translate시켜준다.

(prePos,nowPos,movePos는 전부 Vecter2 타입이다. 내가 2D게임을 만들고있기때문에..ㅋ)


이때 카메라의 이동범위를 제한하기 위해 Translate 시킨 뒤에 MoveLimit()함수를 호출한다

이 함수의 코드는 아래와 같다.

void MoveLimit()
{
	Vector2 temp;
	temp.x = Mathf.Clamp( transform.position.x , SideXY[ LeftX ] , SideXY[ RightX ] );
	temp.y = Mathf.Clamp( transform.position.y , SideXY[ BottomY ] , SideXY[ TopY ] );
	
	transform.position = temp;	
}
여기서 핵심은 Clamp함수다.

Clamp함수에 현재 오브젝트의 포지션값과 어디까지 움직이게 할지 범위를 넣으면 된다.

여기서 단점이자 함정은 코드에 있는 Side값들을...씬뷰에서 카메라 오브젝트 움직여가며

단순 노가다를 통해 값을 찾아서 입력해야 한다는 점이다 ㅠㅠ

이부분까지 자동화시키기엔...내 수학적 지식이 턱없이 부족하더라..

아무튼 이상 끝!

Comments