我想在每次用户触摸附有BoxCollider2D的GameObject时在Android设备上进行检测,以便每次都可以执行代码。
在我的情况下,用户多次滑动GameObject,因此他们可能不会将手指从屏幕上抬起,直到他们需要或满足特定条件。
以下是一个示例图片:
答案 0 :(得分:1)
用户可能会多次滑过GameObject 不要将手指从屏幕上抬起,直到他们需要或特定 条件得到满足。
由于用户不需要从屏幕上移除手指,因此您可以使用TouchPhase.Moved
和RaycastHit2D
检查是否在2D GameObject上滑动。 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!");
}
}
}
修改强>:
代码没有检测到GameObject上的所有滑动。有用 只有当你在它周围滑动一下时才会好。
您可以拥有自己的自定义移动阶段。将if (Input.GetTouch(i).phase == TouchPhase.Moved)
替换为if (Input.GetTouch(i).deltaPosition.magnitude > validMoveMagnitude)
。
validMoveMagnitude
定义为float validMoveMagnitude = 1.5f;
。
编辑3 :
如果仍未检测到小动作,您可以创建一个存储最后一个触摸位置的变量,然后将其与新触摸位置进行比较。
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!");
}
}
}
答案 1 :(得分:0)
使用box collider将此脚本附加到该游戏对象。 您可以使用鼠标指针检测输入也适用于Android的事件。刚尝试了一个带有半尺寸面板的基本画布,附在盒子对撞机2D上。
Tableresult <- read.table(header = TRUE, text = "A.1.x A.1.y B.1.x B.1.y C.1.x C.1.y
7 0.00 7 0.00 7 0.00
8 0.02 8 0.02 8 0.02
9 0.04 9 0.04 9 0.04
10 0.06 10 0.06 10 0.06
. . . . . .
145 0.33 139 0.16 117 0.63
146 0.22 140 0.15 118 0.61
147 0.11 141 0.13 119 0.58", na.strings = '.')