// Update is called once per frame void FixedUpdate() { //================================================================================================================== // MOUSE DEBUG if (!touchPlay && game) { if (Input.GetMouseButtonDown(0)) { Vector3 mouse = Camera.main.ScreenToWorldPoint(new Vector3(Input.mousePosition.x, Input.mousePosition.y, 0)); hitPolygon_info.transform.position = new Vector3(mouse.x, mouse.y, 2.42f); //hitPolygon_info.transform.rotation = pusherL_info.transform.rotation; hitPolygon_info.SetActive(true); } if (hitPolygon_info.gameObject.activeSelf && DestroyFruitNow) { hitObj hitObj = hitPolygon_info.GetComponent <hitObj>(); scoreManager.GetComponent <scoreManager>().GetList(hitObj); // 当たり判定オブジェから int goodType = scoreManager.GetComponent <scoreManager>().getParticleType(); for (int i = 0; i < hitObj.FruitsList.Count; i++) { //パーティクルの色指定 int particleColor = hitObj.FruitsList[i].GetComponent <fruitStatus>().m_type; if (goodType == 0) { particleObj[particleColor].GetComponent <ParticleSystem>().maxParticles = particleBad; sources[1].Stop(); // 移動SE sources[3].Play(); // バッドSE } else if (goodType == 1) { particleObj[particleColor].GetComponent <ParticleSystem>().maxParticles = particleOk; } else if (goodType == 2) { particleObj[particleColor].GetComponent <ParticleSystem>().maxParticles = particleGood; } else if (goodType == 3) { particleObj[particleColor].GetComponent <ParticleSystem>().maxParticles = particlePerfect; sources[1].Stop(); // 移動SE sources[4].Play(); // パーフェクトSE } //パーティクル生成 Instantiate(particleObj[particleColor], new Vector3(hitObj.FruitsList[i].transform.position.x, hitObj.FruitsList[i].transform.position.y, -2), Quaternion.identity); DestroyImmediate(hitObj.FruitsList[i]); sound = true; } if (sound == true) { // 果物の消去音声 sources[2].Play(); } //=============== hitObj.FruitsList.Clear(); // 当たり判定用のオブジェクトを消去する hitPolygon_info.SetActive(false); DestroyFruitNow = false; } } // MOUSE DEBUG END //================================================================================================================== //================================================================================================================== // TOUCH else if (game) { // 指のタッチ数取得 int touchCount = Input.touches.Count(t => t.phase != TouchPhase.Ended && t.phase != TouchPhase.Canceled); if (touchCount == 1 && OneFingerPress == false) { fingerCnt++; OneFingerPress = true; } else { OneFingerPress = false; } if (fingerCnt >= 8 && fingerPlay == false) { fingerPlay = true; fingerCnt = 0; } // 二本の指でタッチし、プッシャーまだ作成されてない場合 if (touchCount >= 2 && pusherR_info == null && pusherL_info == null) { if (fingerPlay == false) { fingerCnt = 0; } // 指の座標を取得 Vector3 touchA = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position); Vector3 touchB = Camera.main.ScreenToWorldPoint(Input.GetTouch(1).position); Vector3 makeLeft = touchA + Vector3.Normalize(touchB - touchA) * 0.6f; Vector3 makeRight = touchB + Vector3.Normalize(touchA - touchB) * 0.6f; // 指の下でプッシャーを作成する pusherL_info = Instantiate(pusherR, new Vector3(makeLeft.x, makeLeft.y, 0.0f), Quaternion.identity); pusherR_info = Instantiate(pusherL, new Vector3(makeRight.x, makeRight.y, 0.0f), Quaternion.identity); // プッシャーの相対位置による角度を確定する angle_L = Vector3.Angle(pusherR_info.transform.position - pusherL_info.transform.position, new Vector3(0, 1, 0)); angle_R = Vector3.Angle(pusherL_info.transform.position - pusherR_info.transform.position, new Vector3(0, 1, 0)); if (pusherL_info.transform.position.x > pusherR_info.transform.position.x) { pusherL_info.transform.localEulerAngles = new Vector3(0, 0, -angle_R); pusherR_info.transform.localEulerAngles = new Vector3(0, 0, angle_L); } else { pusherL_info.transform.localEulerAngles = new Vector3(0, 0, angle_R); pusherR_info.transform.localEulerAngles = new Vector3(0, 0, -angle_L); } } // 指が押されてないかつプッシャーが存在する場合、プッシャーと当たり判定オブジェクトを削除する else if (touchCount < 2) { Destroy(pusherL_info); Destroy(pusherR_info); hitPolygon_info.SetActive(false); // 指の状態を更新する fingerRelease = true; } // 二本の指でタッチし続け、プッシャーも存在している場合 if (touchCount >= 2 && pusherR_info != null && pusherL_info != null) { // プッシャーの座標と指の位置を同期する Vector3 touchA = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position); Vector3 touchB = Camera.main.ScreenToWorldPoint(Input.GetTouch(1).position); Vector3 makeLeft = touchA + Vector3.Normalize(touchB - touchA) * 0.6f; Vector3 makeRight = touchB + Vector3.Normalize(touchA - touchB) * 0.6f; pusherL_info.transform.position = new Vector3(makeLeft.x, makeLeft.y, pusherL_info.transform.position.z); pusherR_info.transform.position = new Vector3(makeRight.x, makeRight.y, pusherR_info.transform.position.z); // 角度を常に対面するように計算 angle_L = Vector3.Angle(pusherR_info.transform.position - pusherL_info.transform.position, new Vector3(0, 1, 0)); angle_R = Vector3.Angle(pusherL_info.transform.position - pusherR_info.transform.position, new Vector3(0, 1, 0)); if (pusherL_info.transform.position.x > pusherR_info.transform.position.x) { pusherL_info.transform.localEulerAngles = new Vector3(0, 0, -angle_R); pusherR_info.transform.localEulerAngles = new Vector3(0, 0, angle_L); } else { pusherL_info.transform.localEulerAngles = new Vector3(0, 0, angle_R); pusherR_info.transform.localEulerAngles = new Vector3(0, 0, -angle_L); } // プッシャー間の距離を取る Vector3 Apos = pusherL_info.transform.position; Vector3 Bpos = pusherR_info.transform.position; float dis = Vector3.Distance(Apos, Bpos); // 移動音 sources[1].Play(); // 移動SE //=============== // プッシャーの作成最初は果物の外から挿入するようにZ軸移動 if (pusherR_info.transform.position.z < 2.4f && dis > pusherDistance) { pusherL_info.transform.position += new Vector3(0, 0, pushSpeed); pusherR_info.transform.position += new Vector3(0, 0, pushSpeed); fingerRelease = true; } // 果物に挿入したら状態を更新しながら当たり判定などの処理を行う else { // 距離が一定範囲内で、当たり判定用のオブジェクトまだ存在しない場合、作成する if (dis < pusherDistance && pusherR_info.transform.position.z >= 2.4f && !hitPolygon_info.gameObject.activeSelf && fingerRelease == true) { // 当たり判定用のオブジェクトの座標は二つのプッシャーの真ん中、角度はプッシャーと一致する Vector3 c; c.x = (pusherL_info.transform.position.x + pusherR_info.transform.position.x) / 2; c.y = (pusherL_info.transform.position.y + pusherR_info.transform.position.y) / 2; c.z = (pusherL_info.transform.position.z + pusherR_info.transform.position.z) / 2; hitPolygon_info.transform.position = new Vector3(c.x, c.y, c.z); hitPolygon_info.transform.rotation = pusherL_info.transform.rotation; hitPolygon_info.SetActive(true); // 当たり判定が一回しか発生しないように、指の状態を強制更新する // 指が離れたら次回タッチする時、当たり判定が発生できる fingerRelease = false; } if (hitPolygon_info.gameObject.activeSelf && DestroyFruitNow) { hitObj hitObj = hitPolygon_info.GetComponent <hitObj>(); scoreManager.GetComponent <scoreManager>().GetList(hitObj); // 当たり判定オブジェから int goodType = scoreManager.GetComponent <scoreManager>().getParticleType(); for (int i = 0; i < hitObj.FruitsList.Count; i++) { //パーティクルの色指定 int particleColor = hitObj.FruitsList[i].GetComponent <fruitStatus>().m_type; if (goodType == 0) { particleObj[particleColor].GetComponent <ParticleSystem>().maxParticles = particleBad; sources[1].Stop(); // 移動SE sources[3].Play(); // バッドSE } else if (goodType == 1) { particleObj[particleColor].GetComponent <ParticleSystem>().maxParticles = particleOk; } else if (goodType == 2) { particleObj[particleColor].GetComponent <ParticleSystem>().maxParticles = particleGood; } else if (goodType == 3) { particleObj[particleColor].GetComponent <ParticleSystem>().maxParticles = particlePerfect; sources[1].Stop(); // 移動SE sources[4].Play(); // パーフェクトSE } //パーティクル生成 Instantiate(particleObj[particleColor], new Vector3(hitObj.FruitsList[i].transform.position.x, hitObj.FruitsList[i].transform.position.y, -2), Quaternion.identity); DestroyImmediate(hitObj.FruitsList[i]); sound = true; } if (sound == true) { // 果物の消去音声 sources[1].Stop(); // 移動SE sources[2].Play(); } //=============== hitObj.FruitsList.Clear(); // 当たり判定用のオブジェクトを消去する hitPolygon_info.SetActive(false); DestroyFruitNow = false; } } } } // TOUCH END //================================================================================================================== if (fingerPlay) { if (cntFrameFinger == 0) { touchA.SetActive(true); touchB.SetActive(true); } if (cntFrameFinger >= start) { touchA.GetComponent <Transform>().position -= new Vector3(0, moveSpeed, 0); touchB.GetComponent <Transform>().position += new Vector3(0, moveSpeed, 0); } if (cntFrameFinger >= distance + start) { touchA.SetActive(false); touchB.SetActive(false); touchA.GetComponent <Transform>().position = oldA; touchB.GetComponent <Transform>().position = oldB; cntFrameFinger = 0; fingerPlay = false; } else { cntFrameFinger++; } } }
public void GetList(hitObj hitObj) { // 挟んだ果物の数量を計算 for (int i = 0; i < hitObj.FruitsList.Count; i++) { if (hitObj.FruitsList[i].GetComponent <fruitStatus>().m_type == scoreType) { int cntSameData = cntSame; if (cntSameData > 4) { cntSameData = 4; } plus.GetComponent <SpriteRenderer>().sprite = plustexture[cntSameData]; GameObject temp = Instantiate(plus, new Vector3(hitObj.FruitsList[i].transform.position.x, hitObj.FruitsList[i].transform.position.y, -3), Quaternion.identity); temp.GetComponent <SpriteRenderer>().sortingOrder = 141; cntSame++; //if (cntSame > 4) //{ // cntSame = 4; //} } else { cntDiff++; if (cntDiff > 4) { cntDiff = 4; } diffPos = new Vector3(hitObj.FruitsList[i].transform.position.x, hitObj.FruitsList[i].transform.position.y, -3); } if (cntSame == hitObj.FruitsList.Count) { if (hitObj.FruitsList.Count >= 3) { perfectObj.GetComponent <SpriteRenderer>().sprite = perfectTex[3]; GameObject temp2 = Instantiate(perfectObj, new Vector3(hitObj.FruitsList[0].transform.position.x, hitObj.FruitsList[0].transform.position.y, -3), Quaternion.identity); temp2.GetComponent <SpriteRenderer>().sortingOrder = 142; temp2.GetComponent <goodKill>().type = 3; goodType = 3; timer.setTime(1 * 60); Instantiate(timerPlus, timerPos, Quaternion.identity); Instantiate(timer1, new Vector3(timerPos.x + timerSpace, timerPos.y, timerPos.z), Quaternion.identity); } else { perfectObj.GetComponent <SpriteRenderer>().sprite = perfectTex[2]; GameObject temp2 = Instantiate(perfectObj, new Vector3(hitObj.FruitsList[0].transform.position.x, hitObj.FruitsList[0].transform.position.y, -3), Quaternion.identity); temp2.GetComponent <SpriteRenderer>().sortingOrder = 142; temp2.GetComponent <goodKill>().type = 2; goodType = 2; } } } //if (cntSame == hitObj.FruitsList.Count) //{ // perfectObj.GetComponent<SpriteRenderer>().sprite = perfectTex[2]; // Instantiate(perfectObj, new Vector3(hitObj.FruitsList[0].transform.position.x, hitObj.FruitsList[0].transform.position.y, -3), Quaternion.identity); //} //else if (cntSame == 0) //{ // perfectObj.GetComponent<SpriteRenderer>().sprite = perfectTex[0]; // Instantiate(perfectObj, new Vector3(hitObj.FruitsList[0].transform.position.x, hitObj.FruitsList[0].transform.position.y, -3), Quaternion.identity); //} //else //{ // perfectObj.GetComponent<SpriteRenderer>().sprite = perfectTex[1]; // Instantiate(perfectObj, new Vector3(hitObj.FruitsList[0].transform.position.x, hitObj.FruitsList[0].transform.position.y, -3), Quaternion.identity); //} if (cntSame == 0) { minus.GetComponent <SpriteRenderer>().sprite = minustexture[0]; GameObject temp = Instantiate(minus, diffPos, Quaternion.identity); temp.GetComponent <SpriteRenderer>().sortingOrder = 140; perfectObj.GetComponent <SpriteRenderer>().sprite = perfectTex[0]; GameObject temp2 = Instantiate(perfectObj, diffPos, Quaternion.identity); temp2.GetComponent <SpriteRenderer>().sortingOrder = 142; temp2.GetComponent <goodKill>().type = 0; goodType = 0; timer.setTime(-2 * 60); Instantiate(timerMinus, timerPos, Quaternion.identity); Instantiate(timer2, new Vector3(timerPos.x + timerSpace, timerPos.y, timerPos.z), Quaternion.identity); } else if (cntSame != hitObj.FruitsList.Count) { minus.GetComponent <SpriteRenderer>().sprite = minustexture[cntDiff]; GameObject temp = Instantiate(minus, diffPos, Quaternion.identity); temp.GetComponent <SpriteRenderer>().sortingOrder = 140; float percent = (float)cntSame / (float)hitObj.FruitsList.Count * 100; //Debug.Log(cntSame + "/" + hitObj.FruitsList.Count + "=" + percent); if ((int)percent >= 1 && (int)percent <= 50) { perfectObj.GetComponent <SpriteRenderer>().sprite = perfectTex[1]; GameObject temp2 = Instantiate(perfectObj, diffPos, Quaternion.identity); temp2.GetComponent <SpriteRenderer>().sortingOrder = 142; temp2.GetComponent <goodKill>().type = 1; goodType = 1; } else if ((int)percent >= 51 && (int)percent <= 99) { perfectObj.GetComponent <SpriteRenderer>().sprite = perfectTex[2]; GameObject temp2 = Instantiate(perfectObj, diffPos, Quaternion.identity); temp2.GetComponent <SpriteRenderer>().sortingOrder = 142; temp2.GetComponent <goodKill>().type = 2; goodType = 2; } } // 得点を計算 for (int i = 1; i < cntSame + 1; i++) { scoreOnce += i * 10; } scoreOnce *= (1.0f - ((float)cntDiff * 0.1f)); //Debug.Log("->" + scoreOnce); score += (int)scoreOnce; //スコア設定 result.SetScore(score); // 状態をリセット scoreOnce = 0; cntDiff = 0; cntSame = 0; juiceManager.setPoint(hitObj.FruitsList.Count); //GameObject target = GameObject.Find("fruitTag(Clone)"); GameObject target = GameObject.Find("targetObj(Clone)"); targetData targetDataCS = target.GetComponent <targetData>(); for (int i = 0; i < hitObj.FruitsList.Count; i++) { targetDataCS.setJuiceType(hitObj.FruitsList[i].GetComponent <fruitStatus>().m_type); } // // ボーナス得点計算 // // 通常得点計算 // if (!calcScoreNormal) // { // int[] fruitResult = new int[5]; // for (int i = 0; i < hitObj.FruitsList.Count; i++) // { // fruitResult[hitObj.FruitsList[i].GetComponent<fruitStatus>().m_type]++; // } // Debug.Log(fruitResult[0] + "||" + fruitResult[1] + "||" + fruitResult[2] + "||" + fruitResult[3] + "||" + fruitResult[4]); // } }