【发布时间】:2020-07-25 07:57:25
【问题描述】:
在这个脚本中,我正在创建一个具有特定半径大小的圆并获取半径大小:
using UnityEngine;
using System.Collections;
[RequireComponent(typeof(LineRenderer))]
public class DrawRadiusAroundTurret : MonoBehaviour
{
[Range(0, 50)]
public int segments = 50;
[Range(0, 5)]
public float xradius = 5;
[Range(0, 5)]
public float yradius = 5;
[Range(0.1f, 5f)]
public float width = 0.1f;
LineRenderer line;
void Start()
{
line = gameObject.GetComponent<LineRenderer>();
line.enabled = true;
line.positionCount = segments + 1;
line.widthMultiplier = width;
line.useWorldSpace = false;
CreatePoints();
}
private void Update()
{
CreatePoints();
}
public Vector3[] CreatePoints()
{
line.widthMultiplier = width;
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, 0f, y));
angle += (380f / segments);
}
var positions = new Vector3[line.positionCount];
return positions;
}
}
在这个脚本中,我有这个方法,我希望在半径边缘位置上随机设置最后一个点:
private void GeneratePointsInTracks()
{
var startPoints = GameObject.FindGameObjectsWithTag("Start Point");
var curvedLines = GameObject.FindGameObjectsWithTag("Curved Line");
for (int i = 0; i < startPoints.Length; i++)
{
for (int x = 0; x < numberOfPointsInTrack; x++)
{
GameObject go = Instantiate(tracksPrefab, curvedLines[i].transform);
go.name = "Point In Track";
go.transform.position = turrent.position + new Vector3(Random.Range(-100f, 100f), Random.Range(-100f, 100f), Random.Range(-100f, 100f));
if(x == numberOfPointsInTrack - 1)
{
go.name = "Last Point In Track";
for(int y = 0; y < drawRadius.CreatePoints().Length; y++)
{
go.transform.position = new Vector3(Random.Range(0,1)[y].x,
drawRadius.CreatePoints()[y].y,
drawRadius.CreatePoints()[y].z);
}
}
}
}
}
我试过这个:
go.transform.position = new Vector3(Random.Range(0,1)[y].x,
drawRadius.CreatePoints()[y].y,
drawRadius.CreatePoints()[y].z);
但是 x 上的随机给出错误:
无法将 [] 索引应用于“int”类型的表达式
第一个脚本创建一个像这样的圆圈:
这是我在绘画中绘制的一个示例,只是为了说明我所说的我希望第二个脚本中的 endPoints 随机定位在圆边缘上:
因此,每个“跟踪中的最后一个点”对象都应该像第二个屏幕截图一样随机放置在圆边缘上。
【问题讨论】:
-
Random.Range(0,1)只是一个数字,不是一个集合,不要尝试用索引访问它y -
同样在第一个 sn-p 的末尾你会做
var positions = new Vector3[line.positionCount]; return positions;所以你总是返回一个向量为零的数组,这不是你想要的 -
你想从你已经在 LineRenderer 中设置的位置中选择随机位置,还是只是在圆圈上随机位置?
-
@Pluto 我希望第二个脚本中的端点每个端点都位于第一个脚本的圆上的随机位置上。
-
@Pluto 我用底部的两张截图更新了我的问题,解释我的意思。