public void LiftDownEnd() // 持っているオブジェクトを強制的に下ろす使い方もできる { Debug.Log("LiftDownEnd " + LiftObj.name); // プレイヤーのモデルに同期していた回転を消去 LiftObjModel.rotation = Quaternion.identity; // 持ち上げ中オブジェクトの判定と挙動を有効化 LiftObj.GetComponent <BoxCollider>().enabled = true; LiftObj.GetComponent <MoveManager>().enabled = true; // プレイヤーと持ち上げオブジェクトを風で動かせるように変更 MoveMng.CanMoveByWind = true; LiftObjMoveMng.CanMoveByWind = true; #region // // 通常時のプレイヤー当たり判定を無効化/有効化 // standbyCol.enabled = !_liftUp; // // // 持ち上げ中のプレイヤー当たり判定有効化時に接地方向によって判定位置を移動 // if (_liftUp) { // BoxCollider liftingBoxCol = ((BoxCollider)liftingCol); // float dis = Mathf.Abs(liftingBoxCol.center.y - colCenterPoint); // // if (Pl.GetComponent<WeightManager>().WeightForce < 0.0f) { // liftingBoxCol.center = new Vector3(liftingBoxCol.center.x, colCenterPoint + dis, liftingBoxCol.center.z); //// liftingBoxCol.center = new Vector3(liftingBoxCol.center.x, stdLiftingColPoint, liftingBoxCol.center.z); // }else { // liftingBoxCol.center = new Vector3(liftingBoxCol.center.x, colCenterPoint - dis, liftingBoxCol.center.z); // // liftingBoxCol.center = new Vector3(liftingBoxCol.center.x, revLiftingColPoint, liftingBoxCol.center.z); // } // } // // 持ち上げ中のプレイヤー当たり判定を有効化/無効化 // liftingCol.enabled = _liftUp; // // // 有効な当たり判定をMoveManagerに登録 // if (standbyCol.enabled) { // MoveMng.UseCol = standbyCol; // }else { // MoveMng.UseCol = liftingCol; // } #endregion // 対象をすり抜けオブジェクトに追加 MoveMng.AddThroughCollider(LiftObj); // プレイヤー当たり判定の設定 SwitchLiftCollider(false); // 対象の水中浮上可能フラグを戻す LiftWaterStt.CanFloat = true; // 持ち上げオブジェクトをnullに LiftObj = null; #region // // オブジェクトを離す // ReleaseLiftObject(); // // 対象をすり抜けオブジェクトに追加 // MoveMng.AddThroughCollider(LiftObj.GetComponent<Collider>()); // // // 対象の水中浮上可能フラグを戻す // Debug.LogWarning("canFloat = true"); // liftWaterStt.CanFloat = true; // // // 処理後状態に // St = LiftState.standby; // afterHoldInput = true; // // // 持ち上げ中オブジェクトをnullに // Debug.LogWarning("canFloat null"); // LiftObj = null; // liftWaterStt = null; #endregion // 下ろし処理後状態に St = LiftState.standby; afterHoldInput = true; WeightMng.LiftWeightMng = null; // プレイヤーの重さ移しを可能に Pl.CanShift = true; // プレイヤーのジャンプ、振り向きを可能に Pl.CanJump = true; Pl.CanRotationTurn = true; }
void UpdateLifting() { switch (St) { case LiftState.liftUp: // 移動不可 MoveMng.StopMoveVirticalAll(); MoveMng.StopMoveHorizontalAll(); // 持ち上げ中オブジェクトを動かさない LiftObjMoveMng.StopMoveVirticalAll(); LiftObjMoveMng.StopMoveHorizontalAll(); // 持つオブジェクトの補間位置が現在のオブジェクトより高ければ bool liftMoveFlg = false; //float landVec = MoveMng.GravityForce; //WeightManager liftWeightMng = LiftObj.GetComponent<WeightManager>(); //// 水中で水に浮く重さなら上方向に接地 //if (LiftWaterStt && liftWeightMng && LiftWaterStt.IsInWater && !LiftWaterStt.IsWaterSurface && liftWeightMng.WeightLv <= WeightManager.Weight.light) { // landVec = 1.0f; //} //if (landVec < 0.0f) { // 接地方向が下 if (Pl.RotVec.y == 0.0f) { if (PlAnim.GetBoxPosition().y > LiftObj.transform.position.y) { liftMoveFlg = true; } } else // 接地方向が上 { if (PlAnim.GetBoxPosition().y < LiftObj.transform.position.y) { liftMoveFlg = true; } } // オブジェクトの位置を同期 if (liftMoveFlg) { if (heavyFailedFlg || (!MoveManager.Move(GetLiftUpBoxMove(), LiftObj.GetComponent <BoxCollider>(), liftingColMask, false, true) && (Pl.transform.position.x != LiftObj.transform.position.x))) { Debug.Log("持ち上げ失敗"); // // 持ち上げ中オブジェクトの強制押し出しフラグを戻す // LiftObjMoveMng.enabled = false; // 持ち上げ移動中フラグをfalseに LiftObjMoveMng.IsLiftUpMove = false; // 対象をすり抜けオブジェクトに追加 MoveMng.AddThroughCollider(LiftObj); // 同期できなければ下ろす St = LiftState.liftUpFailed; // 失敗アニメーションへの遷移 PlAnim.FailedCatch(); return; } // プレイヤーのモデルと同じ回転をオブジェクトに加える LiftObjModel.transform.rotation = cameraLookTransform.rotation; } // 持ち上げ完了時 if (PlAnim.CompleteCatch()) { LiftUpEnd(); // // 持ち上げ中オブジェクトの判定と挙動を無効化 // LiftObj.GetComponent<BoxCollider>().enabled = false; // LiftObj.GetComponent<MoveManager>().enabled = false; // // // 持ち上げ中のプレイヤー当たり判定を有効化 // standbyCol.enabled = false; // liftingCol.enabled = true; plAnim.ExitCatch(); // // 持ち上げ後処理状態 // St = LiftState.liftUpAfterHoldInput; } break; case LiftState.liftDown: // Debug.LogWarning(St.ToString() + " " + PlAnim.GetBoxPosition()); // 移動不可 MoveMng.StopMoveVirticalAll(); MoveMng.StopMoveHorizontalAll(); // 持ち上げ中オブジェクトを動かさない LiftObjMoveMng.StopMoveVirticalAll(); LiftObjMoveMng.StopMoveHorizontalAll(); // 回転終了待ち if (liftDownWeit) { if (Pl.CameraLookRatio == 0.0f) { liftDownWeit = false; // 持ち上げ中オブジェクトの判定を有効化 LiftObj.GetComponent <BoxCollider>().enabled = true; // 下ろしアニメーションへの遷移 PlAnim.StartRelease(); // サウンド再生 SoundManager.SPlay(liftSE, liftDownSoundDeray); } } else { // オブジェクトの位置を同期 if (!MoveManager.MoveTo(GetLiftDownBoxPosition(), LiftObj.GetComponent <BoxCollider>(), liftingColMask)) { Debug.Log("下ろし失敗"); if (Pl.RotVec.y == 1.0f) { Debug.LogWarning("下ろし失敗補正"); failedPosUpFlg = true; } LiftDownEnd(); // アニメーション遷移 PlAnim.ExitRelease(); return; } } // プレイヤーのモデルと同じ回転をオブジェクトに加える LiftObjModel.transform.rotation = cameraLookTransform.rotation; // 下ろし完了時 if (!liftDownWeit && PlAnim.CompleteRelease()) { Debug.LogWarning("下ろし完了"); // オブジェクトを離す LiftDownEnd(); // // 持ち上げ中オブジェクトの判定と挙動を有効化 // LiftObj.GetComponent<BoxCollider>().enabled = true; // LiftObj.GetComponent<MoveManager>().enabled = true; // // // 持ち上げ中のプレイヤー当たり判定を無効化 // standbyCol.enabled = true; // liftingCol.enabled = false; // // // 持ち上げ中オブジェクトを下ろし切る // MoveManager.MoveTo(liftPoint.position, LiftObj.GetComponent<BoxCollider>(), LayerMask.GetMask(new string[] { "" })); // LiftObj = null; // // // 下ろし処理後状態に // St = LiftState.standby; // afterHoldInput = true; // アニメーション遷移 PlAnim.ExitRelease(); } break; case LiftState.liftUpFailed: // 移動不可 MoveMng.StopMoveVirticalAll(); MoveMng.StopMoveHorizontalAll(); // 持ち上げ中オブジェクトを動かさない LiftObjMoveMng.StopMoveVirticalAll(); LiftObjMoveMng.StopMoveHorizontalAll(); // オブジェクトの位置を同期 if (!MoveManager.MoveTo(GetLiftDownBoxPosition(), LiftObj.GetComponent <BoxCollider>(), liftingColMask)) { Debug.Log("持ち上げ失敗に失敗"); // オブジェクトを離す LiftDownEnd(); // アニメーション遷移 PlAnim.ExitRelease(); return; } // プレイヤーのモデルと同じ回転をオブジェクトに加える LiftObjModel.transform.rotation = cameraLookTransform.rotation; // 移動不可 MoveMng.StopMoveVirticalAll(); MoveMng.StopMoveHorizontalAll(); // 持ち上げ失敗完了時 if (PlAnim.CompleteCatchFailed()) { Debug.Log("持ち上げ失敗完了"); // 持ち上げオブジェクトを離す LiftDownEnd(); // アニメーション遷移 PlAnim.ExitCatchFailed(); } break; /// 現状の仕様では下ろし失敗状態に遷移する事はない // case LiftState.liftDownFailed: // // 移動不可 // MoveMng.StopMoveVirticalAll(); // MoveMng.StopMoveHorizontalAll(); // // // オブジェクトの位置を同期 // if (!MoveManager.MoveTo(liftPoint.position, LiftObj.GetComponent<BoxCollider>(), LayerMask.GetMask(new string[] { "Stage", "Box" }))) { // Debug.Log("下ろし失敗"); // // // 同期できなければ持ち上げる // LiftUp(LiftObj); // return; // } // // // 下ろし完了時 // if (PlAnim.CompleteRelease()) { // // 持ち上げ中オブジェクトの判定と挙動を有効化 // LiftObj.GetComponent<BoxCollider>().enabled = true; // LiftObj.GetComponent<MoveManager>().enabled = true; // // // 持ち上げ中のプレイヤー当たり判定を無効化 // standbyCol.enabled = true; // liftingCol.enabled = false; // // // 持ち上げ中オブジェクトを下ろし切る // MoveManager.MoveTo(liftPoint.position, LiftObj.GetComponent<BoxCollider>(), LayerMask.GetMask(new string[] { "" })); // LiftObj = null; // } // break; case LiftState.lifting: // オブジェクトの位置を同期 // MoveManager.MoveTo(PlAnim.GetBoxPosition(), LiftObj.GetComponent<BoxCollider>(), liftingColMask); LiftObj.transform.position = PlAnim.GetBoxPosition(); // プレイヤーのモデルと同じ回転をオブジェクトに加える LiftObjModel.transform.rotation = cameraLookTransform.rotation; break; default: break; } }