質問編集履歴

3

コードの修正

2021/07/21 09:12

投稿

Antlia
Antlia

スコア2

test CHANGED
File without changes
test CHANGED
@@ -22,45 +22,13 @@
22
22
 
23
23
 
24
24
 
25
- 実行時の出力結果です
26
-
27
- Debug.Log(sub_angle);
28
-
29
- 90
30
-
31
-
32
-
33
- Debug.Log(virtual_y_angle);
34
-
35
- 0 (本来の出力は180であるはず)
36
-
37
-
38
-
39
- Debug.Log(Difference);
40
-
41
- 90
42
-
43
-
44
-
45
- Debug.Log(new_angle);
46
-
47
- 0
48
-
49
-
50
-
51
- なのでvirtual_y_angle(old_angle)の値が届いていないように感じます。
52
-
53
25
  ### 該当のソースコード
54
26
 
55
27
 
56
28
 
57
29
 
58
30
 
59
- 基準となるオブジェクト
31
+ 基準
60
-
61
- GameObject
62
-
63
- Cylinder
64
32
 
65
33
  CyrinderRotation.cs
66
34
 
@@ -84,210 +52,162 @@
84
52
 
85
53
  public float old_angle = 0;
86
54
 
55
+
56
+
57
+ public string GetServoAngle()
58
+
59
+ {
60
+
61
+ var rb = GetComponent<Rigidbody>();
62
+
63
+ //gameObject.transform.localEulerAngles;//オブジェクトの回転座標取得
64
+
65
+ //return $"{ConvertPitch(transform.localEulerAngles.x)},{ConvertYaw(transform.localEulerAngles.y)}";
66
+
67
+ //transform.rigidbody.constraints = RigidbodyConstraints.FreezePosition;
68
+
69
+
70
+
71
+ old_angle = transform.localEulerAngles.y; //y方向の回転取得、この回転を基にもう一つのオブジェクトを操作
72
+
73
+ //Debug.Log(old_angle); //ログ確認
74
+
75
+
76
+
77
+ return $"{transform.localEulerAngles.y}";
78
+
79
+ }
80
+
81
+
82
+
87
83
 
88
84
 
89
85
 
90
86
 
91
-
87
+ ```
88
+
89
+
90
+
92
-
91
+ 2つ目のオブジェクト(1つめを基に回転する方)
92
+
93
+ Follow.cs
94
+
95
+ CyrinderRotate.csのGetServoAngle関数のold_amgle(変数)をvirtual_y_angleに代入して制御をしたい
96
+
97
+ Follow.csのインスペクターにScript、GameObject、CyrinderRotationが存在している
98
+
99
+ GameObjectにCylinderをアタッチ
100
+
101
+ ```
102
+
103
+
104
+
105
+ using System.Collections;
106
+
107
+ using System.Collections.Generic;
108
+
109
+ using UnityEngine;
110
+
111
+ using System;
112
+
113
+
114
+
115
+ public class Follow : MonoBehaviour
116
+
117
+ {
118
+
119
+ public GameObject GameObject;
120
+
121
+ public CyrinderRotation cyrinderRotation;
122
+
123
+ GameObject Cylinder;
124
+
125
+ CyrinderRotation script;
126
+
127
+
128
+
129
+
130
+
131
+ float virtual_y_angle = 0; //基となる円柱の角度
132
+
133
+ float sub_angle = 0; //追従する円柱の角度
134
+
135
+ float Difference = 0; //両方の角度差
136
+
137
+ float new_angle = 0; //追従する円柱に入力する角度
138
+
139
+
140
+
141
+
142
+
143
+ //追従する円柱の角度を決める関数、Start関数で動作確認しているが毎フレーム動作させたい
144
+
145
+ //public string kansuu()
146
+
93
- //float unity_y_angle = 0;
147
+ //public void kansuu()
94
-
95
-
96
-
148
+
97
- public string GetServoAngle()
149
+ //void update()
150
+
151
+ void Start()
98
152
 
99
153
  {
100
154
 
101
155
  var rb = GetComponent<Rigidbody>();
102
156
 
157
+ Cylinder = GameObject.Find("Cylinder");
158
+
159
+ script = GameObject.GetComponent<CyrinderRotation>();
160
+
103
- //gameObject.transform.localEulerAngles;//オブジェクトの回転座標取得
161
+ //script = GameObject.Cylinder.GetComponent<CyrinderRotation>();
104
-
162
+
105
- //return $"{ConvertPitch(transform.localEulerAngles.x)},{ConvertYaw(transform.localEulerAngles.y)}";
163
+ virtual_y_angle = script.old_angle; //基本となる円柱の角度(old_angle)virtual_y_angleに代入
164
+
106
-
165
+ sub_angle = transform.localEulerAngles.y;
166
+
167
+ Debug.Log(sub_angle);
168
+
169
+ Debug.Log(virtual_y_angle);
170
+
171
+ // /*
172
+
173
+ //ここで2つめの円柱に代入する角度を計算
174
+
175
+ if (sub_angle > virtual_y_angle)
176
+
177
+ {
178
+
179
+ Difference = sub_angle - virtual_y_angle;
180
+
181
+ new_angle = sub_angle - 0.2 * Difference;
182
+
107
- //transform.rigidbody.constraints = RigidbodyConstraints.FreezePosition;
183
+ transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
184
+
185
+ }
186
+
187
+
188
+
189
+ if(virtual_y_angle > sub_angle)
190
+
191
+ {
192
+
193
+ Difference = virtual_y_angle - sub_angle;
194
+
195
+ new_angle = sub_angle + 0.2 * Difference;
196
+
197
+ transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
198
+
199
+ }
108
200
 
109
201
 
110
202
 
111
- old_angle = transform.localEulerAngles.y; //y方向の回転取得、この回転を基にもう一つのオブジェクトを操作
112
-
113
- //Debug.Log(old_angle); //ログ確認用
203
+ Debug.Log(Difference);
114
-
115
-
116
-
204
+
117
- return $"{transform.localEulerAngles.y}";
205
+ Debug.Log(new_angle);
118
-
206
+
119
- }
207
+   }
120
-
121
-
122
-
123
- /*
124
-
125
- public void kakunin()
126
-
127
- {
128
-
129
- Debug.Log(old_angle);
130
-
131
- }
132
-
133
-
134
-
135
- void start()
136
-
137
- {
138
-
139
-
140
-
141
- }
142
-
143
- public void Update()
144
-
145
- {
146
-
147
-
148
-
149
- }
150
-
151
- */
152
208
 
153
209
  }
154
210
 
155
-
156
-
157
- ```
158
-
159
-
160
-
161
- 2つ目のオブジェクト(1つめを基に回転する方)
162
-
163
- GameObject
164
-
165
- Cylinder(1)
166
-
167
- Follow.cs
168
-
169
- CyrinderRotate.csのGetServoAngle関数のold_amgle(変数)をvirtual_y_angleに代入して制御をしたい
170
-
171
- Follow.csのインスペクターにScript、GameObject、CyrinderRotationが存在している
172
-
173
- GameObjectにCylinderをアタッチ
174
-
175
- ```
176
-
177
-
178
-
179
- using System.Collections;
180
-
181
- using System.Collections.Generic;
182
-
183
- using UnityEngine;
184
-
185
- using System;
186
-
187
-
188
-
189
- public class Follow : MonoBehaviour
190
-
191
- {
192
-
193
- public GameObject GameObject;
194
-
195
- public CyrinderRotation cyrinderRotation;
196
-
197
- GameObject Cylinder;
198
-
199
- CyrinderRotation script;
200
-
201
-
202
-
203
-
204
-
205
- float virtual_y_angle = 0; //基となる円柱の角度
206
-
207
- float sub_angle = 0; //追従する円柱の角度
208
-
209
- float Difference = 0; //両方の角度差
210
-
211
- float new_angle = 0; //追従する円柱に入力する角度
212
-
213
-
214
-
215
-
216
-
217
- //追従する円柱の角度を決める関数、Start関数で動作確認しているが毎フレーム動作させたい
218
-
219
- //public string kansuu()
220
-
221
- //public void kansuu()
222
-
223
- //void update()
224
-
225
- void Start()
226
-
227
- {
228
-
229
- var rb = GetComponent<Rigidbody>();
230
-
231
- Cylinder = GameObject.Find("Cylinder");
232
-
233
- script = GameObject.GetComponent<CyrinderRotation>();
234
-
235
- //script = GameObject.Cylinder.GetComponent<CyrinderRotation>();
236
-
237
- virtual_y_angle = script.old_angle; //基本となる円柱の角度(old_angle)をvirtual_y_angleに代入
238
-
239
- sub_angle = transform.localEulerAngles.y;
240
-
241
- Debug.Log(sub_angle);
242
-
243
- Debug.Log(virtual_y_angle);
244
-
245
- // /*
246
-
247
- //ここで2つめの円柱に代入する角度を計算
248
-
249
- if (sub_angle > virtual_y_angle)
250
-
251
- {
252
-
253
- Difference = sub_angle - virtual_y_angle;
254
-
255
- new_angle = sub_angle - 0.2 * Difference;
256
-
257
- transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
258
-
259
- }
260
-
261
-
262
-
263
- if(virtual_y_angle > sub_angle)
264
-
265
- {
266
-
267
- Difference = virtual_y_angle - sub_angle;
268
-
269
- new_angle = sub_angle + 0.2 * Difference;
270
-
271
- transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
272
-
273
- }
274
-
275
-
276
-
277
- Debug.Log(Difference);
278
-
279
- Debug.Log(new_angle);
280
-
281
- // */
282
-
283
- //transform.rotation = Quaternion.Euler(new Vector3(0, 250, 0));
284
-
285
- //return $"{virtual_y_angle}";
286
-
287
- }
288
-
289
- }
290
-
291
211
  ```
292
212
 
293
213
  ### 試したこと
@@ -297,5 +217,3 @@
297
217
 
298
218
 
299
219
  ### 補足情報(FW/ツールのバージョンなど)
300
-
301
- Unity2019

2

出力結果の追加

2021/07/21 09:12

投稿

Antlia
Antlia

スコア2

test CHANGED
File without changes
test CHANGED
@@ -22,7 +22,33 @@
22
22
 
23
23
 
24
24
 
25
-
25
+ 実行時の出力結果です
26
+
27
+ Debug.Log(sub_angle);
28
+
29
+ 90
30
+
31
+
32
+
33
+ Debug.Log(virtual_y_angle);
34
+
35
+ 0 (本来の出力は180であるはず)
36
+
37
+
38
+
39
+ Debug.Log(Difference);
40
+
41
+ 90
42
+
43
+
44
+
45
+ Debug.Log(new_angle);
46
+
47
+ 0
48
+
49
+
50
+
51
+ なのでvirtual_y_angle(old_angle)の値が届いていないように感じます。
26
52
 
27
53
  ### 該当のソースコード
28
54
 
@@ -212,7 +238,7 @@
212
238
 
213
239
  sub_angle = transform.localEulerAngles.y;
214
240
 
215
- //Debug.Log(sub_angle);
241
+ Debug.Log(sub_angle);
216
242
 
217
243
  Debug.Log(virtual_y_angle);
218
244
 
@@ -248,9 +274,9 @@
248
274
 
249
275
 
250
276
 
251
- //Debug.Log(control_angle);
277
+ Debug.Log(Difference);
252
-
278
+
253
- //Debug.Log(new_angle);
279
+ Debug.Log(new_angle);
254
280
 
255
281
  // */
256
282
 

1

コード内の変数名の変更

2021/07/19 12:14

投稿

Antlia
Antlia

スコア2

test CHANGED
File without changes
test CHANGED
@@ -180,7 +180,7 @@
180
180
 
181
181
  float sub_angle = 0; //追従する円柱の角度
182
182
 
183
- float control_angle = 0; //両方の角度差
183
+ float Difference = 0; //両方の角度差
184
184
 
185
185
  float new_angle = 0; //追従する円柱に入力する角度
186
186
 
@@ -224,9 +224,9 @@
224
224
 
225
225
  {
226
226
 
227
- control_angle = sub_angle - virtual_y_angle;
227
+ Difference = sub_angle - virtual_y_angle;
228
-
228
+
229
- new_angle = sub_angle - control_angle;
229
+ new_angle = sub_angle - 0.2 * Difference;
230
230
 
231
231
  transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
232
232
 
@@ -238,9 +238,9 @@
238
238
 
239
239
  {
240
240
 
241
- control_angle = virtual_y_angle - sub_angle;
241
+ Difference = virtual_y_angle - sub_angle;
242
-
242
+
243
- new_angle = sub_angle + control_angle;
243
+ new_angle = sub_angle + 0.2 * Difference;
244
244
 
245
245
  transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
246
246