본문 바로가기

Unity/Unity 스파르타

14주차 - Grid Placement System

728x90

기존에 맵의 크기만큼의 배열을 생성해 마우스 포지션을 배열좌표로 변환해 배열에 오브젝트를 넣고 제거하는 식으로 구현했지만 앞으로 만들 에디터와 적합하지 않다 생각해 로직을 수정했습니다

 

타일맵의 그리드를 사용해 더 효율적으로 구현할 수 있었습니다.

   public Vector3 GetMousePosition()
    {
        Vector3 mousePot = Util.GetMouseWorldPosition(Input.mousePosition, _camera);
        Collider2D collider = Physics2D.OverlapPoint(mousePot);
        if(collider != null)
        {
            Vector3Int cellPot = floorTileMap.WorldToCell(mousePot);
            gridPosition = new Vector3Int(Mathf.FloorToInt(floorTileMap.CellToWorld(cellPot).x), Mathf.FloorToInt(floorTileMap.CellToWorld(cellPot).y));

            return gridPosition;
        }
        return gridPosition;
    }

마우스 포지션을 월드 포지션으로 바꿔주고, 마우스 포지션위치에 OverlapPoint를 사용해 Grid Plane가 있는 경우에만 마우스 포인트 위치를 반환해 마우스 인디케이터가 그리드 영역 밖으로 나가지 않게 제한했습니다.

월드 포지션으로 바꾼 마우스 포지션은 다시 타일맵의 셀 포지션으로 전환 후 Vector3Int로 만들어 다시 월드 포지션으로 바꿔줍니다.

 

쉐이더를 사용해 그리드쉐이더를 만들어 Grid Plane을 만들어 줬습니다

 

Shader에 Sup Graph를 사용해 노드를 직접 만들어 쉐이더에 넣어줍니다.

 

만든 쉐이더 노드를 사용해 투명한 그리드 쉐이더를 만들어 줍니다

728x90