// Update is called once per frame void Update() { if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { if (Input.GetTouch(0).deltaPosition.sqrMagnitude > minDis) { Vector2 deltaDir = Input.GetTouch(0).deltaPosition; if (Mathf.Abs(deltaDir.x) > Mathf.Abs(deltaDir.y)) { moveDir = deltaDir.x > 0 ? TouchMoveDir.right : TouchMoveDir.left; } if (Mathf.Abs(deltaDir.y) > Mathf.Abs(deltaDir.x)) { moveDir = deltaDir.y > 0 ? TouchMoveDir.up : TouchMoveDir.down; } } } if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended) { moveDir = TouchMoveDir.idle; } if (moveDir == TouchMoveDir.right) { Debug.Log("right"); target.transform.position += transform.right * 0.2f; } if (moveDir == TouchMoveDir.left) { Debug.Log("left"); target.transform.position -= transform.right * 0.2f; } if (moveDir == TouchMoveDir.up) { target.transform.position += transform.up * 0.2f; target.transform.position += transform.up * 0.2f; } if (moveDir == TouchMoveDir.down) { target.transform.position -= transform.up * 0.2f; } }
void FixedUpdate() { if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Moved) { if (Input.GetTouch(0).deltaPosition.sqrMagnitude > minDis) { Vector2 deltaDir = Input.GetTouch(0).deltaPosition; if (Mathf.Abs(deltaDir.x) > Mathf.Abs(deltaDir.y)) { moveDir = deltaDir.x > 0 ? TouchMoveDir.right : TouchMoveDir.left; } if (Mathf.Abs(deltaDir.y) > Mathf.Abs(deltaDir.x)) { moveDir = deltaDir.y > 0 ? TouchMoveDir.idle : TouchMoveDir.down; } } } if (Input.touchCount > 0 && Input.GetTouch(0).phase == TouchPhase.Ended) { moveDir = TouchMoveDir.left; } if (moveDir == TouchMoveDir.right) { //右 moveDir = TouchMoveDir.left; } if (moveDir == TouchMoveDir.left) { //左 moveDir = TouchMoveDir.left; } if (moveDir == TouchMoveDir.idle) { //上 if (Application.platform != RuntimePlatform.WindowsEditor) { //非编辑器下运行 if (Input.GetTouch(0).position.x >= 0 && Input.GetTouch(0).position.x <= Screen.width * 0.75f) { if (transform.position.y > initPos.y + maxDis) { Vector3 endPos = new Vector3(initPos.x, initPos.y + maxDis, initPos.z); transform.DOMove(endPos, 0.1f); } else if (maxDis != 0) { transform.Translate(new Vector3(0, 1, 0) * speed * Input.GetTouch(0).deltaPosition.sqrMagnitude *Time.deltaTime); //滑动的距离等于 手指滑动的距离乘 移动速度 } } } moveDir = TouchMoveDir.left; } if (moveDir == TouchMoveDir.down) //下 { if (Application.platform != RuntimePlatform.WindowsEditor) //非编辑器下运行 { if (Input.GetTouch(0).position.x >= 0 && Input.GetTouch(0).position.x <= Screen.width * 0.75f) { if (transform.position.y < initPos.y) //超出滑动的距离 { transform.DOMove(initPos, 0.1f); } else if (maxDis != 0) { transform.Translate(new Vector3(0, 1, 0) * -speed * Input.GetTouch(0).deltaPosition.sqrMagnitude *Time.deltaTime); //滑动的距离等于 手指滑动的距离乘 移动速度 } } moveDir = TouchMoveDir.left; } } }
private void Update() { #if (UNITY_IOS || UNITY_ANDROID) RaycastHit hit = new RaycastHit(); for (int i = 0; i < Input.touchCount; ++i) { if (Input.GetTouch(i).phase.Equals(TouchPhase.Began)) { // Construct a ray from the current touch coordinates Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position); if (Physics.Raycast(ray, out hit)) { if (hit.transform.GetComponent <Touchable>()) { if (lastHit.transform && hit.transform != lastHit.transform) { if (lastHit.transform.GetComponent <Touchable>()) { lastHit.transform.gameObject.SendMessage("OnTouchExited", SendMessageOptions.DontRequireReceiver); } } hit.transform.gameObject.SendMessage("OnTouchDown"); lastHit = hit; } } } if (Input.GetTouch(i).phase.Equals(TouchPhase.Ended)) { // Construct a ray from the current touch coordinates Ray ray = Camera.main.ScreenPointToRay(Input.GetTouch(i).position); if (Physics.Raycast(ray, out hit)) { if (hit.transform.GetComponent <Touchable>()) { hit.transform.gameObject.SendMessage("OnTouchUp"); } } moveDir = TouchMoveDir.idle; } if (Input.GetTouch(i).phase.Equals(TouchPhase.Moved)) { if (Input.GetTouch(0).deltaPosition.sqrMagnitude > minDis) { Vector2 deltaDir = Input.GetTouch(0).deltaPosition; if (Mathf.Abs(deltaDir.x) > Mathf.Abs(deltaDir.y)) { moveDir = deltaDir.x > 0 ? TouchMoveDir.right : TouchMoveDir.left; } if (Mathf.Abs(deltaDir.y) > Mathf.Abs(deltaDir.x)) { moveDir = deltaDir.y > 0 ? TouchMoveDir.up : TouchMoveDir.down; } } } } switch (moveDir) { case TouchMoveDir.idle: break; case TouchMoveDir.left: break; case TouchMoveDir.right: if (MoveRight != null) { MoveRight.Invoke(this, null); } break; case TouchMoveDir.up: break; case TouchMoveDir.down: break; default: break; } #endif }