ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스파르타 최종프로젝트 5일차
    스파르타 게임 개발 2024. 7. 1. 22:49

    1. 미리 강의보기

    게임 틀은 짠 거 같고 튜터님께 보여 드린 후에 개발을 시작 해야 할 것 같아서 보여드리기 전까지 JSON이나 도움 될만한 강의들을 봐야겠다.

     

    사운드매니저의 사용법이 좀 다른 것을 볼 수가 있다. 

    기존에 강의에서 나왔던 것은 오브젝트풀을 이용한 사운드매니저였는데, 여러 객체들이 본인들의 효과음을 가지고 있고 사운드가 필요할 때 본인들이 효과음을 매개변수로 넣어서 사용하던 방식이였다. 

     

    지금 해설강의에서는 사운드매니저가 모든 사운드를 갖고 있고, enum을 활용하여 다른 오브젝트들이 효과음을 호출 했는데, 어떤 것이 더 좋을까를 고민 해보고 선택 해야 할 것 같다. 

     

     

    2. 코드 수정

    튜터님 오시기전까지 강의 봐두려고 했는데, 오늘 오시자마자 코드 봐주신다고 하셔서 코드부터 수정을 하기로 했다. 

     

    먼저 유닛 클래스다. 

     

    나는 현재 유닛을 만들려고 하면 Unit클래스를 상속 받고 데이터를 일일히 입력을 해야 했다. 

    이런식으로

     

    하지만 이렇게 할 경우에 매번 변수들을 입력 해야 하고, 빠뜨리는 것도 있을 수가 있다. 어떻게 하면 좋을까 생각 하다가 System.Serializable을 사용해서 만들어보기로 했다. 

     

    이렇게 만든 다음에 만드려는 유닛에 이 UnitDataList를 만들어주고 유니티에디터에서 값을 넣어주면 된다.

    적용 된 에디터의 모습

     

    이렇게 유닛 만드려면 Unit 상속 받고 DataList만 생성 해주면 되게 했다. 그리고 이렇게 코드를 바꿨으니까 코드가 적용 되는 부분들도 바꿔주면 된다. 

    나중에 유닛이 갖고 있어야 할 데이터가 늘어나면 이 DataList에서 추가만 하면 될 것 같다. 

     

    그리고 현재 부모클래스에 있는 데이터 초기화 하는 함수를 이 자식 클래스에서 했는데 이렇게 할 경우에 조금 번거로울 것 같다 느꼈다. 

     

    나중에 클래스가 많아지면 이 함수들 전부 다 찾아내서 변경을 해줘야 한다. 

    굉장히 문제가 되는 방법이라고 생각이 든다. 이 부분을 고치고 싶었다. 

     

    어떻게 할 까 하다가 DataList에 함수를 넣어버리는 것으로 해야겠다 싶었다.

     

     

    이 다음에 매개변수로 현재 데이터리스트와, base 데이터 리스트를 넣으면 된다. 

     

    그런데 여기서 또 마음에 들지 않는 것이 생겼다. 

    일단 함수를 넣은 것부터 클래스명이 바뀌어야 한다. 그리고 클래스가 클래스를 2개나 들고 있게 되는 것 같은데 이거 별 문제 없나? 

     

    그 다음에 함수를 사용 할 때 보면 

     

    이렇게 사용 하게 되는데 여기서 baseData.이 아닌 curData. 으로 해도 문제가 없다. 

    이러면 이걸로 해도 되고 저걸로 해도 되는 상황이라 조금 별로 인 것 같다.

     

    코드중복같은 느낌이 든다. 함수를 따로 만들까 고민이 된다. 하지만 데이터가 추가 될 경우에 나중에 찾기가 힘들어질 수 있기 때문에 이게 더 나을 것 같긴 하다. 

     

    나중에 더 좋은 방법이 생각 나면 그 때 또 바꾸는 것으로 하고, 이렇게 코드 구조를 바꿨으니까 적용 되는 부분들도 다 바꿔 줘야 한다. 그것부터 바꿔준다. 

     

    //

    그리고 코드를 바꿔주면서 보니까 새로운 것을 또 찾았다. 

     

    이건 오브젝트 풀에서 생성이 된 유닛들의 데이터를 소환 한 유닛의 데이터로 바꾸는 함수인데 일단 외관상 보기에도 좋지 않고, 확장성을 고려 하였을 때도 좋지 않은 것 같다. 

     

    추가가 된 게 무엇인지 확인 하기 어려워질 수 있다. 

     

    그래서 이 함수도 데이터를 입력 하는 것으로 옮겨주면 좋을 것 같다. 

     

     

    ///

    함수를 바꾸면서 깨달은 것이 있다....

     

    유닛을 소환 할 슬롯에 데이터를 저장 할 때 그냥 데이터만 저장 시키고 그 데이터로 초기화 하면 됐었다.. 

    그러니까 SO처럼 클래스를 그냥 데이터만 int, float 이런 것만 남겨두고 그 클래스를 선언하고 접근 하면 됐었는데

     

    나는 유닛을 상속 받고 그 상속받은 유닛의 객체로 오브젝풀에서 나오는 애들을 바뀌게 했다. 

    괜히 복잡한 방법을 썻다. 

     

    그냥 유닛데이터클래스 하나 따로 만들고 그 값만 바뀌게 하면 됐었다.. SO처럼..., 

    역시 머리가 나쁘면 몸이 고생한다.. 그냥 XX쇼 했다..,

     

    이렇게 쉬웠던 걸 왜 고렇게 했지.. 

    함수 내용을 아래처럼 바꿨다.

     

    조금 더 손 봐야 할 것 같긴 한데 일단 한 게 아까워서라도 했던 거랑 같이 쓸거다. 

    결론적으로는 아직 상속받은 유닛의 데이터로 바꾸는 건 똑같다. 

     

    비효율적인 것 같긴 한데 한 게 아깝다. 나중에 MonoBehaviour를 상속 안 받아도 Animation이나 등등을 갖고 있을 수 있다라는 걸 알게 되면 싹 다 다시 바꿔야겠지?... 

     

    아무튼 이런 식으로 해서 코드를 수정 하였다. 

     

    처음 시작은 데이터를 일일히 변수명부터 입력 하기 귀찮아서 시작을 한 것인데,, 나의 문제점을 찾아냈다. 

    형식이 똑같은 두 개의 함수가 만들어져 있는 것이 볼 수 있는데 사실 저 함수 두개는 좀 다르다. 아니 내용은 똑같다 ㅋㅋㅋㅋㅋㅋㅋ 아 하나 지워도 되겠네 

     

    아무튼 처음엔 데이터 입력 하는 것을 편하게 하기 위해 수정을 시작 하였으나, 클래스를 이렇게 만들고 유닛에 이 클래스를 만들어두고 SO처럼 사용하면 된다라는 아주 쉬운 방법을 터득 하게 되었다.. 

     

    나중에 클래스이름만 좀 바꾸면 될 것 같다. 함수들도 들어가 있어서,

     

    아무튼 이런 식으로 Data를 추가 하고 싶다면, 이 클래스에서 추가만 하면 되고 함수 안에 똑같이 추가만 하면 되게끔 해서 확장성이 좀 더 좋아지게 만들어 봤다. 

     

    사실 지금 보면 저렇게 함수 굳이 만들 필요도 없이 그냥 UnitDataList를 슬롯에 있는 걸로 바꿔버리면 될 것 같다. 

    아마 상속 받은 유닛의 데이터로 바꿔야 한다라고 시작을 해서 이렇게 만든 것 같다.

     

    나는 왜 유닛클래스를 상속 받고,., 그 상속 받은 클래스에 데이터를 입력하고, 그 데이터로 부모클래스에 있는 데이터를 바꾸게 한 다음에 오브젝트 풀로 소환 하는 애들을 이 데이터로 바뀌게 했을까

     

     

     

    == 나중에 다시 수정함.

    원래 구조 -> 스크립트 하나 생성 -> 유닛 상속받고 데이터 입력 -> 오브젝트 하나 생성 -> 새로 만든 스크립트 추가 -> 이 오브젝트를 버튼에 저장 -> 버튼 클릭시 오브젝트풀이 버튼에 저장 된 걸로 초기화 

     

    수정 된 구조 -> 오브젝트 하나 생성-> 스크립트추가 - > 데이터 입력 -> 새로 만든 오브젝트 추가

     

     

    /// 

    튜터님께서 보시길 이러면 SO와 다를 게 뭐냐고 물어보셨다. 

    나는 Class라 인게임 중에도 데이터를 변경 할 수 있는 거 아니냐고 답 했다. 

     

    튜터님은 그냥 SO로 초기 데이터값만 받아오면 된다라고 하셨다.

     

    그렇다. 그냥 처음부터 SO로 만들 걸 그랬다. 

     

    /////

     

     

    2.우선순위 정하기

    나는 주말과 오늘 튜터님이 오시기까지 기획과 코드수정을 하였다. 튜터님께서 빼줄 것과 뭐를 해야 할지 정해준다고 하셨다. 

     

    수동적인 인간이 된 것 같기는 한데, 튜터님께서 우선순위를 명확하게 정해주셨다. 

     

    내가 지금 당장 해야 할 것을 찾으니 마음이 편해지고 빨리 해야 할 것 같다. 

     

    가장 빨리 해야 하는 것. 0.1순위. csv 데이터 관리다. 튜터님께서 이번 주 내가 한 것을 보고, 나의 퍼포먼스를 보고 앞으로 어떻게 할 것인지 정하신다고 한다. 밤 새게 되는 것일까.

     

    일단 csv 이거부터 빠르게 공부 때려보자.

     

     

    3.CSV

    CSV는 ,와 엔터로 정리 돼 있는 아무튼 그거다.

    엑셀에 저장을 하고 엑셀을 읽는데 기획자와 협업 할 때 좋다. 

     

    사용하려면 엑셀 있어야 하는데 엑셀 시트도 가능. 

     

    CSV 느낌

    엑셀에 글을 저장 

    보통 엑셀은 

    1 원강

    이런 식으로 행 열을 기준으로 저장을 함. 

     

    뭘 저장 해둘까 나는 흠

     

    아무튼 꺼내 오는데 코드에 꺼내 올 때 

    줄 간격으로 저장을 시키고 

    그 다음에 ,간격으로 저장을 시켜서 갖고 온다. 

     

    그리고 뭐였지

     

    사용법은 알겠는데 뭘 어떻게 저장 할지가 모르겠네.

     

    처음엔 

    플레이어 스텟 능력치 

    원강     공격력   9999

                방어력   9999

     

    이런 식으로 저장 하려고 했는데 튜터님께서 다른 방법 추천 해주셨다. 

     

    캐릭터 공격력 방어력 스피드 

    원강     999      999     999

     

    훨씬 나은 것 같다. 한 번 이대로 능력치들을 저장 해보고 스크립트로 가져와서 활용 해봐야겠다. 

     

    그런데 나는 저장을 클래스 자체를 저장 할 수 있는 줄 알았는데, 생각 해보니 문자와 숫자만 저장을 할 수가 있었다. 

    문자와 숫자들만 저장 해서 활용들을 해야 한다. 그럼 스프라이트랑 그런 건 

     

     

    //노느라 시간이 늦었다. 욕심 부리다 내일을 망칠 순 없으니까 내일의 나에게 맡긴다. 합리화 장난 아니고

     

    내일 목표 : CSV 데이터 구조 잡기, 빅인티저 완벽 학습하기, 자동저장과 스크롤 기능 추가하기

Designed by Tistory.