본문 바로가기
프로그래밍/Unity & c#

Unity 3D 터치 이벤트

by 리뷰하는 (게임)프로그래머_리프TV 2014. 4. 1.

터치를 활용하는 예제를 만들어 보도록 하겠습니다.

 

PC환경에서는 마우스 클릭이나 키보드 입력을 주로 사용하겠지만, 실제로 폰으로 옮겨 질때는 터치 기능으로 작업을 해야겠죠.

 

터치 자체가 그렇게 어렵지는 않습니다.

 

일단 설명보다 바로 코드로! 

 

 

 

using UnityEngine;
using System.Collections;

public class CsGameManager : MonoBehaviour 
{
	Vector2[] touchPos = new Vector2[5];

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () 
	{
		// 현재 터치되어 있는 카운트 가져오기
		int cnt = Input.touchCount;

//		Debug.Log( "touch Cnt : " + cnt );

		// 동시에 여러곳을 터치 할 수 있기 때문.
		for( int i=0; i<cnt; ++i )
		{
			// i 번째로 터치된 값 이라고 보면 된다. 
			Touch touch = Input.GetTouch(i);
			Vector2 pos = touch.position;

			Debug.Log( "touch(" + i + ") : x = " + pos.x + ", y = " + pos.y ); 
		}
	}
}​

 

 

Unity Remote를 사용해 직접 터치를 해보니 다음처럼 표기 됩니다.

손가락을 여러개로 터치해 보았을 때

 

 

한곳만 터치해 보았을 때,

 

 

일단 기본적인 터치 방법과 그 좌표를 출력하는 테스트를 해보았습니다.

 

여기서 조금더 활용해 보면, 이렇게 됩니다.

 

using UnityEngine;
using System.Collections;

public class CsGameManager : MonoBehaviour 
{
	// Update is called once per frame
	void Update () 
	{
		// 현재 터치되어 있는 카운트 가져오기
		int cnt = Input.touchCount;

//		Debug.Log( "touch Cnt : " + cnt );

		// 동시에 여러곳을 터치 할 수 있기 때문.
		for( int i=0; i<cnt; ++i )
		{
			// i 번째로 터치된 값 이라고 보면 된다. 
			Touch touch = Input.GetTouch(i);
			Vector2 pos = touch.position;

			// 조금 더 디테일하게!
			if( touch.phase == TouchPhase.Began )
			{
				Debug.Log( "시작점 : (" + i + ") : x = " + pos.x + ", y = " + pos.y ); 
			}
			else if( touch.phase == TouchPhase.Ended )
			{
				Debug.Log( "끝점 : (" + i + ") : x = " + pos.x + ", y = " + pos.y ); 
			}
			else if( touch.phase == TouchPhase.Moved )
			{
				Debug.Log( "이동중 : (" + i + ") : x = " + pos.x + ", y = " + pos.y ); 
			}
		}
	}
}​

 

 

 

시작점과, 이동중일때, 그리고 손을 땠을때를 좀더 자세히 알 수 있습니다.

 

 

터치가 되는 좌표는 2D 좌표이기때문에 x, y 뿐이지만 실제로 이것을 이용하여 3D로 바꾸는 작업을 진행해야 합니다.

물론 단순히 터치가 되었나, 어느쪽으로 방향을 틀었나, 정도라면 지금정보로도 충분히 활용 할 수 있습니다만,

저 좌표를 이용해 게임내에 오브젝트를 이동하거나 생성하고 싶다면 3D 좌표로 변환을 해야겠죠~

그 부분은 다른 예제와 함께 다음 포스팅에서 살펴 보도록 하겠습니다.