Ben*_*ney 6 c# unity-game-engine unity5
我正在开发 2D Unity 应用程序,但遇到了一些奇怪的行为。
这段代码工作得很好。
Debug.DrawLine(button1.transform.position, button2.transform.position, Color.green);
Run Code Online (Sandbox Code Playgroud)
当我运行应用程序时,我在场景视图中看到一条绿线。
但是当我有以下行时,游戏视图中没有任何显示。
Physics2D.Linecast(button1.transform.position, button2.transform.position);
Run Code Online (Sandbox Code Playgroud)
我对 Unity 如何能够在这两个按钮之间画一条线感到困惑,但出于某种原因,它只是不在游戏视图中这样做。
知道如何解决这个问题吗?
只是 line Serlite说的,Physics2D.Linecast不是用来画线的,而是用raycast检测两个物体中间是否有物体。它与绘制线条无关。
如您所知,Debug.DrawLine除非启用 Gizmos ,否则只能在场景视图中工作。您可以仅使用LineRenderer或GL绘制线条的功能,这些功能无需启用 Gizmos 即可工作,也可以在构建中工作。
这是用于在游戏和场景视图中绘制线条的辅助类。
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
用法:
LineDrawer lineDrawer;
void Start()
{
lineDrawer = new LineDrawer();
}
void Update()
{
lineDrawer.DrawLineInGameView(Vector3.zero, new Vector3(0, 40, 0f), Color.blue);
}
Run Code Online (Sandbox Code Playgroud)
完成后,您可以调用lineDrawer.Destroy();.