사용자 와이프 : 여기
는 예제 이미지입니다 충족되었습니다.
사용자가 화면에서 손가락을 제거하는 데 필요한되지 않기 때문에, 당신은 TouchPhase.Moved
와 RaycastHit2D
와 2D 게임 오브젝트 스 와이프를 확인할 수 있습니다. 터치 만 감지하려면 TouchPhase.Began
을 사용해야합니다.
void Update()
{
//Check for Press
for (int i = 0; i < Input.touchCount; i++)
{
if (Input.GetTouch(i).phase == TouchPhase.Began)
{
Vector2 fingerRay = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
RaycastHit2D objectHit = Physics2D.Raycast(fingerRay, Vector2.zero);
if (objectHit)
{
//We hit something
if (objectHit.collider.name == "myGameObjectName")
{
Debug.Log("Touched Finger on GameObject: " + objectHit.collider.name);
}
}
}
//Check if we moved the finger(while press is still down)
if (Input.GetTouch(i).phase == TouchPhase.Moved)
{
Vector2 fingerRay = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
RaycastHit2D objectHit = Physics2D.Raycast(fingerRay, Vector2.zero);
if (objectHit)
{
//We hit something while moving the finger
if (objectHit.collider.name == "myGameObjectName")
{
Debug.Log("Moved Finger on GameObject: " + objectHit.collider.name);
}
}
}
//Check for release
if (Input.GetTouch(i).phase == TouchPhase.Ended)
{
Debug.Log("Released Finger!");
}
}
}
편집 :
코드는 게임 오브젝트를 통해 모든 와이프를 감지하지 않습니다. 은 주변을 조금만 스쳐야 만 잘 작동합니다.
사용자 지정 이동 단계가있을 수 있습니다. if (Input.GetTouch(i).phase == TouchPhase.Moved)
을 if (Input.GetTouch(i).deltaPosition.magnitude > validMoveMagnitude)
으로 바꿉니다.
validMoveMagnitude
은 float validMoveMagnitude = 1.5f;
으로 정의됩니다.
EDIT 3 : 작은 움직임이 여전히 감지되지 않는
경우, 마지막 터치 pos가 다음 새 터치 POS과 비교 저장하는 변수를 만들 수 있습니다.
Vector3 lastPos;
void Update()
{
//Check for Press
for (int i = 0; i < Input.touchCount; i++)
{
if (Input.GetTouch(i).phase == TouchPhase.Began)
{
lastPos = Input.GetTouch(i).position;
Vector2 fingerRay = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
RaycastHit2D objectHit = Physics2D.Raycast(fingerRay, Vector2.zero);
if (objectHit)
{
//We hit something
if (objectHit.collider.name == "myGameObjectName")
{
Debug.Log("Touched Finger on GameObject: " + objectHit.collider.name);
}
}
}
//Get current Pos
Vector3 currentPos = Input.GetTouch(i).position;
//Check if we moved
if (currentPos != lastPos)
{
//Update Last Pos
lastPos = currentPos;
Debug.Log("Finger Moved!" + lastPos);
Vector2 fingerRay = Camera.main.ScreenToWorldPoint(Input.GetTouch(i).position);
RaycastHit2D objectHit = Physics2D.Raycast(fingerRay, Vector2.zero);
if (objectHit)
{
//We hit something while moving the finger
if (objectHit.collider.name == "myGameObjectName")
{
Debug.Log("Moved Finger on GameObject: " + objectHit.collider.name);
}
}
}
//Check for release
if (Input.GetTouch(i).phase == TouchPhase.Ended)
{
// Debug.Log("Released Finger!");
}
}
}
코드가 GameObject를 통한 모든 스 와이프를 감지하지 못합니다. 주위를 조금만 문지르면 효과가 있습니다. – Cress
@Cress 답안에서 편집 내용을 읽으십시오. – Programmer
올바르게 이해하면 validMoveMagnitude가 낮을수록 실제 움직임을 감지 할 수있는 조건의 움직임이 짧아 질 수 있지만 손가락이 GameObject 위로 스 와이프 할 때마다 조건이 충족되지 않습니다. – Cress