Adaid's Workroom

[IC] Isometric 타일맵 에디터 제작기 (6) - MouseOver된 타일 표시 본문

프로젝트/Infinite Cocktail

[IC] Isometric 타일맵 에디터 제작기 (6) - MouseOver된 타일 표시

어데이드 2018. 1. 5. 16:17

18.01.05

개발은 계속된다

MouseOver된 타일 표시

편집모드일때 마우스가 가리키는 타일을 빨간 선으로 표시하는 것을 구현하였다.



시작점의 좌표 계산이 조금 까다로웠는데 좌표의 규칙성을 찾아 계산하였다.


일단 다음과 같은 좌표계가 있다고 하자.

좌표는 (gX,gY) 꼴이다.



타일의 시작점을 가장 위의 점이라고 하자.

예를 들어 (2,1)의 시작점은 다음과 같다.



그러면 좌표와 타일의 시작점 사이의 규칙성이 보인다.



위와 같이

gX와 gY의 차가 같은 타일들의 시작점의 x좌표는 일치하고,

gX와 gY의 합이 같은 타일들의 시작점의 y좌표는 일치한다.


다시말하면,

시작점의 x좌표는 gX와 gY의 차에 비례하고,

시작점의 y좌표는 gX와 gY의 합에 비례한다.

이를 기반으로 작성된 코드이다.


    private void DrawSelectedGrid()
    {
        Handles.color = Color.red;

        //위쪽 그리드 Draw
        Vector2 startPos = initialPosition;
        Vector2 endPos = initialPosition;
 
        startPos.x += (mouseHitGridX - mouseHitGridY) * snapGridWidth;
        startPos.y -= (mouseHitGridX + mouseHitGridY) * snapGridHeight;
        endPos = startPos;
        endPos.x -= snapGridWidth;
        endPos.y -= snapGridHeight;
        Handles.DrawLine(startPos, endPos);
        
        endPos.x += snapGridWidth;
        endPos.x += snapGridWidth;
        Handles.DrawLine(startPos, endPos);

        //아래쪽 그리드 Draw
        startPos.y -= snapGridHeight;
        startPos.y -= snapGridHeight;
        Handles.DrawLine(startPos, endPos);

        endPos.x -= snapGridWidth;
        endPos.x -= snapGridWidth;
        Handles.DrawLine(startPos, endPos);
    }


이 함수는 OnSceneGUI에서 다음과 같이 실행된다.

void OnSceneGUI()
    {
        ...

        //마우스 입력 관련
        if (actionType != ActionType.NONE)
        {
            UpdateHitPosition();
            UpdateGridSelected();

            Event current = Event.current;

            if (UpdateGridSelected())
            {
                //해당 그리드 선택 표시
                DrawSelectedGrid();
                ...
            }
        }
    }

좌표 오차가 있어서 조정끝에 잘 실행되는 코드를 완성하였다.

snap 그리드 크기를 변경해도 잘 적용되는 것을 확인하였다.




Comments