private void Start() { /*エンジンの回転から前に力を加える処理 * 車体を進行方向に向かせる処理*/ (this).FixedUpdateAsObservable() .Subscribe(_ => { if (mGameSceneManager.SceneState != SceneState.GAME) { return; } float accel = mPlayerInput.Accel.Value; float steer = mPlayerInput.Hundle.Value; float brake = mPlayerInput.Brake.Value; GearState currentGear = mPlayerInput.GetCurrentGear.Value; print("Brake : " + brake); //姿勢制御処理 mAirRide.FixBalance(mRigidbody.velocity); //進行方向修正処理 mDirFix.FixDirection(accel, steer);//傾く //ジャンプ中はブレーキとハンドルは制御させない if (!mAirRide.IsGround) { brake = 0.0f; steer = 0.0f; } RaycastHit hitInfo = new RaycastHit(); mAIPenaltyRay.ForwardBoxCast(out hitInfo); //aiと正面方向が衝突したときaccel無効にする //アクセルを切っても速度は結構生きているかも? steer = SteeringScript.IgnoreLSteer(mWallHitCheck.LHit, steer); steer = SteeringScript.IgnoreRSteer(mWallHitCheck.RHit, steer); //ペナルティ処理 mEngine.GiveWallPenalty(mWallHitCheck.LOrRHit); mEngine.GiveDriftPenalty(mVehicleMove.GetWheelState == WheelState.DRIFT, transform.forward); bool aiPenalty = (hitInfo.transform != null) && hitInfo.transform.gameObject.CompareTag(ConstString.Tag.AI); mEngine.GiveAiPenalty(aiPenalty); float engineRot = mEngine.UpdateRotateEngine(accel, brake, currentGear); steer = SteeringScript.InverseSteer(engineRot, steer); //車を動かす処理 mVehicleMove.UpdateMove(engineRot, steer, brake, mAirRide.IsGround); //データ書き込み処理 WriteToModel(engineRot, currentGear); }); this.OnCollisionStayAsObservable().Subscribe(_ => { mEngine.OnCollisionStay(); }); }
/// <summary> /// ■rigidbody:自分の車のRigidbody /// ■transform:自分の車のtrasnform /// ■wheelParams:タイヤの各状態時の滑り具合 /// </summary> /// <param name="rigidbody"></param> public VehicleMove(Rigidbody rigidbody, Transform transform, WheelParams wheelParams, VehicleSettings.DriftSettings driftSettings, VehicleSettings.SteerSensitivities steerSensitivities) { mRigidbody = rigidbody; mTransform = transform; mWheelParams = wheelParams; mSteeringScript = new SteeringScript(steerSensitivities); mDriftScript = new DriftScript(driftSettings); }