ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스파르타 최종프로젝트 8일차
    스파르타 게임 개발 2024. 7. 4. 23:48

    1. 화면 드래그 기능 보완하기

    현재 화면을 드래그 할 때, UI위에서 드래그를 해도 카메라가 움직인다. 

    이 부분을 보완 해줘야 한다. UI위에 있는 기능들을 실행 할 때 카메라가 움직이면 안 되기 때문이다. 

     

    내가 사용한 방법은 IPointerEnterHandler 이라는 유니티가 만들어둔 기능을 활용 했다. 

    이건 마우스가 UI위에 올라갔을 때 호출이 되는 인터페이스인데 UI위에 올라가면 bool값을 fals 해줘서 카메라가 움직이지 않게 했다. 

     

    이 Enter 말고도 Exit나 여러가지가 있다. Drag도 있고 Click도 있고 다양하다. 

    사용하려면 이 IPointerEnterHandler 을 상속 받아서 재정의를 통해서 실행 할 내용을 만들어 주면 된다. 

     

    성능이 안 좋진 않을까 알아봤는데 딱히 그런 건 없는 것 같다. 

     

    그리고 주의 할 점이 있는데 이 Interface를 구현 한 script를 갖고 있는 오브젝트의 범위로 영역을 계산한다. 

    이 말은 이 Script를 갖고 있는 오브젝트의 영역 안에 UI가 있어야 하고 그 UI에 Enter가 됐을 경우에 이 Event가 호출이 되는 것이다. 

    나는 처음에 Player 오브젝트에 이 스크립트를 넣어놓았기 때문에, UI위에 포인터가 가도 호출이 안 됐었다. 

    그래서 canvas에 스크립트를 옮겨서 canvas의 영역으로 바꿔준 후에 정상적으로 작동이 되는 것을 확인 했다.

     

     

    이렇게 해서 일단 되게끔은 했는데 나중에 바꿔야 한다. 

     

    나중에 플레이를 마우스로 하는 게 아니라 모바일로 터치를 하는 식으로 할 것이기 때문에 이 Event를 호출 할 수 없어서 나중에 Ray를 쏘는 것으로 바꿀 것 같다. 

     

    일단 수정하는 것은 나중에 하고 다른 것들부터 구현부터 해본다.

     

    https://code-piggy.tistory.com/entry/Unity-IPointer-Interface

     

    Unity - IPointer Interface(IPointerEnterHandler등)

    IPointer Interface IPointer Interface를 사용하기 위해 using UnityEngine.EventSystem을 추가해주어야 한다. 마우스 이벤트를 처리하는 인터페이스이다. using UnityEngine.EventSystems; 1. IPointerEnterHandler 마우스의 커서

    code-piggy.tistory.com

     

     

     

    2. 클릭 시 유닛 나오게 하기.

    지금까지 고민 되는 것이 있다.

     

    클릭 했을 때 유닛을 소한 하게 할 것인지, 아니면 땅을 한 대 공격만 할 것인지가 고민이다. 

    뭐가 됐든 기본적인 구조는 비슷 할 것 같기에 일단 유닛을 소환 하게 하는 것으로 만들어 볼 것이다.

     

    중요한 점은 클릭을 했을 때 클릭을 한 땅의 위치에 있는 Spawn 위치에 소환 되어야 한다.

    일단 유닛을 소환 하는 것으로 시작을 해본다.

     

    ///

    Ray를 설정 하다가 화면 드래그 조정 하는 부분을 수정 했다.

     

    현재 UI 위에 마우스가 올라가면 드래그가 안 되게 했고, UI에서 벗어나면 다시 드래그가 가능 해지게 했는데, 이것을 UI를 클릭 하면 드래그가 안 되게 바꿔줌으로써 조금 더 자연스럽게 수정 했다.

     

    그런데 지금 확인 해보니 UI를 클릭을 해야 해서 조금 이상 하다. 나중에 클릭 말고 마우스가 눌리기만 해도 적용 되게 수정 해줘야겠다. 지금은 마우스를 눌렀다가 떼야 적용 된다. 

    == 

    눌렀을 때 바로 적용 되는 것으로 바꾸니 나의 생각대로 기능이 작동한다. 이제 나중에 클릭이 아닌 터치로 바꿔주면 될 것 같다.

     

    클릭시 플레이어 공격을 어떻게 할 것인지 정했다. 

    클릭 했을 경우에 가까운 흙에서 소환이 되게 하고 흙 다 부수면 유닛처럼 걸어가서 계속 부수게 만들어 볼 것이다. 

     

    먼저 클릭 이벤트를 호출 하기 위해서 Ray를 써야 하고, rya에 맞을 영역부터 준비를 해야 했다. 

    시작땅에 제일 크게 클릭 맞을 영역을 만들어 줬다.

     

    저 영역을 클릭 했을 경우에 저 영역이 갖고 있는 Spawn 지역에 유닛들이 소환 되게 할 것이다. 

     

    그런데 UI로 땅을 가리고 있어도 땅이 클릭이 되어서 UI에도 컬라이더를 추가 시켜줬다.

    UI Image

     

    화면 클릭시 플레이어 캐릭터가 나오게 할거다. 이 때 가장 가까운 블록에 생성이 되게 해야한다. 

     

    나는 층마다 Ray를 쏘는 블록을 두고, 클릭시 이 블록이 Ray를 쏘게 해서 충돌 된 위치를 갖고온 다음에 플레이어 유닛이 그곳에 생성 되게 하려고 했다. 

     

    그래서 블록들을 만들어서 위치를 잡아주고 나의 클릭을 받아낼 충돌오브젝트도 만들었다.

     

    그런데 뭔가 코드를 잘 못 적었는지 오류가 난다. 

     

    일단 문제원인이 될만한 것들을 조금 알 것 같은데, 오늘 더이상은 무리고 내일 일어나서 마무리 해야겠다.

    요즘 들어 나태함에 좀 빠진 것 같다. 정말 큰일이 될 수 있다. 정신 빡 잡자.

     

     

    내일목표 : 클릭 이벤트 마무리, 플레이어 데이터 추가, 골드 적용, 유닛 강화, 플레이어 강화, 코드 리팩토링, 엘리베이터 기능 추가, 유닛 자동생성 추가

     

Designed by Tistory.