- Home /
Touch Input on Sprites
Hey. I've been trying to figure out how to make a control for my game. I got the idea to take a sprite and if the finger is on this sprite it should act like Input.GetKey. (A sprite also doesn't change the position as the GUI, what i mean with it is that it doesn't change its position and is easier to build it) Can anyone help me.
Answer by Nick4 · Mar 01, 2014 at 12:29 PM
void Update()
{
if (Input.touchCount == 1)
{
Vector3 wp = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
Vector2 touchPos = new Vector2(wp.x, wp.y);
if (collider2D == Physics2D.OverlapPoint(touchPos))
{
//your code
}
}
}
Edit :
Here's something I wrote. It would come in handy if you need to control all touch inputs from 1 script :
private GameObject beganObj;
private GameObject currentObj;
void Update ()
{
if(Input.touchCount > 0)
{
for(int i = 0; i < Input.touchCount; i++)
{
Touch currentTouch = Input.GetTouch(i);
if(currentTouch.phase == TouchPhase.Began)
{
Vector2 v2 = new Vector2(Camera.main.ScreenToWorldPoint(currentTouch.position).x, Camera.main.ScreenToWorldPoint(currentTouch.position).y);
Collider2D c2d = Physics2D.OverlapPoint(v2);
if(c2d != null)
{
beganObj = c2d.gameObject;
}
}
if (currentTouch.phase == TouchPhase.Moved)
{
Vector2 v2 = new Vector2(Camera.main.ScreenToWorldPoint(currentTouch.position).x, Camera.main.ScreenToWorldPoint(currentTouch.position).y);
Collider2D c2d = Physics2D.OverlapPoint(v2);
if (c2d != null)
{
currentObj = c2d.gameObject;
}
}
}
}
}
JS :
function Update()
{
if (Input.touchCount == 1)
{
wp : Vector3 = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position);
touchPos : Vector2 = new Vector2(wp.x, wp.y);
if (collider2D == Physics2D.OverlapPoint(touchPos))
{
//your code
}
}
}
I think this will do it in javascript. Attach this to sprite you want to use as button and make sure you have a 2D collider in your sprite object.
Another way to do this with guiTextures :
function Update()
{
if(Input.touches.Length > 0)
{
for(int i = 0; i < Input.touchCount; i++)
{
if(this.guiTexture.HitTest(Input.GetTouch(i).position)
{
if(Input.GetTouch(i).phase == TouchPhase.Began)
{
// Write what you want to do when guiTexture is touched.
}
}
}
}
}
Attach this script to your gameObject that's holding guiTexture. I haven't been using javascript for a while now, so I apologize in advance if there are any mistakes. Good luck.
I am not very familiar with C# (I prefer JavaScript), and i want to add a second button so how could i add the button with a new variable
how to control the movement speed of the object from the script mentioned above ??
Your answer
![](https://koobas.hobune.stream/wayback/20220613135056im_/https://answers.unity.com/themes/thub/images/avi.jpg)
Follow this Question
Related Questions
Why am I having UI Clickthrough in Builds with 5.2? 0 Answers
how to a make a touch button open a menu while finger is down? 1 Answer
Main menu touch input for android 1 Answer
HOW TO MAKE A 2D OBJECT MOVE WITH TOUCH INPUT ON ANOTHER 1 Answer
Coordinates of Input.GetTouch(0).position vs Screen coordinates? 1 Answer