簡體   English   中英

如何使用 LineRenderer 根據 object 周圍的半徑大小繪制圓?

[英]How can I use LineRenderer to draw a circle depending on radius size around an object?

using UnityEngine;
using System.Collections;

[RequireComponent(typeof(LineRenderer))]
public class DrawRadiusAround : MonoBehaviour
{
    [Range(0, 50)]
    public int segments = 50;
    [Range(0, 5)]
    public float xradius = 5;
    [Range(0, 5)]
    public float yradius = 5;
    LineRenderer line;

    void Start()
    {
        line = gameObject.GetComponent<LineRenderer>();

        line.positionCount = segments + 1;
        line.useWorldSpace = false;
        CreatePoints();
    }

    void CreatePoints()
    {
        float x;
        float y;
        float z;

        float angle = 20f;

        for (int i = 0; i < (segments + 1); i++)
        {
            x = Mathf.Sin(Mathf.Deg2Rad * angle) * xradius;
            y = Mathf.Cos(Mathf.Deg2Rad * angle) * yradius;

            line.SetPosition(i, new Vector3(x, y, 0));

            angle += (360f / segments);
        }
    }
}

一些問題:

  • 圓圈是垂直的,而不是應該是水平的。

  • 我怎樣才能使我能夠在運行時改變半徑大小和圓的寬度?

  • 如何在運行游戲之前在編輯器模式下使其不會顯示線渲染器第一個點附近的目標 object 應該在附近?

  • 運行時的圓圈沒有在它的頂部完成,有一個地方有一些空間或缺失的部分。

此屏幕顯示在運行游戲之前在 object 附近以粉紅色顯示起點或線渲染器:

運行游戲前線渲染器的小粉紅色,怎么讓它不顯示呢?

此屏幕截圖顯示了半徑的繪制圓和運行時腳本設置的 linerenderer:

在運行時繪制的半徑圓

要使圓水平,請改變 Z 坐標而不是 Y 坐標:

// ...
x = Mathf.Sin(Mathf.Deg2Rad * angle) * xradius;
y = Mathf.Cos(Mathf.Deg2Rad * angle) * yradius;

line.SetPosition(i, new Vector3(x, 0f, y));
// ..

要更改線寬,請改變line.widthMultiplier的值:

line.widthMultiplier = 2f;

要更改半徑,請更改xradiusyradius ,然后再次調用CreatePoints

xradius = yradius = 10f;
CreatePoints();

圓圈看起來“不完整”,因為線渲染器的末端沒有充分重疊。 為了解決這個問題,通過將最后一行中的360f更改為更大的值,go 進一步超過 360 度。 例如:

// ...
x = Mathf.Sin(Mathf.Deg2Rad * angle) * xradius;
y = Mathf.Cos(Mathf.Deg2Rad * angle) * yradius;

line.SetPosition(i, new Vector3(x, 0f, y));

angle += (380f / segments);
// ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM