回答受付終了まであと4日

Unityの2Dにおける質問です。 接線をLineRendererで描画したいのですが、スクリプトが悪いのかうまくいきません。 円は 中心座標(0,0) 半径4f です。

補足

publicで接線を引くオブジェクトを指定できるようにしたいです。 ⇒オブジェクトの座標から円に向かって接線を2本引くという意味です。   情報が不足しておりました。失礼いたします。

プログラミング | C言語関連43閲覧xmlns="http://www.w3.org/2000/svg">500

回答(1件)

using UnityEngine; [RequireComponent(typeof(LineRenderer))] public class DrawTangents : MonoBehaviour { public Transform target; // 接線を引く対象オブジェクト public float circleRadius = 4f; // 円の半径 private LineRenderer lineRenderer; void Start() { lineRenderer = GetComponent<LineRenderer>(); lineRenderer.positionCount = 4; // 接線2本で計4点 lineRenderer.loop = false; // 閉じない } void Update() { if (target == null) { Debug.LogWarning("Target is not assigned."); return; } Vector3 targetPosition = target.position; Vector2 target2D = new Vector2(targetPosition.x, targetPosition.y); // 円の中心 Vector2 circleCenter = Vector2.zero; // 円とターゲットの距離 float distanceToCenter = Vector2.Distance(target2D, circleCenter); if (distanceToCenter < circleRadius) { Debug.LogWarning("Target is inside the circle. Cannot calculate tangents."); return; } // 接線の計算 float angleToTangent = Mathf.Asin(circleRadius / distanceToCenter); float baseAngle = Mathf.Atan2(target2D.y, target2D.x); // 2つの接線の角度 float angle1 = baseAngle + angleToTangent; float angle2 = baseAngle - angleToTangent; // 接線の接点(円上の点) Vector2 tangentPoint1 = new Vector2(Mathf.Cos(angle1), Mathf.Sin(angle1)) * circleRadius; Vector2 tangentPoint2 = new Vector2(Mathf.Cos(angle2), Mathf.Sin(angle2)) * circleRadius; // LineRenderer用の座標を設定 lineRenderer.SetPosition(0, targetPosition); // ターゲットの位置 lineRenderer.SetPosition(1, tangentPoint1); // 接点1 lineRenderer.SetPosition(2, targetPosition); // 再びターゲットの位置 lineRenderer.SetPosition(3, tangentPoint2); // 接点2 } }

この回答はいかがでしたか? リアクションしてみよう