//-------------------------------------------------------------------------- // ぷにぷにコントローラーの終了 //-------------------------------------------------------------------------- public void EndPunipuni() { //// タップされていた時間が一定以下だった時の処理 //////////////////////////////////////////////////////////////////// if (TouchState == TOUCH_STATE.NONE && nStateCheckCounter < TapDiscriminationFrame && Input.touchCount > 0) { //// タップ状況を「TAP」に変更 //////////////////////////////////////////////////////////////// TouchState = TOUCH_STATE.TAP; //// タップエフェクト発生 //////////////////////////////////////////////////////////////// tapeffect.SetEffectType(EFFECT_TYPE.TAP); // エフェクトタイプセット tapeffect.EffectFlug = true; // エフェクト更新フラグON } //// タップされていた時間が一定以上だった時の処理 //////////////////////////////////////////////////////////////////// if (Input.touchCount == 0) { //// ベジェ曲線とぷニコンメッシュのリセット //////////////////////////////////////////////////////////////////// ResetPuniMeshAndBezier(); //// エフェクトOFF //////////////////////////////////////////////////////////////// if (tapeffect.Effecttype == EFFECT_TYPE.HOLD) { SpriteRenderHE2D.enabled = false; // ホールドエフェクトOFF tapeffect.EffectStatusReset(); // ステータスリセット } } }
void TouchZoom() { if (TOUCH_STATE.NONE == DragState) { StartDist = Vector2.Distance(Input.touches[0].position, Input.touches[1].position); DragState = TOUCH_STATE.DRAG; FirstZoom = true; } else { if (FirstZoom) { FirstZoom = false; return; } float dist = Vector2.Distance(Input.touches[0].position, Input.touches[1].position); float offset = dist - StartDist; if (Mathf.Abs(offset) > 100) { offset *= 0.01f; } StartDist = dist; ZoomValue = offset * 0.1f; } }
bool DragCamera(POINTER_INFO ptr) { if (Input.touchCount > 1) { return(false); } Vector3 worldPos = Vector3.zero; if (!CalcluateGroundPos(ptr.ray, ref worldPos, "Water")) { return(false); } switch (ptr.evt) { case POINTER_INFO.INPUT_EVENT.PRESS: ClickWorldPos = worldPos; break; case POINTER_INFO.INPUT_EVENT.DRAG: if (DragState == TOUCH_STATE.DRAG) { ClickWorldPos = worldPos; DragState = TOUCH_STATE.NONE; break; } worldPos.y = ClickWorldPos.y; DragWorldPos = worldPos; if (!ReversAction) { DragMovement = ClickWorldPos - DragWorldPos; } else { ClickWorldPos += (DragWorldPos - ClickWorldPos) * 2f; } break; } return(true); }
//-------------------------------------------------------------------------- // タップ状況の更新 //-------------------------------------------------------------------------- private void UpdateTapState() { //---------------------------------------------------------------------- // カウンタが一定数を超えた場合の処理 //---------------------------------------------------------------------- if (TouchState == TOUCH_STATE.NONE && nStateCheckCounter >= TapDiscriminationFrame) { //// タップ状況を「ホールド」に変更 //////////////////////////////////////////////////////////////////// TouchState = TOUCH_STATE.HOLD; //// コントローラ表示フラグをTRUE、エフェクト生成 //////////////////////////////////////////////////////////////////// VisiblePunipuniController = true; tapeffect.EffectFlug = true; // エフェクト更新フラグON tapeffect.SetEffectType(EFFECT_TYPE.HOLD); // エフェクトタイプセット SpriteRenderHE2D.enabled = true; } //---------------------------------------------------------------------- // タップ状態が(HOLD)の時の位置情報送信処理 //---------------------------------------------------------------------- if (tapeffect.EffectFlug == true && tapeffect.Effecttype == EFFECT_TYPE.HOLD && VisiblePunipuniController == true) { tapeffect.EffectPos = TargetCamera.ScreenToWorldPoint(new Vector3(Scr_ControllerManager.tTouchInfo.position.x, Scr_ControllerManager.tTouchInfo.position.y, 1.0f)); } //---------------------------------------------------------------------- // カウントフラグがTRUEの場合の処理 //---------------------------------------------------------------------- if (TouchState == TOUCH_STATE.NONE && bStateCountFlug) { //// カウンタを加算 //////////////////////////////////////////////////////////////////// nStateCheckCounter++; } }
void enter(TOUCH_STATE state) { VoiceMgr vm = VoiceMgr.GetInstance(); Debug.Log("enter " + state); switch (state) { case TOUCH_STATE.START: vm.prepare("record.amr"); lastTouchTime = Time.time; voice.SetActive(true); mic.SetActive(true); volume.SetActive(true); cancel.SetActive(false); warning.SetActive(false); time.transform.localScale = new Vector2(0, 1); notice.text = "滑动手指,取消发送"; break; case TOUCH_STATE.MOVE_OUT: if (lastTouchTime > 0) { mic.SetActive(false); volume.SetActive(false); cancel.SetActive(true); warning.SetActive(false); notice.text = "松开手指,取消发送"; } break; case TOUCH_STATE.MOVE_IN: if (lastTouchTime > 0) { mic.SetActive(true); volume.SetActive(true); cancel.SetActive(false); warning.SetActive(false); notice.text = "滑动手指,取消发送"; } break; case TOUCH_STATE.CANCEL: if (lastTouchTime > 0) { vm.cancel(); lastTouchTime = 0; voice.SetActive(false); } break; case TOUCH_STATE.END: if (lastTouchTime > 0) { if (Time.time - lastTouchTime < 1.0f) { vm.cancel(); voice.SetActive(true); mic.SetActive(false); volume.SetActive(false); cancel.SetActive(false); warning.SetActive(true); time.transform.localScale = new Vector2(0, 1); notice.text = "录制时间太短"; PUtils.setTimeout(() => { voice.SetActive(false); }, 1.0f); } else { onVoiceOK(); } lastTouchTime = 0; } break; default: break; } }
//-------------------------------------------------------------------------- // ベジェ曲線とぷニコンメッシュのリセット //-------------------------------------------------------------------------- void ResetPuniMeshAndBezier() { //// PC or スマホ タッチ判定分岐処理 //////////////////////////////////////////////////////////////////// Vector3 screenPos = Vector3.zero; // タップ座標 screenPos = Input.mousePosition; // 座標取得 //// 初期位置(始点)&現在位置(終点)設定 //////////////////////////////////////////////////////////////////// this.BeginMousePosition = TargetCamera.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, 1.0f)); transform.position = TargetCamera.ScreenToWorldPoint(new Vector3(screenPos.x, screenPos.y, 1.0f)); //// ベジェ曲線パラメータ設定 //////////////////////////////////////////////////////////////////// var x = 0; var y = 0; BezierC.P1 = new Vector2(x, y); // 中心 BezierC.P2 = new Vector2(x, y); // 制御点1 BezierC.P3 = new Vector2(x, y); // 制御点2 BezierC.P4 = new Vector2(x, y); // 終点 BezierL.P1 = new Vector2(x, y); // 中心 BezierL.P2 = new Vector2(x, y); // 制御点1 BezierL.P3 = new Vector2(x, y); // 制御点2 BezierL.P4 = new Vector2(x, y); // 終点 BezierR.P1 = new Vector2(x, y); // 中心 BezierR.P2 = new Vector2(x, y); // 制御点1 BezierR.P3 = new Vector2(x, y); // 制御点2 BezierR.P4 = new Vector2(x, y); // 終点 //// ベジェ曲線の情報を更新 //////////////////////////////////////////////////////////////////////// UpdateBezierParameter(-x, -y); //// メッシュ情報の更新 //////////////////////////////////////////////////////////////////////// PuniMesh.Vertexes = TransformFromBezier(new Vector3()); //// メッシュ情報確定 //////////////////////////////////////////////////////////////////////// var centerPos = BezierC.GetPosition(0.8f); PuniMesh.CenterPoint = centerPos; //// タップ状況を"NONE"にする。 //////////////////////////////////////////////////////////////////////// TouchState = TOUCH_STATE.NONE; //// カウンタリセット //////////////////////////////////////////////////////////////// nStateCheckCounter = 0; //// タップ状況判別カウントフラグをfalseに //////////////////////////////////////////////////////////////////// bStateCountFlug = false; //// コントローラ表示フラグfalse //////////////////////////////////////////////////////////////////// VisiblePunipuniController = false; }