Exemple #1
0
    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();
        });
    }
Exemple #2
0
    /// <summary>壁に衝突したときの方向修正補助処理</summary>
    public void FixDirection(float accel, float steer)
    {
        RaycastHit hitInfo;
        bool       hit = mFixRay.ForwardBoxCast(out hitInfo);

        if (!hit)
        {
            return;
        }
        if (accel < 0.2f)
        {
            return;
        }
        //衝突している場合
        mTransform.Rotate(0.0f, 0.9f * steer, 0.0f);
    }