回答編集履歴

1

スクリプトが作れたので再編集しました。

2023/11/16 03:12

投稿

gere
gere

スコア1

test CHANGED
@@ -1 +1,77 @@
1
1
  自分にはレベルが高すぎました。参考元のスクリプトを紐解いて自分なりのスクリプトを書くことにしました。お騒がせしました。
2
+ ```
3
+ using System;
4
+ using UnityEngine;
5
+ using System.Collections.Generic;
6
+
7
+ namespace LogitechSDK
8
+ {
9
+ [RequireComponent(typeof(CarControllerOriginal))]
10
+ public class CarUserControlOriginal : MonoBehaviour
11
+ {
12
+ private CarControllerOriginal m_Car; // the car controller we want to use
13
+
14
+ public List<LogitechSDK.WheelInfo> wheelInfos; // 個々の車軸の情報
15
+ public float maxMotorTorque; //ホイールに適用可能な最大トルク
16
+ public float maxSteeringAngle; // 適用可能な最大ハンドル角度
17
+ public float maxBrake; // ブレーキの力
18
+
19
+ private void Awake()
20
+ {
21
+ m_Car = GetComponent<CarControllerOriginal>();
22
+ Debug.Log("SteeringInit:" + LogitechGSDK.LogiSteeringInitialize(false));
23
+ }
24
+
25
+ private void FixedUpdate()
26
+ {
27
+ if (!LogitechGSDK.LogiIsPlaying(0, LogitechGSDK.LOGI_FORCE_SPRING))
28
+ {
29
+ // ハンドルに中心に向けた力を加えるように設定
30
+ LogitechGSDK.LogiPlaySpringForce(0, 0, 30, 100);
31
+ }
32
+ if (LogitechGSDK.LogiUpdate() && LogitechGSDK.LogiIsConnected(0))
33
+ {
34
+ //CONTROLLER STATE
35
+ LogitechGSDK.DIJOYSTATE2ENGINES rec = LogitechGSDK.LogiGetStateUnity(0);
36
+ float steering = rec.lX / 32768f; // ハンドル
37
+ float accel = rec.lY / -65536f + 0.5f; // アクセル
38
+ float brake = rec.lRz / -65536f + 0.5f; // ブレーキ
39
+ float back = rec.rglSlider[0] / 65536f + 0.5f; // バック
40
+
41
+ float motor = maxMotorTorque * accel; //推進力
42
+ float brakepower = maxBrake * brake; //止める力
43
+ float StAngle = maxSteeringAngle * steering; //曲がる角度
44
+ foreach (WheelInfo wheelInfo in wheelInfos)
45
+ {
46
+ if (wheelInfo.steering)
47
+ {
48
+ wheelInfo.LWheel.steerAngle = StAngle;
49
+ wheelInfo.RWheel.steerAngle = StAngle;
50
+ }
51
+ if (wheelInfo.drive)
52
+ {
53
+ if (motor > 1f) brakepower = 0;
54
+ if (brakepower > 1f) motor = 0;
55
+ wheelInfo.LWheel.motorTorque = motor;
56
+ wheelInfo.RWheel.motorTorque = motor;
57
+ wheelInfo.LWheel.brakeTorque = brakepower;
58
+ wheelInfo.RWheel.brakeTorque = brakepower;
59
+ Debug.Log(motor);
60
+ }
61
+ }
62
+ }
63
+ }
64
+ }
65
+
66
+ [System.Serializable]
67
+ public class WheelInfo
68
+ {
69
+ public WheelCollider LWheel;
70
+ public WheelCollider RWheel;
71
+ public bool drive; //このホイールがエンジンにアタッチされているかどうか
72
+ public bool steering; // このホイールがハンドルの角度を反映しているかどうか
73
+ }
74
+ }
75
+ ```
76
+ 後述:ハンコンの入力を受け取って車を動かせました。バックはまだ出来ませんが。。。
77
+ 簡易的なものですが、同じような状況の方へ参考になればと思ったのでスクリプトを公開します。これをWheelCollider、Rigidbodyの付いた車にアタッチすれば動きます。インスペクター画面のWheel Infosの数値を2に設定してください。