質問するログイン新規登録

質問編集履歴

5

era-date (

2021/01/09 13:52

投稿

Um_kok
Um_kok

スコア39

title CHANGED
File without changes
body CHANGED
@@ -154,7 +154,7 @@
154
154
 
155
155
  }
156
156
  ```
157
- 車を走らせるのには、WheelCollider を使っております。何度かひっくり返ってしまうので、角度制限を付けて
157
+ **車を走らせるのには、WheelCollider を使っております。**何度かひっくり返ってしまうので、角度制限を付けて
158
158
  ひっくり返らないようにしたいです。お願いします。
159
159
 
160
160
  ![イメージ説明](d0af2a48a95aafb3796d9ad255a402b2.png)

4

ほえ

2021/01/09 13:52

投稿

Um_kok
Um_kok

スコア39

title CHANGED
File without changes
body CHANGED
@@ -43,4 +43,122 @@
43
43
 
44
44
  ```
45
45
  これでもうまくいきません。どこが間違っていますか?
46
- 少しでも傾くとそこからがたがたしてしまいます。
46
+ 少しでも傾くとそこからがたがたしてしまいます。
47
+
48
+
49
+ ### 追記です コードと画像です
50
+ ```C#
51
+ using System.Collections;
52
+ using System.Collections.Generic;
53
+ using UnityEngine;
54
+
55
+ [System.Serializable]
56
+ public class AxleInfo
57
+ {
58
+ // 力を加えるCollider
59
+ public WheelCollider leftWheel;
60
+ public WheelCollider rightWheel;
61
+
62
+ public bool motor; // このホイールがエンジンにアタッチされているかどうか
63
+ public bool steering; // このホイールがハンドルの角度を反映しているかどうか
64
+ }
65
+
66
+ public class PlayerCar : MonoBehaviour
67
+ {
68
+ // AxleInfo クラスをインスペクタで設定できる
69
+ [SerializeField] private List<AxleInfo> axleInfos; // 個々の車軸の情報
70
+ [SerializeField] private float maxMotorTorque; // ホイールに適用可能な最大トルク
71
+ [SerializeField] private float maxSteerinAngle; // 適用可能最大ハンドル角度
72
+
73
+ // 空オブジェクト(Wheel Collider)
74
+ [SerializeField] private WheelCollider wheelFL;
75
+ [SerializeField] private WheelCollider wheelFR;
76
+ [SerializeField] private WheelCollider wheelBL;
77
+ [SerializeField] private WheelCollider wheelBR;
78
+
79
+ // ホイールのモデル
80
+ [SerializeField] private Transform wheelFLTrans;
81
+ [SerializeField] private Transform wheelFRTrans;
82
+ [SerializeField] private Transform wheelBLTrans;
83
+ [SerializeField] private Transform wheelBRTrans;
84
+ [SerializeField] private float steering = 0.0f;
85
+ public float motor = 0.0f;
86
+
87
+ // インスペクターで設定
88
+ [SerializeField,Header("スリップ値")] private float wheelExtremumSlip;
89
+ [SerializeField,Header("タイヤそのものの摩擦力")] private float wheelstiffness;
90
+ [SerializeField,Header("x軸摩擦力")] private float wheelFriction;
91
+
92
+ // Wheel Collider の値を保持するための変数
93
+ private WheelFrictionCurve wheelValueRetentionFL;
94
+ private WheelFrictionCurve wheelValueRetentionFR;
95
+ private WheelFrictionCurve wheelValueRetentionBL;
96
+ private WheelFrictionCurve wheelValueRetentionBR;
97
+
98
+ // 変更する値
99
+ private WheelFrictionCurve wheelChangeValue;
100
+
101
+
102
+
103
+ private new Rigidbody rigidbody; // AddForce に使う
104
+ [SerializeField] private float limitSpeed; // 速度制限
105
+
106
+
107
+
108
+ void Start()
109
+ {
110
+ // キャッシュしておく
111
+ rigidbody = GetComponent<Rigidbody>();
112
+
113
+ // Wheel Collider の 横移動の値を保存しておく
114
+ wheelValueRetentionFL = wheelFL.sidewaysFriction;
115
+ wheelValueRetentionFR = wheelFR.sidewaysFriction;
116
+ wheelValueRetentionBL = wheelBL.sidewaysFriction;
117
+ wheelValueRetentionBR = wheelBR.sidewaysFriction;
118
+ }
119
+
120
+ public void FixedUpdate()
121
+ {
122
+
123
+
124
+
125
+ float eulerAngleZ = transform.eulerAngles.z;
126
+ var min = -45;
127
+ var max = 45;
128
+
129
+ var a = eulerAngleZ;
130
+ a = Mathf.Clamp(eulerAngleZ, min, max);
131
+
132
+
133
+ transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, a);
134
+
135
+
136
+
137
+
138
+ //var min = -20;
139
+ //var max = 20;
140
+ //var transformEuler = transform.eulerAngles.z;
141
+
142
+ //Vector3 carRot = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);
143
+ //if(carRot.z > min && carRot.z < max) {
144
+ // carRot.z = transformEuler;
145
+ //}
146
+ //else {
147
+
148
+ // carRot.z = 0;
149
+ //}
150
+
151
+ //Vector3 carRot = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);
152
+ //carRot.z = Mathf.Clamp(carRot.z, -45, 45);
153
+ //transform.rotation = new Quaternion(carRot.x, carRot.y, carRot.z, transform.rotation.w);
154
+
155
+ }
156
+ ```
157
+ 車を走らせるのには、WheelCollider を使っております。何度かひっくり返ってしまうので、角度制限を付けて
158
+ ひっくり返らないようにしたいです。お願いします。
159
+
160
+ ![イメージ説明](d0af2a48a95aafb3796d9ad255a402b2.png)
161
+ 少し傾くと、こんな感じに右左右左揺れてガタガタします。
162
+
163
+ 試しにWheelCollider を切ってみてもそのような挙動になってしまうので、私のコードの書き方が悪いのだと思います。
164
+ 気になったことなどあったらご回答お願いします。

3

ほえ

2021/01/09 13:49

投稿

Um_kok
Um_kok

スコア39

title CHANGED
File without changes
body CHANGED
@@ -42,4 +42,5 @@
42
42
 
43
43
 
44
44
  ```
45
- これでもうまくいきません。どこが間違っていますか?
45
+ これでもうまくいきません。どこが間違っていますか?
46
+ 少しでも傾くとそこからがたがたしてしまいます。

2

era-NullReferenceException: Object reference not set to an instance of an object PlayerMove.Update (

2021/01/09 07:35

投稿

Um_kok
Um_kok

スコア39

title CHANGED
File without changes
body CHANGED
@@ -24,4 +24,22 @@
24
24
  これもうまくいきませんでした
25
25
  次のも同じような感じです。
26
26
  調べて書いてみたのですが、難しかったので、質問させてもらいました。
27
- やり方を教えてくださる方、ご教示お願いします。
27
+ やり方を教えてくださる方、ご教示お願いします。
28
+
29
+
30
+
31
+ ### 回答見ました。こうでしょうか?
32
+ ```C#
33
+ float eulerAngleZ = transform.eulerAngles.z;
34
+ var min = -45;
35
+ var max = 45;
36
+
37
+ var a = eulerAngleZ;
38
+ a = Mathf.Clamp(eulerAngleZ, min, max);
39
+
40
+
41
+ transform.eulerAngles = new Vector3(transform.eulerAngles.x, transform.eulerAngles.y, a);
42
+
43
+
44
+ ```
45
+ これでもうまくいきません。どこが間違っていますか?

1

ほえ

2021/01/09 07:34

投稿

Um_kok
Um_kok

スコア39

title CHANGED
File without changes
body CHANGED
@@ -17,9 +17,9 @@
17
17
  これも書いてみました
18
18
  ```C#
19
19
 
20
- //Vector3 carRot = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);
20
+ Vector3 carRot = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);
21
- //carRot.z = Mathf.Clamp(carRot.z, -45, 45);
21
+ carRot.z = Mathf.Clamp(carRot.z, -45, 45);
22
- //transform.rotation = new Quaternion(carRot.x, carRot.y, carRot.z, transform.rotation.w);
22
+ transform.rotation = new Quaternion(carRot.x, carRot.y, carRot.z, transform.rotation.w);
23
23
  ```
24
24
  これもうまくいきませんでした
25
25
  次のも同じような感じです。