我正在研究2D Unity应用程序,我遇到了一些奇怪的行为。
这段代码很好用。
Debug.DrawLine(button1.transform.position, button2.transform.position, Color.green);
当我运行应用程序时,我在场景视图中看到一条绿线。
但是当我有以下行时,游戏视图中没有任何内容。
Physics2D.Linecast(button1.transform.position, button2.transform.position);
我对Unity如何在这两个按钮之间画一条线感到困惑,但出于某种原因,它只是在游戏视图中没有这样做。
知道我该怎么解决这个问题?
答案 0 :(得分:4)
只是行Serlite说,Physics2D.Linecast
不是用于绘制线,而是用于检测两个对象中间是否有一个带有光线投射的对象。它与绘制线无关。
如您所知,Debug.DrawLine
只能在场景视图中使用,除非启用了Gizmos。您可以只使用LineRenderer
或GL
函数来绘制可在不启用Gizmo的情况下工作的行,并且还可以在构建中工作。
这是一个在游戏和场景视图中绘制线条的辅助类。
public struct LineDrawer
{
private LineRenderer lineRenderer;
private float lineSize;
public LineDrawer(float lineSize = 0.2f)
{
GameObject lineObj = new GameObject("LineObj");
lineRenderer = lineObj.AddComponent<LineRenderer>();
//Particles/Additive
lineRenderer.material = new Material(Shader.Find("Hidden/Internal-Colored"));
this.lineSize = lineSize;
}
private void init(float lineSize = 0.2f)
{
if (lineRenderer == null)
{
GameObject lineObj = new GameObject("LineObj");
lineRenderer = lineObj.AddComponent<LineRenderer>();
//Particles/Additive
lineRenderer.material = new Material(Shader.Find("Hidden/Internal-Colored"));
this.lineSize = lineSize;
}
}
//Draws lines through the provided vertices
public void DrawLineInGameView(Vector3 start, Vector3 end, Color color)
{
if (lineRenderer == null)
{
init(0.2f);
}
//Set color
lineRenderer.startColor = color;
lineRenderer.endColor = color;
//Set width
lineRenderer.startWidth = lineSize;
lineRenderer.endWidth = lineSize;
//Set line count which is 2
lineRenderer.positionCount = 2;
//Set the postion of both two lines
lineRenderer.SetPosition(0, start);
lineRenderer.SetPosition(1, end);
}
public void Destroy()
{
if (lineRenderer != null)
{
UnityEngine.Object.Destroy(lineRenderer.gameObject);
}
}
}
<强>用法强>:
LineDrawer lineDrawer;
void Start()
{
lineDrawer = new LineDrawer();
}
void Update()
{
lineDrawer.DrawLineInGameView(Vector3.zero, new Vector3(0, 40, 0f), Color.blue);
}
完成后,您可以拨打lineDrawer.Destroy();
。
答案 1 :(得分:1)