c# - 如何使用 LineRenderer 根据对象周围的半径大小绘制圆?
问题描述
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);
}
}
}
一些问题 :
圆圈是垂直的,而不是应该是水平的。
我怎样才能使我能够在运行时改变半径大小和圆的宽度?
如何在运行游戏之前在编辑器模式下做到这一点,它不会在它应该在的目标对象附近显示线渲染器的第一个点?
运行时的圆圈没有在它的顶部完成,有一个地方有一些空间或缺失的部分。
此屏幕显示在运行游戏之前在对象附近以粉红色显示起点或线渲染器:
此屏幕截图显示了半径的绘制圆和运行时脚本设置的 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;
要更改半径,请更改xradius
然后再次yradius
调用CreatePoints
:
xradius = yradius = 10f;
CreatePoints();
圆圈看起来“不完整”,因为线渲染器的末端没有充分重叠。360f
要解决此问题,请通过将最后一行中的 更改为更大的值来进一步超过 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);
// ...
推荐阅读
- python - 如何 pip 安装 tkinter
- solidity - Solidity 中的私钥加密
- python - 我正在尝试使用 python 从第一个主体中获取灰度图像的 fft 和 dtft(因此不使用内置的 fft 或 dtft 函数)
- jupyter-notebook - 如何在jupyter中手动创建锚链接?
- java - 如何过早地正确终止进程?
- java - Gradle flatDir 是否启用 jar 构建?
- flutter - 在包含 cloud_firestore_web: ^2.4.3 in依赖项后出现此错误
- java - 将元素筛选器添加到 ArrayList java
- laravel - 将变量添加到 Livewire 导航菜单
- node.js - 为什么nodejs文件系统先读取控制台再读取文件