Background
You can have multiple GameObjects on your scene in Unity. How can we determine if user has touched a particular element. We will see how in this post. We will use Physics2D.Raycast() for this.
Code
You can do something like following -
using System.Collections; using System.Collections.Generic; using UnityEngine; public class GameInputs : MonoBehaviour { // Use this for initialization void Start () { } // Update is called once per frame void Update () { //We check if we have one or more touch happening. //We also check if the first touches phase is Ended (that the finger was lifted) if (Input.touchCount > 0 && Input.GetTouch (0).phase == TouchPhase.Ended) { //We transform the touch position into word space from screen space and store it. Vector3 touchPosWorld = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position); Vector2 touchPosWorld2D = new Vector2(touchPosWorld.x, touchPosWorld.y); //Debug.Log("Touched " + touchPosWorld.x + "" + touchPosWorld.y); //We now raycast with this information. If we have hit something we can process it. RaycastHit2D hitInformation = Physics2D.Raycast (touchPosWorld2D, Camera.main.transform.forward); if (hitInformation.collider != null) { //We should have hit something with a 2D Physics collider! GameObject touchedObject = hitInformation.transform.gameObject; //touchedObject should be the object someone touched. Debug.Log("Touched " + touchedObject.transform.name); switch (touchedObject.tag) { case "StartGameButton": Debug.Log("Touched StartGameButton " + touchedObject.transform.name); break; case "LikeButton": Debug.Log("Touched LikeButton " + touchedObject.transform.name); Application.OpenURL("https://play.google.com/store/apps/details?id=com.osfg.ringtonesetter.main"); Application.OpenURL("market://details?id=com.osfg.ringtonesetter.main"); break; case "SettingsButton": Debug.Log ("Touched SettingsButton " + touchedObject.transform.name); Application.LoadLevel ("Settings"); break; } } } } }
Explanation and setup
As you can see we are using Physics2D.Raycast() to case a ray from camera to point of touch and then detecting a collision. Finally if we have collision information we check the tag associated with it to check out element of interest.
- Make sure for each such elements you add a collider component like 2D Box collider. Only then collision will work.
- Make sure you tag each elements correctly and use it to get your object when touched.
Other Notes :
- You can create a prefab of background and use it in all your app screens to be consistent. That way changes made in prefab will be applicable to all instances of it.
- If your scene is not getting correctly displayed you can correct it by clicking on "Main Camera" and then Game Object -> Align view to selected
No comments:
Post a Comment