// Use this for initialization void Start() { rigidbody = GameSystemManager.Instance.InitRigidbodyAndGameLevel(this.gameObject); startFlickStatus = new FlickStatus(this.transform.localRotation, FlickType.None); presentFlickStatus = new FlickStatus(startFlickStatus.Quater, FlickType.None); StartCoroutine(GameSystemManager.Instance.StartCountDown()); }
// Use this for initialization void Start() { rigidbody = GameSystemManager.Instance.InitRigidbodyAndGameLevel(this.gameObject); startFlickStatus = new FlickStatus(this.transform.localRotation, FlickType.None); presentFlickStatus = new FlickStatus(startFlickStatus.Quater, FlickType.None); StartCoroutine(GameSystemManager.Instance.StartCountDown()); }
/// <summary> /// ビューポートから差分のVector3を算出. ターゲットのRigidbodyに回転のトルクを与える. /// </summary> /// <returns>The rotation torque speed.</returns> /// <param name="camera">Camera.</param> /// <param name="vectorStart">Vector start.</param> /// <param name="vectorPresent">Vector present.</param> public void AddTargetGameObjectTorque(Camera camera, FlickStatus startViewportFlick, FlickStatus presentViewportFlick, Rigidbody targetRigidBody, float addSpeed = 1000) { //タップした初期の座標と現在の座標からビューボードを導き指す. Vector3 viewportVectorStart = startViewportFlick.TouchViewportVector; Vector3 viewportVectorPresent = presentViewportFlick.TouchViewportVector; //初期値と現在の座標から差分を出す. Vector3 viewportVectorDiff = viewportVectorStart - viewportVectorPresent; //xとyの座標(値)を入れ替える. float viewportDiffY = viewportVectorDiff.y; viewportVectorDiff.y = viewportVectorDiff.x; viewportVectorDiff.x = viewportDiffY; //距離と時間から指の移動速度を求める(きはじの法則). *加算速度. viewportVectorDiff.y *= (addSpeed * Time.deltaTime); targetRigidBody.AddTorque(viewportVectorDiff); }
/// <summary> /// スコアを算出するメソッド. /// </summary> /// <param name="startFlickStatus">回転を開始したFlickStatus.</param> /// <param name="presentFlickStatus">現在のFlickStatus.</param> /// <param name="presentDiffEuler">現在の差分.</param> private void AddScore(FlickStatus startFlickStatus, FlickStatus presentFlickStatus, float presentDiffEuler) { //ターゲットが逆回転したら、現在のスコアと円の値をかけて合計回転数の内容を書き換える. if (startFlickStatus.Type != presentFlickStatus.Type) { sumDiffEuler = VariableUtility.angleOf360DegreesFloat * TargetRotationCount; return; } sumDiffEuler += Mathf.Abs(presentDiffEuler); int count = Mathf.FloorToInt(sumDiffEuler) / VariableUtility.angleOf360DegreesInt; //割った値つまり回転数が現在の回転数よりも多かったら1加算する. if (count <= TargetRotationCount) { return; } TargetRotationCount++; }
/// <summary> /// ターゲットが左右のどちらかを回転しているかを確認、それに合わせてスコアの管理を行うメソッド. /// </summary> /// <param name="startFlickStatus">回転を開始した時のFlickStatus.</param> /// <param name="presentFlickStatus">現在のFlickStatus.</param> public void ConfirmationTargetRotation(ref FlickStatus startFlickStatus, ref FlickStatus presentFlickStatus, Rigidbody targetRigidbody) { //50fps前のFlickStatusを初期化 if (beforeFlickStatus == null) { Debug.Log("defore init"); beforeFlickStatus = new FlickStatus(); } //Y軸の差分を算出. float beforeEulerY = beforeFlickStatus.Quater.eulerAngles.y; float presentEulerY = presentFlickStatus.Quater.eulerAngles.y; float diffEulerY = Mathf.DeltaAngle(beforeEulerY, presentEulerY); //差分の値から見回転方向を求める(右左). presentFlickStatus.Type = SetPresentFlickType(targetRigidbody); //ターゲットが回転していないところから処理する. if (startFlickStatus.Type == FlickType.None) { startFlickStatus.Type = SetPresentFlickType(targetRigidbody); } //ターゲットの現在の回転方向が別の回転を行った時にスタートのFlickStatusを更新する. if (startFlickStatus.Type != presentFlickStatus.Type) { startFlickStatus.RenewalStatus( presentFlickStatus.Quater, presentFlickStatus.TouchViewportVector, presentFlickStatus.Type); } //スコア加算の処理. AddScore(startFlickStatus, presentFlickStatus, diffEulerY); //前のフレームのステータスを更新. beforeFlickStatus.RenewalStatus( presentFlickStatus.Quater, presentFlickStatus.TouchViewportVector, presentFlickStatus.Type); }