- Home /
Moving multiple objects independenty on mobile using touchscreen
Hello! I am having a very hard time because i cannot figure out how to move two or more objects independently at the same time using multiple touches(like an air-hokey game). I can succesfully move one object but ,with my current script, there must be at least one finger on the screen to move the second one. It would be rude to ask for the hole script so I just want some hints or tips because I am a beginner and I want to learn on my own. So please if anyone could help me I would really apreciate it. If needed I will post my curent script tomorrow. (Sorry for my poor English)
Answer by Claytonious · May 18, 2012 at 08:56 AM
Unity's Touch class has a field called "fingerId" that you can use to track different fingers with. So, assuming you were watching for Input.touches to not be empty, and assuming that you raycast or whatever to decide that a touch is on one your hockey paddles and you assign its fingerId to the hit paddle (hockeyPaddle1Id and hockeyPaddle2Id), then as you update you would do something like:
foreach(Touch touch in Input.touches)
{
if (touch.fingerId == hockeyPaddle1Id)
hockeyPaddle1.transform.position = GetHockeyTablePosition(touch.position);
else if (touch.fingerId == hockeyPaddle2Id)
hockeyPaddle2.transform.position = GetHockeyTablePosition(touch.position);
}
GetHockeyTablePosition could also be a raycast from the screen point to your table surface, or something simpler if you are in 2D. But your question was just about tracking touches, so there you go. ;-)
Thank you so much! The control gave me a real headache. Again, thank you for your kindness. :)
Answer by White · May 22, 2012 at 08:08 PM
Well, this is embarrassing. After a couple of days of work, I can't still figure out how to use fingerId and the unity documentation is kinda useless.. Here is my script:
#pragma strict
var targetItem : GameObject; var targetItem2 : GameObject;
private var scrollDistanceX : float; private var scrollDistanceY : float; private var scrollDistanceX2 : float; private var scrollDistanceY2 : float; var speed : float;
private var hit: RaycastHit; private var layerMask = (1 << 8) | (1 << 2);
function Start() {
scrollDistanceX = targetItem.transform.position.z;
scrollDistanceY = targetItem.transform.position.x;
scrollDistanceX2 = targetItem.transform.position.z;
scrollDistanceY2 = targetItem.transform.position.x;
layerMask =~ layerMask;
}
function FixedUpdate() {
var count = Input.touchCount;
for (var i : int = 0;i < count; i++)
{
if (Input.touchCount > 0)
{
var theTouch : Touch = Input.GetTouch (i);
var fingerId : int = theTouch.fingerId;
var ray = Camera.main.ScreenPointToRay(theTouch.position);
if(Physics.Raycast(ray,hit,50,layerMask))
{
if (hit.collider.gameObject.tag == "Cub" && theTouch.fingerId == fingerId){
var scrollDeltaX = theTouch.deltaPosition.x;
var scrollDeltaY = theTouch.deltaPosition.y;
scrollDistanceX = scrollDistanceX+scrollDeltaX*Time.deltaTime*speed;
scrollDistanceY = scrollDistanceY-scrollDeltaY*Time.deltaTime*speed;
targetItem.transform.position.z = scrollDistanceX;
targetItem.transform.position.x = scrollDistanceY;
}
if (hit.collider.gameObject.tag == "Sphere" && theTouch.fingerId == fingerId){
var scrollDeltaX2 = theTouch.deltaPosition.x;
var scrollDeltaY2 = theTouch.deltaPosition.y;
scrollDistanceX2 = scrollDistanceX2+scrollDeltaX2*Time.deltaTime*speed;
scrollDistanceY2 = scrollDistanceY2-scrollDeltaY2*Time.deltaTime*speed;
targetItem2.transform.position.z = scrollDistanceX2;
targetItem2.transform.position.x = scrollDistanceY2;
}
}
} } }
I can move the Cube without problems but when I touch the Sphere for the first time, it goes to the cube's position. After that first touch, the script works exactly as it should. Please, can someone tell me what do I do wrong? ( again, sorry for my English)