角度を求めるとなると、Vector3.AngleまたはVector3.SignedAngleを使うのが順当ではないでしょうか?
下図のように各部位の赤線がオブジェクトの軸に一致するよう作ってあれば話が簡単になるかと思います。
それぞれの赤線の向きとしてTransform
の軸がそのまま使えますので、たとえば下記のようなスクリプトで角度を測定したところ...
C#
1using UnityEngine;
2using UnityEngine.UI;
3
4public class AngleInspector : MonoBehaviour
5{
6 [SerializeField] private Transform boom;
7 [SerializeField] private Transform arm;
8 [SerializeField] private Transform bucket;
9
10 [SerializeField] private Text theta1Text;
11 [SerializeField] private Text theta2Text;
12 [SerializeField] private Text theta3Text;
13
14 private void Update()
15 {
16 var boomDirection = this.boom.forward;
17 var boomAxis = -this.boom.right;
18 var armDirection = this.arm.forward;
19 var armAxis = this.arm.right;
20 var bucketDirection = this.bucket.forward;
21 var bucketAxis = this.bucket.right;
22
23 var theta1 = Vector3.SignedAngle(Vector3.forward, boomDirection, boomAxis);
24 var theta2 = Vector3.SignedAngle(boomDirection, armDirection, armAxis);
25 var theta3 = Vector3.SignedAngle(armDirection, bucketDirection, bucketAxis);
26
27 this.theta1Text.text = $"Theta 1: {theta1:F2}";
28 this.theta2Text.text = $"Theta 2: {theta2:F2}";
29 this.theta3Text.text = $"Theta 3: {theta3:F2}";
30 }
31}
下図のように表示されました。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/10/30 02:24
2020/10/30 03:29
2020/10/30 03:49