Место общения программистов C#
Anonymous
Line Renderer Неверное отображение
Сообщение
Anonymous » 16 ноя 2025, 18:01
У меня возникла небольшая дилемма, и я не могу понять, в чем проблема. У меня есть сетка ячеек... Я перетаскиваю по ним мышкой и создаю между ними связь с помощью рендеринга линий. Проблема в том, что Line Renderer выглядит неправильно. Я прикреплю изображение ниже, чтобы понять, в чем проблема. Большое спасибо.
Код: Выделить всё
public Grid grid;
public float connectionDistanceLimit = 3.185f; //0.91*3.5
public float snapDistance = 0.2f;
public LineRenderer connectionRenderer;
private List connectionPositions;
public List cellsOnScreen = new List();
public List connectedCells;
private GridCell lastConnectedCell;
private GridCell currentSelectedCell;
private bool conectionStarted = false;
IEnumerator Start()
{
yield return new WaitForEndOfFrame();
cellsOnScreen = grid.GetGridElements();
foreach (GridCell cell in cellsOnScreen)
cell.CellPointEvent += Cell_CellPointEvent;
}
private void Cell_CellPointEvent(bool enter, GridCell cell)
{
currentSelectedCell = cell;
if (conectionStarted)
return;
connectionPositions = new List();
connectedCells = new List();
connectedCells.Add(cell);
Vector3 positionToAdd = cell.transform.position;
positionToAdd.z = 0f;
connectionPositions.Add(positionToAdd);
cell.SetColor();
conectionStarted = true;
}
void Update()
{
if (Input.GetMouseButton(0))
{
if (connectionPositions != null)
{
if (lastConnectedCell != null)
{
if (lastConnectedCell != currentSelectedCell)
return;
}
List tempPositions = new List(connectionPositions);
Vector3 mPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3 lastConnection = tempPositions[tempPositions.Count - 1];
mPosition.z = 0f;
lastConnection.z = 0f;
if (Vector3.Distance(lastConnection, mPosition) > connectionDistanceLimit)
{
Ray r = new Ray(lastConnection, (mPosition - lastConnection));
mPosition = r.GetPoint(connectionDistanceLimit);
}
if (Vector3.Distance(lastConnection, mPosition) < connectionDistanceLimit)
foreach (GridCell cell in cellsOnScreen)
{
if (!connectedCells.Contains(cell))
{
GridCell lastCell = connectedCells[connectedCells.Count - 1];
if ((cell.transform.position.y > lastCell.transform.position.y && cell.transform.position.x != lastCell.transform.position.x) ||
cell.transform.position.y < lastCell.transform.position.y && cell.transform.position.x != lastCell.transform.position.x)
{
}
else
{
if (Vector3.Distance(mPosition, cell.transform.position)
Подробнее здесь: [url]https://stackoverflow.com/questions/65809415/line-renderer-incorrect-display[/url]
1763305270
Anonymous
У меня возникла небольшая дилемма, и я не могу понять, в чем проблема. У меня есть сетка ячеек... Я перетаскиваю по ним мышкой и создаю между ними связь с помощью рендеринга линий. Проблема в том, что Line Renderer выглядит неправильно. Я прикреплю изображение ниже, чтобы понять, в чем проблема. Большое спасибо. [code] public Grid grid; public float connectionDistanceLimit = 3.185f; //0.91*3.5 public float snapDistance = 0.2f; public LineRenderer connectionRenderer; private List connectionPositions; public List cellsOnScreen = new List(); public List connectedCells; private GridCell lastConnectedCell; private GridCell currentSelectedCell; private bool conectionStarted = false; IEnumerator Start() { yield return new WaitForEndOfFrame(); cellsOnScreen = grid.GetGridElements(); foreach (GridCell cell in cellsOnScreen) cell.CellPointEvent += Cell_CellPointEvent; } private void Cell_CellPointEvent(bool enter, GridCell cell) { currentSelectedCell = cell; if (conectionStarted) return; connectionPositions = new List(); connectedCells = new List(); connectedCells.Add(cell); Vector3 positionToAdd = cell.transform.position; positionToAdd.z = 0f; connectionPositions.Add(positionToAdd); cell.SetColor(); conectionStarted = true; } void Update() { if (Input.GetMouseButton(0)) { if (connectionPositions != null) { if (lastConnectedCell != null) { if (lastConnectedCell != currentSelectedCell) return; } List tempPositions = new List(connectionPositions); Vector3 mPosition = Camera.main.ScreenToWorldPoint(Input.mousePosition); Vector3 lastConnection = tempPositions[tempPositions.Count - 1]; mPosition.z = 0f; lastConnection.z = 0f; if (Vector3.Distance(lastConnection, mPosition) > connectionDistanceLimit) { Ray r = new Ray(lastConnection, (mPosition - lastConnection)); mPosition = r.GetPoint(connectionDistanceLimit); } if (Vector3.Distance(lastConnection, mPosition) < connectionDistanceLimit) foreach (GridCell cell in cellsOnScreen) { if (!connectedCells.Contains(cell)) { GridCell lastCell = connectedCells[connectedCells.Count - 1]; if ((cell.transform.position.y > lastCell.transform.position.y && cell.transform.position.x != lastCell.transform.position.x) || cell.transform.position.y < lastCell.transform.position.y && cell.transform.position.x != lastCell.transform.position.x) { } else { if (Vector3.Distance(mPosition, cell.transform.position) Подробнее здесь: [url]https://stackoverflow.com/questions/65809415/line-renderer-incorrect-display[/url]