Quantcast
Viewing all articles
Browse latest Browse all 108

Unresponsive Touch

Hello, The title might be overstating it, but we are developing an action game and it requires fast and precise touches. However, sometimes, mainly during fps spikes (spikes = 25-30 fps, down from the regular 60 fps), the touch is... unresponsive, some of the touches are not interpreted. My code for touch input detection is as follows: using UnityEngine; using System.Collections; public class TouchHandlerGame : MonoBehaviour { //public TextMesh debugText; private bool buttonClick; private Camera mainCamera; private bool mobile; //Variables for mouse slash private Vector3 initialSlashPos; private Vector2 initialTouchPos; private Vector2 initialClickCancelPos; private LayerMask layerNotHud; private LayerMask layerSlashable; private void Start() { layerNotHud = (1 << LayerMask.NameToLayer("BackgroundHUD")) | (1 << LayerMask.NameToLayer("ForegroundHUD")) | (1 << LayerMask.NameToLayer("FinisherHUD")); layerNotHud = ~layerNotHud; layerSlashable = (1 << LayerMask.NameToLayer("Slashable")); mainCamera = GameObject.Find("Main Camera").GetComponent(); if (Application.platform == RuntimePlatform.Android || Application.platform == RuntimePlatform.IPhonePlayer) mobile = true; } private void Update() { if (!GlobalValues.paused) { if (mobile) { foreach (Touch touch in Input.touches) { if (touch.phase == TouchPhase.Began) { buttonClick = true; } if (touch.phase == TouchPhase.Moved) { //Cancela o Click se mover d+ if (initialClickCancelPos == Vector2.zero) initialClickCancelPos = touch.position; { float sqrLen = (initialClickCancelPos - touch.position).sqrMagnitude; if (sqrLen > 10000) { initialClickCancelPos = Vector2.zero; buttonClick = false; } } Ray ray = mainCamera.ScreenPointToRay(touch.position); RaycastHit hit = new RaycastHit(); if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerSlashable)) { if (initialTouchPos == Vector2.zero) initialTouchPos = touch.position; { float sqrLen = (initialTouchPos - touch.position).sqrMagnitude; if (sqrLen > 200) { initialTouchPos = Vector2.zero; hit.collider.gameObject.SendMessage("OnMouseSlash", SendMessageOptions.DontRequireReceiver); } } } } if (touch.phase == TouchPhase.Ended) { if (buttonClick) { Ray ray = mainCamera.ScreenPointToRay(touch.position); RaycastHit hit = new RaycastHit(); if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerNotHud)) { if (hit.collider.tag != "Button") hit.collider.gameObject.SendMessage("OnMouseClickDown", SendMessageOptions.DontRequireReceiver); } } buttonClick = false; initialTouchPos = Vector2.zero; initialClickCancelPos = Vector2.zero; } } } else { if (Input.GetMouseButtonDown(0)) { buttonClick = true; } if (Input.GetMouseButton(0)) { //Cancela o Click se mover d+ if (initialSlashPos == Vector3.zero) initialSlashPos = Input.mousePosition; else { float sqrLen = (initialSlashPos - Input.mousePosition).sqrMagnitude; //Mais rapido que Vector3.Distance if (sqrLen > 10000) { buttonClick = false; initialSlashPos = Vector3.zero; } } Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); RaycastHit hit = new RaycastHit(); if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerSlashable)) { if (initialSlashPos == Vector3.zero) initialSlashPos = Input.mousePosition; else { float sqrLen = (initialSlashPos - Input.mousePosition).sqrMagnitude; //Mais rapido que Vector3.Distance if (sqrLen > 1000) { buttonClick = false; initialSlashPos = Vector3.zero; hit.collider.SendMessage("OnMouseSlash", SendMessageOptions.DontRequireReceiver); } } } } if (Input.GetMouseButtonUp(0)) { if (buttonClick) { Ray ray = mainCamera.ScreenPointToRay(Input.mousePosition); RaycastHit hit = new RaycastHit(); if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerNotHud)) { if (hit.collider.tag != "Button") hit.collider.SendMessage("OnMouseClickDown", SendMessageOptions.DontRequireReceiver); } } buttonClick = false; initialSlashPos = Vector3.zero; } } } } } The game is playable, it doesnt happen all that often, but more often than desired... am I detecting touches wrong? Does anyone else have this kind of problem? Thank you for your attention, Best regards, Allan

Viewing all articles
Browse latest Browse all 108

Trending Articles