unityのlinerendererを用いて頂点を多数もつ線を書こうとしています。
スクリプトで以下のように指定して線を表示させることはできましたが、太さが一定になりません。
inspectorで線の太さを調節することはわかりましたが、始点から終点まで同じ太さになるはずが(したいところ)、途中で線が細くなってしまいます。調べても解決難しそうであり相談させて頂きました。
C#
1public class NewBehaviourScript : MonoBehaviour 2{ 3 public GameObject obj; 4 private LineRenderer lineRenderer; 5 6 7 void Start() 8 { 9 lineRenderer = obj.GetComponent<LineRenderer>(); 10 11 lineRenderer.SetPosition(0, new Vector3(0 , 0, 0)); 12 lineRenderer.SetPosition(1, new Vector3(0.6846106f , 0, 0)); 13 lineRenderer.SetPosition(2, new Vector3(0.9700001f , 0.2f, 0)); 14 lineRenderer.SetPosition(3, new Vector3(1.15665f , 0, 0)); 15 lineRenderer.SetPosition(4, new Vector3(1.599345f , 0, 0)); 16 lineRenderer.SetPosition(5, new Vector3(1.84345f , 1.728068f, 0)); 17 lineRenderer.SetPosition(6, new Vector3(1.971275f , -0.3221619f, 0)); 18 lineRenderer.SetPosition(7, new Vector3(2.172146f , 0, 0)); 19 lineRenderer.SetPosition(8, new Vector3(2.651402f , 0, 0)); 20 lineRenderer.SetPosition(9, new Vector3(2.914341f , 0.2874806f, 0)); 21 lineRenderer.SetPosition(10, new Vector3(3.153f , 0, 0)); 22 lineRenderer.SetPosition(11, new Vector3(3.498861f , 0, 0)); 23 lineRenderer.SetPosition(12, new Vector3(8.448442f , 0, 0)); 24 lineRenderer.SetPosition(13, new Vector3(10 , 0, 0)); 25 26 27 lineRenderer.startColor = Color.green; 28 lineRenderer.sortingLayerName = "Effect"; 29 lineRenderer.sortingOrder = 1; 30 31 } 32 33 // Update is called once per frame 34 void FixedUpdate() 35 { 36 } 37}
2022/01/02追記です。
滑らかな折れ線を書く方法は教えていただいたとおり、頂点の数を増やす方法で対応できそうです。
しかし、色々と調べていると以下のコードで作られる折れ線ではどうやら太さが一定の状態で角度の急峻な折れ線を作れるようです。なぜこの方法ではきれいな折れ線が作れてしまうのか分かる方は教えていただけると幸いです。
C#
1public class GenerateLR : MonoBehaviour { 2 3 void DrawLine(List<Vector2> my2DVec, int startPos) { 4 List<Vector3> myPoint = new List<Vector3>(); 5 for(int idx=0; idx<2; idx++) { 6 myPoint.Add(new Vector3(my2DVec[startPos+idx].x, my2DVec[startPos+idx].y, 0.0f)); 7 } 8 9 GameObject newLine = new GameObject ("Line"); 10 LineRenderer lRend = newLine.AddComponent<LineRenderer> (); 11 lRend.SetVertexCount(2); 12 lRend.SetWidth (0.1f, 0.1f); 13 Vector3 startVec = myPoint[0]; 14 Vector3 endVec = myPoint[1]; 15 lRend.SetPosition (0, startVec); 16 lRend.SetPosition (1, endVec); 17 } 18 19 void Start () { 20 List<Vector2> my2DPoint = new List<Vector2> (); 21 for (int idx=0; idx<100; idx++) { 22 my2DPoint.Add (new Vector2 (-10 + 0.2f * idx, Random.Range(0.0f, 5.0f))); 23 } 24 25 for (int idx=0; idx < my2DPoint.Count - 1; idx++) { 26 DrawLine (my2DPoint, /* startPos=*/idx); 27 } 28 } 29 30 void Update () { 31 32 } 33}
回答1件
あなたの回答
tips
プレビュー