2020년 5월 24일 일요일

[Unity] gridOverLay




https://gist.github.com/DongguemYoo/0e848cafcaa3e4b549fd21d8fd7bd686


using UnityEngine;
using System.Collections;

public class gridOverlay : MonoBehaviour
{

    public GameObject plane;

    public bool showMain = true;
    public bool showSub = false;

    public int gridSizeX;
    public int gridSizeY;
    public int gridSizeZ;

    public float smallStep;
    public float largeStep;

    public float startX;
    public float startY;
    public float startZ;

    private float offsetY = 0;
    private float scrollRate = 0.1f;
    private float lastScroll = 0f;

    public Material lineMaterial;

    private Color mainColor = new Color(0f, 1f, 0f, 1f);
    private Color subColor = new Color(0f, 0.5f, 0f, 1f);

    public delegate void SetStap(float cam_distance);
    public static SetStap del_StepSize;
 


    void Start()
    {
//이거를 카메라에 달면 됨 아직 디테일은 수정중
        del_StepSize += func_SetSmallStep;
    }

    public void func_SetSmallStep(float cam_distance)
    {
        largeStep =  cam_distance / 2;
        smallStep = cam_distance / 10;
    }

    void Update()
    {
        if (lastScroll + scrollRate < Time.time)
        {
            if (Input.GetKey(KeyCode.KeypadPlus))
            {
                plane.transform.position = new Vector3(plane.transform.position.x, plane.transform.position.y + smallStep, plane.transform.position.z);
                offsetY += smallStep;
                lastScroll = Time.time;
            }
            if (Input.GetKey(KeyCode.KeypadMinus))
            {
                plane.transform.position = new Vector3(plane.transform.position.x, plane.transform.position.y - smallStep, plane.transform.position.z);
                offsetY -= smallStep;
                lastScroll = Time.time;
            }
        }
    }

    void CreateLineMaterial()
    {

        if (!lineMaterial)
        {
            lineMaterial = new Material("Shader \"Lines/Colored Blended\" {" +
                "SubShader { Pass { " +
                "    Blend SrcAlpha OneMinusSrcAlpha " +
                "    ZWrite Off Cull Off Fog { Mode Off } " +
                "    BindChannels {" +
                "      Bind \"vertex\", vertex Bind \"color\", color }" +
                "} } }");
            lineMaterial.hideFlags = HideFlags.HideAndDontSave;
            lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;
        }
    }

    void OnPostRender()
    {
        CreateLineMaterial();
        // set the current material
        lineMaterial.SetPass(0);

     
     
        GL.Begin(GL.LINES);

        if (showSub)
        {
            GL.Color(subColor);

            //Layers
            for (float j = 0; j <= gridSizeY; j += smallStep)
            {
                //X axis lines
                for (float i = 0; i <= gridSizeZ; i += smallStep)
                {
                    GL.Vertex3(startX, j + offsetY, startZ + i);
                    GL.Vertex3(gridSizeX, j + offsetY, startZ + i);
                }

                //Z axis lines
                for (float i = 0; i <= gridSizeX; i += smallStep)
                {
                    GL.Vertex3(startX + i, j + offsetY, startZ);
                    GL.Vertex3(startX + i, j + offsetY, gridSizeZ);
                }
            }

            //Y axis lines
            for (float i = 0; i <= gridSizeZ; i += smallStep)
            {
                for (float k = 0; k <= gridSizeX; k += smallStep)
                {
                    GL.Vertex3(startX + k, startY + offsetY, startZ + i);
                    GL.Vertex3(startX + k, gridSizeY + offsetY, startZ + i);
                }
            }
        }

        if (showMain)
        {
            GL.Color(mainColor);

            //Layers
            for (float j = 0; j <= gridSizeY; j += largeStep)
            {
                //X axis lines
                for (float i = 0; i <= gridSizeZ; i += largeStep)
                {
                    GL.Vertex3(startX, j + offsetY, startZ + i);
                    GL.Vertex3(gridSizeX, j + offsetY, startZ + i);
                }

                //Z axis lines
                for (float i = 0; i <= gridSizeX; i += largeStep)
                {
                    GL.Vertex3(startX + i, j + offsetY, startZ);
                    GL.Vertex3(startX + i, j + offsetY, gridSizeZ);
                }
            }

            //Y axis lines
            for (float i = 0; i <= gridSizeZ; i += largeStep)
            {
                for (float k = 0; k <= gridSizeX; k += largeStep)
                {
                    GL.Vertex3(startX + k, startY + offsetY, startZ + i);
                    GL.Vertex3(startX + k, gridSizeY + offsetY, startZ + i);
                }
            }
        }


        GL.End();
    }
}


using UnityEngine;
using System.Collections;

public class gridOverlay : MonoBehaviour
{

    public float minval;
    public float maxval;

    public int rectSize;

    public bool isLevel1;
    public bool isLevel2;
    public bool isLevel3;
    public bool isLevel4;

    public float level1_Step;
    public float level2_Step;
    public float level3_Step;
    public float level4_Step;


 

    private float offsetY = 0;
    private float scrollRate = 0.1f;
    private float lastScroll = 0f;

    public Material lineMaterial;

    private Color Color_level1 = new Color(0f, 0f, 0f, -0.2f);
    private Color Color_level2 = new Color(0f, 0f, 0f, 0f);
    private Color Color_level3 = new Color(0f, 0f, 0f, 0f);
    private Color Color_level4 = new Color(0f, 0f, 0f, 0f);



    public delegate void ColorChange(float distance);
    public static ColorChange del_ColorChange;
 


    void Start()
    {
        //lineMaterial.hideFlags = HideFlags.HideAndDontSave;
        //lineMaterial.shader.hideFlags = HideFlags.HideAndDontSave;
        level1_Step = 2000;
        level2_Step = 1000;
        level3_Step = 100f;
        level4_Step = 10f;

        del_ColorChange += func_ColorChange;


        //휠할때마다 다시 그린다? 그것도 개 애바
        //StartCoroutine(draw_Line(level1_Step, Color_level1, 0));
     

    }

    public void Update()
    {
        if (Input.GetKeyDown("1"))
        {
            isLevel1 = true;
        }
        if (Input.GetKeyDown("2"))
        {
         
        }
    }

    public void func_ColorChange(float dis)
    {
     
        //f_setColor(dis, 3, 180, ref Color_level4);
        f_setColor(dis, 17000, 70000, ref Color_level1);
        f_setColor(dis, 2000, 14000, ref Color_level2);
        f_setColor(dis, 100, 2000, ref Color_level3);
        f_setColor(dis, 0, 100, ref Color_level4);

        f_setActive(dis);
    }

    void f_setColor(float dis,float min,float max,ref Color color)
    {
        float tmp_val;
        tmp_val = ((1 - ((dis - min) / (max - min))) * -1f);

        if (max < dis && color.a !=0)
        {
            if (max != 70000)
            {
                //level1 은 사라지지 않게
                color = new Color(0f, 0f, 0f, 0f);
            }
        }

        if (min < dis && dis < max)
        {

            if (max == 70000)
            {
                //level1 은 사라지지 않게
                if (tmp_val < -0.2f)
                {
                    color = new Color(0f, 0f, 0f, tmp_val);
                }
            }
            else
            {
                if (tmp_val > -0.4f)
                    color = new Color(0f, 0f, 0f, tmp_val);
            }
        }
        else if (min > dis)
        {
            color = new Color(0f, 0f, 0f, tmp_val);
        }
    }

    void f_setActive(float dis)
    {
        if (30000 > dis && dis > 14000)
        {
            isLevel3 = false;
            isLevel4 = false;
        }
        else if (14000 > dis && dis > 2000)
        { 
            isLevel3 = true;
            isLevel4 = false;
        }
        else if (2000 > dis && dis > 100)
        { 
            isLevel3 = true;
            isLevel4 = true;
        }
    }

    IEnumerator draw_Line(float level, Color color, float offset)
    {
        //Debug.Log("Draw_Action");

        lineMaterial.SetPass(0);
        GL.Begin(GL.LINES);
        GL.Color(color);

        //startX = -rectSize;
        //startZ = -rectSize;

        int count = 0;



        for (float i = 0; i <= rectSize; i += level)
        {
            if (offset == 0)
            {
                if (count % 5 == 0)
                {
                    GL.Vertex3(-rectSize, offsetY, -rectSize + i);
                    GL.Vertex3(rectSize, offsetY, -rectSize + i);

                    //z축
                    GL.Vertex3(-rectSize + i, offsetY, -rectSize);
                    GL.Vertex3(-rectSize + i, offsetY, rectSize);

                    //- 반대편 z축
                    GL.Vertex3(i, offsetY, -rectSize);
                    GL.Vertex3(i, offsetY, rectSize);
                    //- 반대편 x축
                    GL.Vertex3(-rectSize, offsetY, i);
                    GL.Vertex3(rectSize, offsetY, i);
                }
            }
            else if (count % offset != 0)
            {
                if (i != rectSize)
                {
                    //Debug.Log("i" + i);
                    //x축
                    GL.Vertex3(-rectSize, offsetY, -rectSize + i);
                    GL.Vertex3(rectSize, offsetY, -rectSize + i);

                    //z축
                    GL.Vertex3(-rectSize + i, offsetY, -rectSize);
                    GL.Vertex3(-rectSize + i, offsetY, rectSize);

                    //- 반대편 z축
                    GL.Vertex3(i, offsetY, -rectSize);
                    GL.Vertex3(i, offsetY, rectSize);
                    //- 반대편 x축
                    GL.Vertex3(-rectSize, offsetY, i);
                    GL.Vertex3(rectSize, offsetY, i);
                }
            }

            count++;
        }

        GL.End();
        yield return new WaitForEndOfFrame();
    }

    public void func_DrawLevel(float level, Color color,float offset)
    {
        //Debug.Log("Draw_Action");
        lineMaterial.SetPass(0);
        GL.Begin(GL.LINES);
        GL.Color(color);

        //startX = -rectSize;
        //startZ = -rectSize;
     
        int count= 0;
     


        for (float i = 0; i <= rectSize; i += level)
        {
            if (offset == 0)
            {
                //level1
                if (count % 5 == 0)
                {
                    //x축
                    GL.Vertex3(-rectSize, offsetY, -rectSize + i);
                    GL.Vertex3(rectSize, offsetY, -rectSize + i);

                    //z축
                    GL.Vertex3(-rectSize + i, offsetY, -rectSize);
                    GL.Vertex3(-rectSize + i, offsetY, rectSize);

                    //- 반대편 x축
                    GL.Vertex3(-rectSize, offsetY, i);
                    GL.Vertex3(rectSize, offsetY, i);

                    //- 반대편 z축
                    GL.Vertex3(i, offsetY, -rectSize);
                    GL.Vertex3(i, offsetY, rectSize);

                }
            }
            else if (count % offset != 0)
            {
                //level2,3,4
                if (i != rectSize)
                {
                    //Debug.Log("i" + i);
                    //x축
                    GL.Vertex3(-rectSize, offsetY, -rectSize + i);
                    GL.Vertex3(rectSize, offsetY, -rectSize + i);

                    //z축
                    GL.Vertex3(-rectSize + i, offsetY, -rectSize);
                    GL.Vertex3(-rectSize + i, offsetY, rectSize);

                    //- 반대편 z축
                    GL.Vertex3(i, offsetY, -rectSize);
                    GL.Vertex3(i, offsetY, rectSize);
                    //- 반대편 x축
                    GL.Vertex3(-rectSize, offsetY, i);
                    GL.Vertex3(rectSize, offsetY, i);
                }
            }

            count++;
        }
     
        GL.End();
     

    }

    private void OnPreRender()
    {
        //if (isLevel1)
        //{
        //    func_DrawLevel(level1_Step, Color_level1, 0);
        //}

        //if (isLevel2)
        //{
        //    func_DrawLevel(level2_Step, Color_level2, 10);
         
        //}

        //if (isLevel3)
        //{
        //    func_DrawLevel(level3_Step, Color_level3, 10);
         
        //}

        //if (isLevel4)
        //{
        //    func_DrawLevel(level4_Step, Color_level4, 10);
        //}
    }

    void OnPostRender()
    {
        if (isLevel1)
        {
            func_DrawLevel(level1_Step, Color_level1, 0);
        }

        if (isLevel2)
        {
            func_DrawLevel(level2_Step, Color_level2, 10);

        }

        if (isLevel3)
        {
            func_DrawLevel(level3_Step, Color_level3, 10);

        }

        if (isLevel4)
        {
            func_DrawLevel(level4_Step, Color_level4, 10);

        }


        //if (isLevel1)
        //{
        //    //func_DrawLevel(level1_Step, Color_level1, 0);

        //    StartCoroutine(draw_Line(level1_Step, Color_level1, 0));
        //}

        //if (isLevel2)
        //{
        //    //func_DrawLevel(level2_Step, Color_level2, 10);
        //    StartCoroutine(draw_Line(level2_Step, Color_level2, 10));
        //}

        //if (isLevel3)
        //{
        //    //func_DrawLevel(level3_Step, Color_level3, 10);
        //    StartCoroutine(draw_Line(level3_Step, Color_level3, 10));
        //}

        //if (isLevel4)
        //{
        //    //func_DrawLevel(level4_Step, Color_level4, 10);
        //    StartCoroutine(draw_Line(level4_Step, Color_level4, 10));
        //}

    }
}

댓글 없음:

댓글 쓰기

git rejected error(feat. cherry-pick)

 문제 아무 생각 없이 pull을 받지않고 로컬에서 작업! 커밋, 푸시 진행을 해버렷다. push에선 remote와 다르니 당연히 pull을 진행해라고 하지만 로컬에서 작업한 내용을 백업하지 않고 진행하기에는 부담스럽다(로컬작업 유실 가능성) 해결하려...