- Home /
Cannot control two objects independently with two fingers
Hi all,
First off, I am a total beginner. I've posted a similar question using IDragHandler before, but I decided to switch to using Touch. Now I can move two separate objects independently with two fingers, but it seems that Phase gets all mixed up between two objects.
What I want to achieve is that two objects move and behave in total independence.
Here is my code on the object prefab. I've got this code from internet search and added my method AddTouchAmount() in TouchPhase.Moved case.
It works fine and adds proper amount every frame when there is one object in the scene. However, it adds two times per frame when there are two objects in the scene, even when I am not moving the second object.
I am guessing GetTouch(i) gets mixed up when there are multiple touches, but I don't know how to fix it. Maybe with fingerId? but I don't know how to use it. Please help.
void Start()
{
Input.multiTouchEnabled = true;
rb = GetComponent<Rigidbody2D>();
}
void Update()
{
if (Input.touchCount > 0)
{
for (int i = 0; i < Input.touchCount; ++i)
{
touch = Input.GetTouch(i);
// obtain touch position
Vector2 touchPos = Camera.main.ScreenToWorldPoint(touch.position);
// processing touch phases
switch (touch.phase)
{
// if you touches the screen
case TouchPhase.Began:
if (GetComponent<Collider2D>() == Physics2D.OverlapPoint(touchPos))
{
// get the offset between position you touhes
// and the center of the game object
deltaX = touchPos.x - transform.position.x;
deltaY = touchPos.y - transform.position.y;
// if touch begins within the ball collider
// then it is allowed to move
moveAllowed = true;
}
break;
// you move your finger
case TouchPhase.Moved:
if (GetComponent<Collider2D>() == Physics2D.OverlapPoint(touchPos) && moveAllowed)
rb.MovePosition(new Vector2(touchPos.x - deltaX, touchPos.y - deltaY));
AddTouchAmount(amountPerTouch); //This is the line I've added.
break;
// you release your finger
case TouchPhase.Ended:
// restore initial parameters
// when thouch is ended
moveAllowed = false;
break;
}
}
}
}