微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

线渲染器显示不正确

如何解决线渲染器显示不正确

我有一个小问题,我无法弄清楚问题是什么。我有一个单元格网格……我将鼠标拖过它们并使用线渲染器在它们之间创建连接。问题是 Line Renderer 看起来不太好,我将在下面附上一张图片,看看是什么问题。非常感谢。

 public Grid grid;
public float connectiondistanceLimit = 3.185f; //0.91*3.5
public float snapdistance = 0.2f;
public LineRenderer connectionRenderer;
private List<Vector3> connectionPositions;
public List<GridCell> cellsOnScreen = new List<GridCell>();
public List<GridCell> 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<Vector3>();
    connectedCells = new List<GridCell>();
    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<Vector3> tempPositions = new List<Vector3>(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) <= snapdistance)
                            {
                                connectedCells.Add(cell);
                                connectionPositions.Add(cell.transform.position);
                                cell.isConnected = true;
                                cell.SetColor();
                                break;
                            }
                        }

                    }
                }
            lastConnection.z = 0f;
            mPosition.z = 0f;
            tempPositions.Add(mPosition);
            connectionRenderer.positionCount = tempPositions.Count;
            connectionRenderer.SetPositions(tempPositions.ToArray());
        }
    }
    if (Input.GetMouseButtonUp(0))
    {
        lastConnectedCell = connectedCells[connectedCells.Count - 1];
    }
}

Line Renderer Display

Line Renderer Config

在检查器中我看起来不错,但在播放模式中它产生了这种效果,我不明白为什么。我认为位置 Z 是一个问题,但不,它是 0。 抱歉英语不好。

解决方法

如果您在一个地方有多个点位置,或者宽度曲线设置错误,则可能会发生这种奇怪的行为。 example

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。