前提・実現したいこと
Unityを使って、車を走らせる環境を作ろうとしています。
WheelRacingApexを使って、実際にハンドルやペダル操作で車を動かすことを目指しています。
発生している問題・エラーメッセージ
WheelRacingApexで、アクセルとブレーキの操作をペダルで行うようにしたいところで問題が発生しています。
左側のペダルでは0~1の値でアクセスを出すことが出来ています。
アクセルを01の値で出力、ブレーキを-10の値で出力するところまでやりたいです。
Monitor Componentで値を読み取っているのですが、-1~0の値を出力することが出来ません。
垂直成分の値を出せない原因がわかる方はいらっしゃいますでしょうか。
該当のソースコード
void Brakes(){ brakeVerticalInput = 0.0f; if (isInsideTheCar) { brakeVerticalInput = verticalInput; } //Freio de pé if (currentGear > 0) { currentBrakeValue = Mathf.Abs (Mathf.Clamp (brakeVerticalInput, -1.0f, 0.0f))*1.5f; } else if (currentGear < 0){ currentBrakeValue = Mathf.Abs(Mathf.Clamp(brakeVerticalInput, 0.0f, 1.0f))*1.5f; } else if (currentGear == 0) { if (mediumRPM > 0) { currentBrakeValue = Mathf.Abs (Mathf.Clamp (brakeVerticalInput, -1.0f, 0.0f))*1.5f; } else { currentBrakeValue = Mathf.Abs(Mathf.Clamp(brakeVerticalInput, 0.0f, 1.0f))*1.5f; } } // FREIO DE MÃO handBrake_Input = 0.0f; if (handBrakeTrue) { if (Mathf.Abs (brakeVerticalInput) < 0.9f) { handBrake_Input = 2; } else { handBrake_Input = 0; handBrakeTrue = false; } } else { handBrake_Input = 0; } if (Input.GetKey(controls.controls.handBrakeInput) && controls.controls.enable_handBrakeInput_Input) { handBrake_Input = 2; } handBrake_Input = handBrake_Input * 1000; //FREIO TOTAL totalFootBrake = currentBrakeValue * 0.5f * _vehicleSettings.vehicleMass; totalHandBrake = handBrake_Input * 0.5f * _vehicleSettings.vehicleMass; if (isInsideTheCar) { if (Mathf.Abs (mediumRPM) < 15 && Mathf.Abs (brakeVerticalInput) < 0.05f && !handBrakeTrue && (totalFootBrake + totalHandBrake) < 100) { brakingAuto = true; totalFootBrake = 1.5f * _vehicleSettings.vehicleMass; } else { brakingAuto = false; } } else { brakingAuto = false; } //freiar/ if (totalFootBrake > 0) { isBraking = true; } else { isBraking = false; } if (!brakingAuto) { if (isBraking && Mathf.Abs(KMh) > 1.2f) { totalFootBrake = 0; } } ApplyBrakeInWheels(_wheels.rightFrontWheel.wheelCollider, _wheels.rightFrontWheel.wheelHandBrake); ApplyBrakeInWheels(_wheels.leftFrontWheel.wheelCollider, _wheels.leftFrontWheel.wheelHandBrake); ApplyBrakeInWheels(_wheels.rightRearWheel.wheelCollider, _wheels.rightRearWheel.wheelHandBrake); ApplyBrakeInWheels(_wheels.leftRearWheel.wheelCollider, _wheels.leftRearWheel.wheelHandBrake); } void ApplyBrakeInWheels(WheelCollider wheelCollider, bool handBrake){ if (handBrake) { wheelCollider.brakeTorque = totalFootBrake + totalHandBrake; } else { wheelCollider.brakeTorque = totalFootBrake; } //evitar RPM, freio ou torques invalidos, EvitarRotacaoSemTorque if (!wheelCollider.isGrounded && Mathf.Abs (wheelCollider.rpm) > 0.5f && Mathf.Abs (verticalInput) < 0.05f && wheelCollider.motorTorque < 5.0f) { wheelCollider.brakeTorque += _vehicleSettings.vehicleMass * Time.deltaTime * 50; } if (KMh < 0.5f && Mathf.Abs (verticalInput) < 0.05f) { if (wheelCollider.rpm > (25 / wheelCollider.radius)) { wheelCollider.brakeTorque += 0.5f * _vehicleSettings.vehicleMass * Mathf.Abs (wheelCollider.rpm) * Time.deltaTime; } } }
補足情報(FW/ツールのバージョンなど)
unity 2018.3.14
Wheel Racing Apex って HORI のハンドルコントローラーですよね?
Windows で開発してるなら、[この画面](https://none53.hatenablog.com/entry/2016/07/24/_1) でそのペダル操作がコントローラーのどの操作に対応しているのか調べて、それに応じて Unity の Input Manager を設定し、Input Manager 経由で入力を検出すればよいと思います。多分 Z 軸なんじゃないかなと思いますが、実際にやってみないとわかりません。
Monitor Component という言葉が出てきますが、それが何を指すのかわかりませんでした。
ご回答ありがとうございます。
Input Managerをいじっていたペダル操作で出来るようになりました。
回答を求めているままですみませんでした。
貴重なお時間を頂きありがとうございました。
回答1件
あなたの回答
tips
プレビュー