본문 바로가기
유니티5 독학 & 게임 제작

유니티5 독학하기 그 56번째 걸음-작업이 진행되는 progress (프로그래스)바 만들기 part2

by 인터넷떠돌이 2018. 7. 15.
반응형

안녕하세요?


드디어 챕터 6가 끝났습니다. 내용은 인게임 UI를 만드는 것이였는데, 이에 대한 후반부의 내용을 정리해서 어떻게 하면 작업이 진행 된다고 하는 프로그래스 바가 뜨는 것을 만들었는데, 그 내용을 포스팅 하고자 합니다.



먼저 계층뷰에서 GameManager를 선택하도록 합니다.



GameManager.cs의 스크립트를 수정하는데 먼저 위 스크린샷의 붉은색 박스안에 나와 있는 것처럼 광역 변수를 선언하도록 합니다.



이후 위 스크린샷에 보이는 것처럼 4개의 메서드를 추가해 주도록 합니다. 그리고 이어지는 작업은.....



위 스크린샷처럼 ShowElementalSwitch라는 메소드에서 제일 첫 줄에 코드를 한줄 추가해 주는 것입니다.



이제 유니티5로 돌아와서 먼저 InGame2DUI>ElementalSwitch>Fire를 선택하도록 합니다.



그리고 나서 Notify항목에서 GameManager를 드레그 앤 드롭으로 선택하게 해 놓습니다.



다음으로는 Mehod항목을 눌러서 FirePressed항목을 누르도록 합니다.




위 스크린샷처럼 불 게임 오브젝트에 FirePressed를 선택하도록 해 줍니다.



이어서 나머지 원소에서도 똑같이 맞는 메서드를 지정해 주도록 합니다.



이제 GameManager를 선택하도록 해 줍니다.



GameManager.cs라는 스크립트에서 위 스크린샷과 같이 버튼을 활성화 하기 위한 메소드를 만들어 주도록 합니다.



여기서는 이제 버튼이 현재 선택되어 있는 파워소스의 원소와 같다=즉, 이미 선택된 내용과 같은 버튼인 상황이라면, 그 버튼을 비활성화 시키기 위한 메소드입니다.


여기서 하나 짚고 넘어가야 하는 것이 하나 있는데 바로 foreach 문이라는 반복문입니다. 먼저 이 반복문을 사용하기 위해서는 배열을 선언해야 할 필요성이 있다고 합니다.




먼저 C++에서는 배열을 int name[10]={0,1,2,3.....} 이런 식으로 선언을 하게 되는데, C#에는 조금 다르게 선언을 합니다.


int[] name={0,1,2,3......} 이런 식으로 선언을 하게 됩니다.


그럼 foreach는 어떻게 사용 하느냐 하면, 먼저 저런 식으로 사용을 한다고 합니다.


foreach(배열의 변수 타입 변수 in 배열명)

{

  Console.WriteLine(변수);

}


이렇게 해주면, 위 예시에서는 배열안에 있는 모든 변수를 모두 하나하나 콘솔에 나타나게 해주는 식으로 반복문이 진행이 되게 됩니다. for문과는 다른 식으로 사용이 가능한데, 이 사용법은 배열을 가지고서 하는 작업이 있다고 하면, 무언가 유용해 보인다는 생각이 듭니다.



이제 PowerSource.cs라는 스크립트에서 위 스크린샷과 같은 빨간색 박스의 내용을 추가해 주도록 합니다. 이 내용은 파워소스를 눌렀을 경우 어느 시점에서 모든 버튼을 다시 활성화 하며, 다시 비활성화 하느냐인데, 위에서 정의한 EnableAllButtons()와 SetButtonState()메서드를 여기서 사용하게 되는 것입니다.



이제 이전에 만들어 놓은 메뉴 씬을 열어야 하는 단계에 들어가야 합니다.



그리고 여기서는 MenuManager.cs에서 위 스크린샷처럼 public Camera uiCamera;와 public GameObject background;라고 광역변수를 선언해 주도록 합니다.



다음으로는 UIRoot라는 게임 오브젝트를 선택하도록 합니다.



위에서 선언한 그대로 새로운 변수를 지정해 줘야 하는 항목이 인스펙터뷰에 나와있는 것을 볼 수 있습니다.



이렇게 Camera와 background라는 계층뷰에 있는 게임 오브젝트를 드레그 앤 드롭으로 놔주도록 합니다.



이제 MenuManager.cs 스크립트에서 EnterGameRoutine이라고 하는 코루틴을 추가해 주도록 합니다.




다음으로는 이전에 이미 있는 LoadGameScene()라는 메소드에 코루틴을 실행되도록 합니다.



그런데 어디선가 에러가 발생했다는 것을 알 수 있었습니다.



알고보니 위 스크린샷ㄹ에 있는 GameManager.cs 상에서 에러가 발생한 것이였습니다. 위에서는 if문 위에 코드를 추가했지만, 이번에는 if문 뒤에 코딩을 하는 것으로 했습니다.



그런데 유니티5에서 게임을 실행시켰을때, 위 스크린샷처럼 프로그래스 바가 사라지지 않는 문제점이 발생하는 것을 볼 수 있었습니다. 이게 왜 이런가 했더니.......



원래는 삭제해야 하는 게임 오브젝트를 산제하지 않아서 발생한 문제였습니다. 이 문제를 해결하기 위해서 이미 프리펩으로 다 만들어 졌으니, 여기 계층뷰에 있는 게임 오브젝트 Progress는 삭제하도록 합니다.



이제 챕터6를 끝내서 여기서 인게임 UI를 만드는 것-정확히는 2D UI를 만드는 데는 성공했습니다. 이제 여기서 챕터7을 봐야 할지 말아야 할지 고민이 되기는 합니다만, 아무튼 조금은 살펴보고 나서, 좀 더 활동에 들어가 보도록 하겠습니다. 그럼 이것으로 이번 포스팅은 마치도록 하겠습니다.


반응형