質問編集履歴
3
コードの修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -10,26 +10,10 @@
|
|
10
10
|
エラーは出ていませんが変数の値を取得できていません。
|
11
11
|
現在実装しているコードを記載します。
|
12
12
|
|
13
|
-
実行時の出力結果です
|
14
|
-
Debug.Log(sub_angle);
|
15
|
-
90
|
16
|
-
|
17
|
-
Debug.Log(virtual_y_angle);
|
18
|
-
0 (本来の出力は180であるはず)
|
19
|
-
|
20
|
-
Debug.Log(Difference);
|
21
|
-
90
|
22
|
-
|
23
|
-
Debug.Log(new_angle);
|
24
|
-
0
|
25
|
-
|
26
|
-
なのでvirtual_y_angle(old_angle)の値が届いていないように感じます。
|
27
13
|
### 該当のソースコード
|
28
14
|
|
29
15
|
|
30
|
-
基準
|
16
|
+
基準
|
31
|
-
GameObject
|
32
|
-
Cylinder
|
33
17
|
CyrinderRotation.cs
|
34
18
|
|
35
19
|
```
|
@@ -41,11 +25,7 @@
|
|
41
25
|
public class CyrinderRotation : MonoBehaviour
|
42
26
|
{
|
43
27
|
public float old_angle = 0;
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
28
|
+
|
48
|
-
|
49
29
|
public string GetServoAngle()
|
50
30
|
{
|
51
31
|
var rb = GetComponent<Rigidbody>();
|
@@ -54,33 +34,16 @@
|
|
54
34
|
//transform.rigidbody.constraints = RigidbodyConstraints.FreezePosition;
|
55
35
|
|
56
36
|
old_angle = transform.localEulerAngles.y; //y方向の回転取得、この回転を基にもう一つのオブジェクトを操作
|
57
|
-
//Debug.Log(old_angle); //ログ確認
|
37
|
+
//Debug.Log(old_angle); //ログ確認
|
58
38
|
|
59
39
|
return $"{transform.localEulerAngles.y}";
|
60
40
|
}
|
61
41
|
|
62
|
-
|
42
|
+
|
63
|
-
public void kakunin()
|
64
|
-
{
|
65
|
-
Debug.Log(old_angle);
|
66
|
-
}
|
67
43
|
|
68
|
-
void start()
|
69
|
-
{
|
70
|
-
|
71
|
-
}
|
72
|
-
public void Update()
|
73
|
-
{
|
74
|
-
|
75
|
-
}
|
76
|
-
*/
|
77
|
-
}
|
78
|
-
|
79
44
|
```
|
80
45
|
|
81
46
|
2つ目のオブジェクト(1つめを基に回転する方)
|
82
|
-
GameObject
|
83
|
-
Cylinder(1)
|
84
47
|
Follow.cs
|
85
48
|
CyrinderRotate.csのGetServoAngle関数のold_amgle(変数)をvirtual_y_angleに代入して制御をしたい
|
86
49
|
Follow.csのインスペクターにScript、GameObject、CyrinderRotationが存在している
|
@@ -138,14 +101,10 @@
|
|
138
101
|
|
139
102
|
Debug.Log(Difference);
|
140
103
|
Debug.Log(new_angle);
|
141
|
-
// */
|
142
|
-
//transform.rotation = Quaternion.Euler(new Vector3(0, 250, 0));
|
143
|
-
//return $"{virtual_y_angle}";
|
144
|
-
|
104
|
+
}
|
145
105
|
}
|
146
106
|
```
|
147
107
|
### 試したこと
|
148
108
|
ネットの記事を参考に書いてみましたがうまくいっていません。
|
149
109
|
|
150
|
-
### 補足情報(FW/ツールのバージョンなど)
|
110
|
+
### 補足情報(FW/ツールのバージョンなど)
|
151
|
-
Unity2019
|
2
出力結果の追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -10,7 +10,20 @@
|
|
10
10
|
エラーは出ていませんが変数の値を取得できていません。
|
11
11
|
現在実装しているコードを記載します。
|
12
12
|
|
13
|
+
実行時の出力結果です
|
14
|
+
Debug.Log(sub_angle);
|
15
|
+
90
|
13
16
|
|
17
|
+
Debug.Log(virtual_y_angle);
|
18
|
+
0 (本来の出力は180であるはず)
|
19
|
+
|
20
|
+
Debug.Log(Difference);
|
21
|
+
90
|
22
|
+
|
23
|
+
Debug.Log(new_angle);
|
24
|
+
0
|
25
|
+
|
26
|
+
なのでvirtual_y_angle(old_angle)の値が届いていないように感じます。
|
14
27
|
### 該当のソースコード
|
15
28
|
|
16
29
|
|
@@ -105,7 +118,7 @@
|
|
105
118
|
//script = GameObject.Cylinder.GetComponent<CyrinderRotation>();
|
106
119
|
virtual_y_angle = script.old_angle; //基本となる円柱の角度(old_angle)をvirtual_y_angleに代入
|
107
120
|
sub_angle = transform.localEulerAngles.y;
|
108
|
-
|
121
|
+
Debug.Log(sub_angle);
|
109
122
|
Debug.Log(virtual_y_angle);
|
110
123
|
// /*
|
111
124
|
//ここで2つめの円柱に代入する角度を計算
|
@@ -123,8 +136,8 @@
|
|
123
136
|
transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
|
124
137
|
}
|
125
138
|
|
126
|
-
|
139
|
+
Debug.Log(Difference);
|
127
|
-
|
140
|
+
Debug.Log(new_angle);
|
128
141
|
// */
|
129
142
|
//transform.rotation = Quaternion.Euler(new Vector3(0, 250, 0));
|
130
143
|
//return $"{virtual_y_angle}";
|
1
コード内の変数名の変更
title
CHANGED
File without changes
|
body
CHANGED
@@ -89,7 +89,7 @@
|
|
89
89
|
|
90
90
|
float virtual_y_angle = 0; //基となる円柱の角度
|
91
91
|
float sub_angle = 0; //追従する円柱の角度
|
92
|
-
float
|
92
|
+
float Difference = 0; //両方の角度差
|
93
93
|
float new_angle = 0; //追従する円柱に入力する角度
|
94
94
|
|
95
95
|
|
@@ -111,15 +111,15 @@
|
|
111
111
|
//ここで2つめの円柱に代入する角度を計算
|
112
112
|
if (sub_angle > virtual_y_angle)
|
113
113
|
{
|
114
|
-
|
114
|
+
Difference = sub_angle - virtual_y_angle;
|
115
|
-
new_angle = sub_angle -
|
115
|
+
new_angle = sub_angle - 0.2 * Difference;
|
116
116
|
transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
|
117
117
|
}
|
118
118
|
|
119
119
|
if(virtual_y_angle > sub_angle)
|
120
120
|
{
|
121
|
-
|
121
|
+
Difference = virtual_y_angle - sub_angle;
|
122
|
-
new_angle = sub_angle +
|
122
|
+
new_angle = sub_angle + 0.2 * Difference;
|
123
123
|
transform.rotation = Quaternion.Euler(new Vector3(0, new_angle, 0)); //ここで角度代入
|
124
124
|
}
|
125
125
|
|