예제 #1
0
    static public void DrawLine3D(Vector3 start, Vector3 end, float lineSize, Color color, Material mat, Camera cam, int layer = 0, RenderModeLine3DEnum mode = RenderModeLine3DEnum.LOOKCAMERA)
    {
        Quaternion rot = Quaternion.identity;

        mat.SetColor("_TintColor", color);

        Vector3 crossLine = Vector3.zero;

        Mesh meshLine3D = new Mesh();

        meshLine3D.name = "Panel";

        if (mode == RenderModeLine3DEnum.LOOKCAMERA)
        {
            crossLine = Vector3.Cross(end - start, (end + start) * 0.5f - cam.transform.position).normalized * 0.5f;
        }
        if (mode == RenderModeLine3DEnum.HORIZONTAL)
        {
            crossLine = new Vector3((start - end).x * Mathf.Cos(Mathf.PI * 0.5f) - (start - end).z * Mathf.Sin(Mathf.PI * 0.5f)
                                    , 0f
                                    , (start - end).x * Mathf.Sin(Mathf.PI * 0.5f) + (start - end).z * Mathf.Cos(Mathf.PI * 0.5f)
                                    ).normalized * 0.5f;
        }
        if (mode == RenderModeLine3DEnum.VERTICAL)
        {
            crossLine = Vector3.up * 0.5f;
        }

        meshLine3D.vertices = new Vector3[] {
            crossLine *lineSize,
            -crossLine *lineSize,
            (end - crossLine * lineSize) - start,
            (end + crossLine * lineSize) - start,
        };
        meshLine3D.triangles = new int[] {
            0, 1, 2, 2, 3, 0
        };
        meshLine3D.uv = new Vector2[] {
            new Vector2(0f, 1f),
            new Vector2(1f, 1f),
            new Vector2(1f, 0f),
            new Vector2(0f, 0f)
        };

        meshLine3D.RecalculateNormals();
        meshLine3D.RecalculateBounds();
        meshLine3D.Optimize();
        meshLine3D.MarkDynamic();

        Graphics.DrawMesh(meshLine3D, start, rot, mat, layer, cam);
        MonoBehaviour.Destroy(meshLine3D, 0.01f);
    }
예제 #2
0
 static public void DrawLine3D(Vector3 start, Vector3 end, float lineSize, Material mat, Camera cam, int layer = 0, RenderModeLine3DEnum mode = RenderModeLine3DEnum.LOOKCAMERA)
 {
     DrawLine3D(start, end, lineSize, new Color(0f, 1f, 0f, 0.2f), mat, cam, layer, mode);
 }
예제 #3
0
 static public void DrawLine3D(Vector3 start, Vector3 end, float lineSize, Color color, Material mat, int layer = 0, RenderModeLine3DEnum mode = RenderModeLine3DEnum.LOOKCAMERA)
 {
     DrawLine3D(start, end, lineSize, color, mat, Camera.main, layer, mode);
 }
예제 #4
0
 static public void DrawLine3D(Vector3 start, Vector3 end, float lineSize, Color color, Camera cam, int layer = 0, RenderModeLine3DEnum mode = RenderModeLine3DEnum.LOOKCAMERA)
 {
     DrawLine3D(start, end, lineSize, color, _materialAlphaBlended, cam, layer, mode);
 }
예제 #5
0
 /// <summary>
 /// ワールド座標系で線を描画します
 /// Graphics.DrawMeshを使用しているためUpdate関数内で使用します
 /// </summary>
 /// <param name='start'>
 /// 線の開始点
 /// </param>
 /// <param name='end'>
 /// 線の終点
 /// </param>
 /// <param name='lineSize'>
 /// 線の太さ
 /// </param>
 /// <param name='color'>
 /// 線の色 指定しなければ Color(0f,1f,0f,0.2f)
 /// </param>
 /// <param name='mat'>
 /// 線の材質 指定しなければ[Particles/Alpha Blended]シェーダーを使用
 /// </param>
 /// <param name='cam'>
 /// 描画対象のカメラ 指定しなければCamera.mainを使用
 /// </param>
 /// <param name='layer = 0'>
 /// 描画対象のレイヤー
 /// </param>
 /// <param name='mode'>
 /// Mode
 /// </param>
 static public void DrawLine3D(Vector3 start, Vector3 end, float lineSize, int layer = 0, RenderModeLine3DEnum mode = RenderModeLine3DEnum.LOOKCAMERA)
 {
     DrawLine3D(start, end, lineSize, new Color(0f, 1f, 0f, 0.2f), _materialAlphaBlended, Camera.main, layer, mode);
 }