override public int InputUpdate() { if (Input.touchCount > 0) { for (int i = 0; i < Input.touchCount; i++) { Touch t = Input.GetTouch(i); //stickpos z = 0; Vector3 stickPosZ0 = gameObject.transform.position; stickPosZ0.z = 0; //touch pos. Vector3 touchWorldPos = tartegCamera.ScreenToWorldPoint(new Vector3(t.position.x, t.position.y, 0)); touchWorldPos.z = 0; //touch delta pos. Vector3 touchdeltaWorldPos = tartegCamera.ScreenToWorldPoint(new Vector3(t.deltaPosition.x, t.deltaPosition.y, 0)); touchdeltaWorldPos.z = 0; //可出現stick的範圍. if (isUseStickAppearArea && AppearArea != null) { if (AppearArea.OverlapPoint(touchWorldPos) && (t.phase == TouchPhase.Began)) { transform.position = new Vector3(touchWorldPos.x, touchWorldPos.y, transform.position.z); } } //是否點中. if (circleC2d.OverlapPoint(touchWorldPos)) { //是否別人用了. GameVirtualInputBase touchedInput = GameVirtualInput.instance.isTouched(i); //別的 input 用了. if (touchedInput != null) { continue; } } else { continue; } //暫時記下 touch id; touchID = i; //Debug.Log("in " + i.ToString() + " " + t.phase.ToString()); //開始. if (t.phase == TouchPhase.Began) { circleC2d.radius = oldCircleR * colliderTouchScale; holdTime = 0; if (onDownEvent != null) { onDownEvent(Vector2.zero); } } //按住. if (t.phase == TouchPhase.Stationary) { holdTime += Time.deltaTime; } //移動. if (t.phase == TouchPhase.Moved) { //direction. Vector3 directionWorld = touchWorldPos - stickPosZ0; //算出移動多少比率, 半徑. Vector2 directionV2 = new Vector2(directionWorld.x, directionWorld.y); float directionWorldLeng = directionV2.magnitude; float cirRadius = oldCircleR * transform.localScale.x; float directionWorldRadiusRatio = directionWorldLeng / cirRadius; if (moveStick) { //stick 跟著移動. if (directionWorldLeng >= cirRadius * minStickTomovek) { //Debug.Log(sdirvec.magnitude); transform.position += directionWorld * 0.1f; } } //香菇頭. stickHead.transform.position = transform.position + directionWorld.normalized * Math.Min(directionWorldRadiusRatio, 1) * cirRadius; //collider 跟著移動. circleC2d.gameObject.transform.position = new Vector3(touchWorldPos.x, touchWorldPos.y, circleC2d.gameObject.transform.position.z); //debugtext.text = directionWorldRadiusRatio.ToString(); if (directionWorldRadiusRatio > minToMove) { if (onMoveEvent != null) { onMoveEvent(directionV2.normalized); } } } //放開. if (t.phase == TouchPhase.Ended || (t.phase == TouchPhase.Canceled)) { //collider 移回去原位. SetUnTouched(); if (onUpEvent != null) { onUpEvent(Vector2.zero); } //長放或短放. if (holdTime >= minLongUpTime) { if (onLongUpEvent != null) { onLongUpEvent(Vector2.zero); } } else { if (onShortUpEvent != null) { onShortUpEvent(Vector2.zero); } } } //按住事件. if (onHoldEvent != null && holdTime > 0) { onHoldEvent(new Vector2(holdTime, holdTime)); } //debugtext.text = touchID.ToString(); break; } } return(touchID); }
override public int InputUpdate() { if (Input.touchCount > 0) { for (int i = 0; i < Input.touchCount; i++) { Touch t = Input.GetTouch(i); //stickpos z = 0; Vector3 stickPosZ0 = gameObject.transform.position; stickPosZ0.z = 0; //touch pos. Vector3 touchWorldPos = tartegCamera.ScreenToWorldPoint(new Vector3(t.position.x, t.position.y, 0)); touchWorldPos.z = 0; //touch delta pos. Vector3 touchdeltaWorldPos = tartegCamera.ScreenToWorldPoint(new Vector3(t.deltaPosition.x, t.deltaPosition.y, 0)); touchdeltaWorldPos.z = 0; //是否點中. if (circleC2d.OverlapPoint(touchWorldPos)) { //是否別人用了. GameVirtualInputBase touchedInput = GameVirtualInput.instance.isTouched(i); //別的 input 用了. if (touchedInput != null) { continue; } } else { continue; } //暫時記下 touch id; touchID = i; //Debug.Log("in " + i.ToString() + " " + t.phase.ToString()); //開始. if (t.phase == TouchPhase.Began) { circleC2d.radius = oldCircleR * colliderTouchScale; holdTime = 0; btnSprite.color = Color.red; if (onDownEvent != null) { onDownEvent(Vector2.zero); } } //按住. if (t.phase == TouchPhase.Stationary) { holdTime += Time.deltaTime; } //移動. if (t.phase == TouchPhase.Moved) { //direction. //Vector3 directionWorld = touchWorldPos - stickPosZ0; //算出移動多少比率, 半徑. //Vector2 directionV2 = new Vector2(directionWorld.x, directionWorld.y); //float directionWorldLeng = directionV2.magnitude; //float cirRadius = oldCircleR * transform.localScale.x; //float directionWorldRadiusRatio = directionWorldLeng/cirRadius; //debugtext.text = directionWorldRadiusRatio.ToString(); //collider 跟著移動. if (moveCollider) { circleC2d.gameObject.transform.position = new Vector3(touchWorldPos.x, touchWorldPos.y, circleC2d.gameObject.transform.position.z); } } //放開. if (t.phase == TouchPhase.Ended || (t.phase == TouchPhase.Canceled)) { btnSprite.color = Color.white; if (onUpEvent != null) { onUpEvent(new Vector2(holdTime, holdTime)); } //長放或短放. if (holdTime >= minLongUpTime) { Debug.Log("onLongUpEvent" + holdTime.ToString()); if (onLongUpEvent != null) { onLongUpEvent(new Vector2(holdTime, holdTime)); } } else { Debug.Log("onShortUpEvent" + holdTime.ToString()); if (onShortUpEvent != null) { onShortUpEvent(new Vector2(holdTime, holdTime)); } } //collider 移回去原位. SetUnTouched(); } //按住事件. if (onHoldEvent != null && holdTime > 0) { onHoldEvent(new Vector2(holdTime, holdTime)); } //debugtext.text = touchID.ToString(); break; } } return(touchID); }