Unity 내일배움캠프 TIL 0831 | 콘솔에서 방향키 입력으로 선택하는 UI 만들기

cheeseonrose·2023년 8월 31일
1

Unity 내일배움캠프

목록 보기
24/89
post-thumbnail

열쩡! 열쩡! 열쩡!!!!!!!!!

회의를 하면 할수록 할 일이 늘어나는 우리 팀
열정의 축복이 끝이 없다 .. !

그래도 재밌게 작업해서 좋았다 다음주에 또 팀 바뀌는거 너무 아쉽 ;ㅅ;

팀 프로젝트

UI 작업

  • 오늘 한 일은 처음부터 끝까지 UI 수정과 버그 수정의 무한 반복 ..

  • UI 작업은 다 적기에 너무 많고 지저분해서 그냥 핵심적인 로직이랑 새로 알게 된 것만 ... 기록을....

  • 방향키 입력으로 선택 가능하게 하기

    • 화살표는 ConsoleKey.UpArrow와 DownArrow로 구별하고 Enter를 눌렀을 때는 어떤 값을 선택했다는 것을 표시하기 위해 isSelected를 true로 설정해준다.
    • 키패드의 숫자로도 선택하게 하고 싶어서 ConsoleKey 값을 int로 받아와 로직을 만들었다.
      기준 값은 0번의 int 값으로 하고, 현재 누른 키에서 기준 값을 빼서 그 값을 선택값으로 설정해주었다.
      함수 로직상 선택지를 string 배열로 받아오는데, 항상 맨 뒤에는 "나가기/취소"가 들어가도록 정해놔서 만약 사용자가 0번을 눌렀고, 나가기가 가능한 경우라면 string 배열의 길이를 선택값으로 설정해준다.
      굳이 if문으로 예외처리를 한 이유는 오버로딩으로 다르게 구현한 함수에서 쓰일 예정이라.. isPossibleToExit이 true인 경우에만 선택지 string 배열의 맨 마지막(나가기)에 접근 가능하도록 했기 때문
if (Console.KeyAvailable)
{
	var key = Console.ReadKey(true).Key;
    switch (key)
    {
    	case ConsoleKey.UpArrow:
        	do selectedNum--;
        	while (isLimited[selectedNum]);
        	selectedNum = Math.Max(selectedNum, minAvailableIdx);
        	break;
        case ConsoleKey.DownArrow:
        	do selectedNum++;
        	while (selectedNum < isLimited.Length && isLimited[selectedNum]);
        	selectedNum = Math.Min(selectedNum, maxIdx);
        	break;
        case ConsoleKey.Enter:
        	isSelected = true;
        	break;
        default:
        	int pivotKeyInt = (int)ConsoleKey.NumPad0;
            int curKeyInt = (int)key;
            if (curKeyInt == pivotKeyInt && isPossibleToExit) selectedNum = maxIdx;
            else if ((curKeyInt > pivotKeyInt) && curKeyInt - pivotKeyInt <= maxIdx 
            		&& !isLimited[curKeyInt - pivotKeyInt])
            {
            	selectedNum = curKeyInt - pivotKeyInt;
            }
        break;
    }
}
  • Console.CursorTop
    • 이건 다른 팀원분이 전에 하셨던 코드로 만든 로직인데, Console.CursorTop이 버퍼 영역 내에서 커서의 현재 행 위치를 가져오는 역할이라고 한다.
      y++을 해주면서 한줄한줄 출력했었는데 이 코드가 훨씬 간결하고 보기 좋아서 참고해서 싹 수정했다 히히
string[] supermarketFrameStrArr = supermarketFrameStr.Split(new[] { "\r\n" }, StringSplitOptions.RemoveEmptyEntries);
Console.SetCursorPosition(x, y);
foreach (string str in supermarketFrameStrArr)
{
	Console.SetCursorPosition(x, Console.CursorTop);
    Console.WriteLine(str);
}



오늘은 여기까지!!
이제 야근하러 가야 됨

0개의 댓글