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

質問編集履歴

3

コードの修正

2021/07/21 09:12

投稿

Antlia
Antlia

スコア2

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
- //float unity_y_angle = 0;
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

出力結果の追加

2021/07/21 09:12

投稿

Antlia
Antlia

スコア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
- //Debug.Log(sub_angle);
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
- //Debug.Log(control_angle);
139
+ Debug.Log(Difference);
127
- //Debug.Log(new_angle);
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

コード内の変数名の変更

2021/07/19 12:14

投稿

Antlia
Antlia

スコア2

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 control_angle = 0; //両方の角度差
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
- control_angle = sub_angle - virtual_y_angle;
114
+ Difference = sub_angle - virtual_y_angle;
115
- new_angle = sub_angle - control_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
- control_angle = virtual_y_angle - sub_angle;
121
+ Difference = virtual_y_angle - sub_angle;
122
- new_angle = sub_angle + control_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