C# 如何使用LineRenderer根据对象周围的半径大小绘制圆? 使用UnityEngine; 使用系统集合; [RequiredComponent(typeof(LineRenderer))] 公共类DrawRadiusAround:单一行为 { [范围(0,50)] 公共整数段=50; [范围(0,5)] 公共浮点数xradius=5; [范围(0,5)] 公共浮动yradius=5; 线条渲染器线条; void Start() { line=gameObject.GetComponent(); line.positionCount=段数+1; line.useWorldSpace=false; CreatePoints(); } void CreatePoints() { 浮动x; 浮动y; 浮动z; 浮动角度=20f; 对于(int i=0;i

C# 如何使用LineRenderer根据对象周围的半径大小绘制圆? 使用UnityEngine; 使用系统集合; [RequiredComponent(typeof(LineRenderer))] 公共类DrawRadiusAround:单一行为 { [范围(0,50)] 公共整数段=50; [范围(0,5)] 公共浮点数xradius=5; [范围(0,5)] 公共浮动yradius=5; 线条渲染器线条; void Start() { line=gameObject.GetComponent(); line.positionCount=段数+1; line.useWorldSpace=false; CreatePoints(); } void CreatePoints() { 浮动x; 浮动y; 浮动z; 浮动角度=20f; 对于(int i=0;i,c#,unity3d,C#,Unity3d,一些问题: 圆圈是垂直的,而不是水平的 如何使我能够在运行时更改半径大小和圆宽度 在运行游戏之前,我如何在编辑器模式下进行设置?它不会首先显示线条渲染器 指向目标对象附近它应该在周围的位置 运行时中的圆圈未在其顶部完成。有一个地方有一些空间或缺少 部分 此屏幕显示在运行游戏之前,在对象附近以粉红色显示起点或线条渲染器: 此屏幕截图显示了在运行时绘制的半径圆和线条渲染器以及脚本设置: 要使圆水平,请改变Z坐标而不是Y坐标: using UnityEngine; using Syste

一些问题:

  • 圆圈是垂直的,而不是水平的

  • 如何使我能够在运行时更改半径大小和圆宽度

  • 在运行游戏之前,我如何在编辑器模式下进行设置?它不会首先显示线条渲染器 指向目标对象附近它应该在周围的位置

  • 运行时中的圆圈未在其顶部完成。有一个地方有一些空间或缺少 部分

此屏幕显示在运行游戏之前,在对象附近以粉红色显示起点或线条渲染器:

此屏幕截图显示了在运行时绘制的半径圆和线条渲染器以及脚本设置:


要使圆水平,请改变Z坐标而不是Y坐标:

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);
        }
    }
}
要更改线宽,请更改以下值:

要更改半径,请更改
xradius
yradius
,然后再次调用
CreatePoints

line.widthMultiplier = 2f;
圆看起来“不完整”,因为线渲染器的端点没有充分重叠。若要解决此问题,请将最后一行中的
360f
更改为更大的值,使其超过360度。例如:

xradius = yradius = 10f;
CreatePoints();

我添加了一个全局宽度变量,并在Start和CreatePoints方法中使用这一行:line.width乘数=宽度;然后也从更新内部调用CreatePoints,以便能够在运行时进行更改,并且可以正常工作。但是在更新中调用CreatePoints是一种好方法吗?它会一直调用for循环。@BenziAvrumi我会避免在更新中调用
CreatePoints
。是否需要更改每个帧中的半径?如果是这样,我会尝试更改
localScale
以更改半径,尽管这也可能会影响宽度。
xradius = yradius = 10f;
CreatePoints();
// ...
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);
// ...