/// <summary> /// 展開中の更新処理 /// </summary> public void UnfoldUpdate(HandMaster _hand) { // 武器を展開中でないならリターン if (WeaponUnfold == false || ActiveHand == null) { return; } switch (currentState) { // プレイヤーの周囲から case CreateState.PLAYER_CIRCLE: // 回転 break; // 手の角度から case CreateState.HAND_DISPLAY: Create_Display(_hand); break; // 手の方向から case CreateState.HAND_FORWARD: Create_Forward(_hand); break; } }
/// <summary> /// 手の方向から生成 /// </summary> private void Create_Forward(HandMaster _hand) { // コントローラーの方向を取得 Vector3 controllerDir = _hand.transform.forward; // 初回生成 if (WeaponUnfold == false) { weaponState = -1; spawnObj = Instantiate(weaponList[0], spawnOriginObj_Display.transform); } else { spawnObj.transform.position = spawnOriginObj_Display.transform.position; } int angleState = 0; // 前方 if (controllerDir.z >= 0.5f) { Debug.Log("前"); angleState = 0; } // 後方 else if (controllerDir.z <= -0.5f) { Debug.Log("後ろ"); angleState = 1; } // 右方 if (controllerDir.x >= 0.5f) { Debug.Log("右"); angleState = 2; } // 左方 else if (controllerDir.x <= -0.5f) { Debug.Log("左"); angleState = 3; } if (angleState != weaponState) { weaponState = angleState; Destroy(spawnObj); spawnObj = Instantiate(weaponList[weaponState], spawnOriginObj_Display.transform.position, Quaternion.identity); } WeaponUnfold = true; }
/// <summary> /// 手の角度から武器を生成 /// </summary> private void Create_Display(HandMaster _hand) { // 武器が対応されている角度検知 float angleDiff = 180.0f / weaponList.Count; // 左コントローラーの角度検知 float controllerAngle = 0.0f; if (_hand.myTouch == OVRInput.RawButton.LHandTrigger) { controllerAngle = OVRInput.GetLocalControllerRotation(OVRInput.Controller.LTrackedRemote).z; } else if (_hand.myTouch == OVRInput.RawButton.RHandTrigger) { controllerAngle = OVRInput.GetLocalControllerRotation(OVRInput.Controller.RTrackedRemote).z; } if (WeaponUnfold == false) { spawnObj = Instantiate(weaponList[0], transform); activeHand.hasObj = spawnObj; } // コントローラーの角度を実際の角度に float angle = 180.0f * controllerAngle; int angleState = (int)angle / (int)angleDiff; if (angleState <= weaponList.Count && weaponState != angleState) { if (angleState < 0) { angleState = weaponList.Count - 1; } else if (angleState > 1) { angleState = weaponList.Count - 2; } weaponState = angleState; Destroy(spawnObj); spawnObj = Instantiate(weaponList[angleState], transform); activeHand.hasObj = spawnObj; } WeaponUnfold = true; }