質問編集履歴
5
era-date (
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
|

|
4
ほえ
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
|
+

|
161
|
+
少し傾くと、こんな感じに右左右左揺れてガタガタします。
|
162
|
+
|
163
|
+
試しにWheelCollider を切ってみてもそのような挙動になってしまうので、私のコードの書き方が悪いのだと思います。
|
164
|
+
気になったことなどあったらご回答お願いします。
|
3
ほえ
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 (
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
ほえ
title
CHANGED
File without changes
|
body
CHANGED
@@ -17,9 +17,9 @@
|
|
17
17
|
これも書いてみました
|
18
18
|
```C#
|
19
19
|
|
20
|
-
|
20
|
+
Vector3 carRot = new Vector3(transform.rotation.x, transform.rotation.y, transform.rotation.z);
|
21
|
-
|
21
|
+
carRot.z = Mathf.Clamp(carRot.z, -45, 45);
|
22
|
-
|
22
|
+
transform.rotation = new Quaternion(carRot.x, carRot.y, carRot.z, transform.rotation.w);
|
23
23
|
```
|
24
24
|
これもうまくいきませんでした
|
25
25
|
次のも同じような感じです。
|