【问题标题】:Unity3d Linerenderer not visibleUnity3d Linerenderer 不可见
【发布时间】:2018-10-29 16:43:20
【问题描述】:

我正在尝试使用 Linerenderer 在两个 UI 游戏对象之间画一条线。在场景模式下一切正常,但在游戏模式下线是不可见的。我试图改变对象的 Z 位置,但线条仍然不可见。谁能帮我?提前致谢

private LineRenderer lineRenderer;
private float counter;
private float dist;
private Vector3 aPos;
private Vector3 bPos;
public Transform origin;
public Transform destination;
public float lineDrawSpeed = 6f;

// Use this for initialization
void Start()
{
    lineRenderer = GetComponent<LineRenderer>();
    aPos = new Vector3(origin.position.x, origin.position.y, origin.position.z); // Using these to move the lines back
    bPos = new Vector3(destination.position.x, destination.position.y, destination.position.z);

    lineRenderer.SetPosition(0, aPos);
    lineRenderer.SetWidth(3f, 3f);

    dist = Vector3.Distance(origin.position, destination.position);
}

// Update is called once per frame
void Update()
{

    if (counter < dist)
    {
        counter += .1f / lineDrawSpeed;

        float x = Mathf.Lerp(0, dist, counter);

        Vector3 pointA = aPos;
        Vector3 pointB = bPos;

        Vector3 pointAloneLine = x * Vector3.Normalize(pointB - pointA) + pointA;

        lineRenderer.SetPosition(1, pointAloneLine);
    }

}

【问题讨论】:

  • 愚蠢的问题,但是你的背景是什么颜色的?我曾经做过一个 lineRenderer 相同的颜色,我认为它也是不可见的。
  • 我的背景是绿色的,线条是白色的

标签: unity3d unity5


【解决方案1】:

除非我忽略了您发布的代码中的一些逻辑错误,否则我认为问题可能出在材料上。

线条渲染器的通用调试帮助:

尝试设置线条渲染器的颜色/材质:

lineRenderer.sortingOrder = 1;
lineRenderer.material = new Material (Shader.Find ("Sprites/Default"));
lineRenderer.material.color = Color.red; 

如果这不起作用,也许您需要手动指定顶点数?

mineLaser.SetVertexCount (2);

最后,如果这两个都不起作用,那可能只是逻辑错误;尝试将lineRenderer 位置的变换设置为某个预定义值,然后查看它是否显示。

对于这个特定的问题:

啊,所以它在画布上。假设您指的是 UI 画布,我相信 linerenderer 是在这种情况下使用的错误工具。查看this question

其中一个答案建议:

只需使用填充您想要的任何颜色的面板并使用高度和宽度来设置线条的长度和宽度

【讨论】:

  • 我试过了,但不幸的是,游戏模式下仍然没有显示线条。可能是因为我想在 Canvas 上画线?
  • @AlexRED canvas 确实可能是问题所在。更新了答案。
  • 我突然遇到了 OP 的 bug,将 sortOrder 设置为 1 解决了它,但是为什么?
  • @Nicekor 我相信sortingOrder的默认值是0。如果它从未设置,包括你的线渲染器在内的所有东西都以0顺序绘制。通过将渲染器置于1,你明确告诉Unity绘制它高于其他元素(可能隐藏在其后面)
【解决方案2】:

这在“屏幕空间 - 覆盖”画布模式下是不可能的。在这种模式下,UI 覆盖在 Scene 中的所有内容之上绘制(包括 LineRenderer,实际上是非 UI 元素)。

尝试为画布使用“屏幕空间 - 相机”选项,为线条渲染器使用“使用世界空间”选项。

【讨论】:

    【解决方案3】:

    我想你一定忘记为线渲染器设置排序层了。因为这可能只是线在场景视图中可见而不在游戏视图中可见的可能原因。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-25
      • 2014-04-04
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多