ABOUT ME

도트 찍는 게임학과 졸업 예정자

Today
Yesterday
Total
  • [졸업작품] 턴제 게임을 만들자 #3 합 매니저 만들기(1)
    유니티3D/졸업작품 2023. 5. 17. 16:35

    오랜만이다.
    합 매니져의 기본 토대를 만드는데, 조건문이랑 좀 싸웠다.
    캐릭터를 클릭하여 선택하고, 캐릭터가 아닌 다른걸 클릭하면 선택을 해제하고 그래야 하는데 분기가 한두가지가 아니니, 조건과 분기를 제대로 정리하지 못해서 꽤나 애를 먹었다.
    결국 순서도까지 그리고 나서야 성공해낸 조건문 부분.......
    아직은 한 캐릭터와 한 적을 대상으로 선택하는 부분 까지만 만들었다.
    목표는 세 캐릭터의 스킬을 각각 선택하여 저장했다가 합을 진행하게 하는 것!
    갈 길이 멀다.. 열심히 하자..
     
    일단 클릭을 하는 순서를 생각해보자.
    1. 가장 먼저 플레이어 캐릭터를 클릭하고, 
    2. 플레이어가 사용할 스킬을 선택하고,
    3. 스킬의 대상이 될 적 캐릭터를 클릭한다.
    이번에는 이 일렬의 과정만 코딩해볼 것이다.

    일단 이번 내용에 사용될 함수들이다.
    위에 써놓은 순서들을 그대로 함수로 옮겼다.
    위 순서대로 클릭하지 않고, 중간에 다른 것을 클릭한다면, Reset() 함수가 실행된다.

    이 합 매니져 클래스의 선언부다.
    아마, 개발일지 #1, 2를 모두 보고 올라왔다면, 내가 만들었다고 언급한 적이 없었던, 처음 보는 클래스명이 보일 것이다.

    [EnemyBehavor]
    플레이어 캐릭터의 스킬은 여기, 합 매니져에서 플레이어가 직접 지정하지만, 적 NPC는 그렇지 않다.
    그래서 적 NPC의 스킬과 공격 대상을 대신 정해주는 AI를 이 EnemyBehavor 에 만들어 넣을 것이다.

    이 EnemyBehavor은 합 매니져 처럼 비어있는 게임 오브젝트에 달린게 아니라, 적 NPC 하나하나에 달릴 것이다.
    그렇기 때문에 EnemySet 함수에서 변수 selectedEnemy에 적 NPC의 게임오브젝트 부터 받고, 이 게임오브젝트로 부터 CharacterBehavor와 EnemyBehavor 컴포넌트를 각각 받아온다,

    주의할 점은 선언되는 변수의 개수를 줄여보겠다고 Enemy 게임 오브젝트부터 받지 않고, 무작정 CharacterBehavor 부터 받아서 enemyBehavor.gameObject.GetComponent<EnemyBehavor>(); 로 EnemyBehavor를 받으려 하면 안된다는 것이다.

    클릭 이벤트는 업데이트 함수에서 처리한다.
    마우스 클릭 이벤트 처리는 따로 설명하지 않는다. 궂이 내가 여기서 설명하지 않아도 [유니티 마우스 이벤트] 라고 치면 바로 나온다.
    중요한건 조건과 분기문인데, 처음에는 정리도 제대로 하지 않고, 그냥 생각하는대로 조건문을 집어넣었다.
    그리고 실행하는데 아뿔사, 처음 플레이어 선택은 되는데, 바로 그 다음 클릭에선 어디를 클릭하던지 무조건 클릭 여부가 리셋되어버리는 것이였다!(심지어 이미 클릭된 상태인, 본인을 클릭해도!)
    결국 조건문의 쓴 맛을 제대로 보게 되었고, 아래와 같이 분기를 정리하였다.
     

    그래, 난 상당한 악필이다. 일종의 암호화(?)라고 생각해주길 바란다.

     그리고 결국 Switch-Case 문을 사용해 완성해낸, 이번 일지의 목표다.

    이제 다음에는 [실행] 버튼을 만들어 콘솔상에서 위력비교를 진행할 수 있게 해 볼 것이다.

    점점 더 어려워지지만, 차근차근 해내어보자!

Designed by Tistory.