Quantcast
Channel: Questions in topic: "unresponsive"
Viewing all articles
Browse latest Browse all 108

Unresponsive Touch

$
0
0
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



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>