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