[Unity][3D-Game] Tower Defense Game (7)

suhan0304·2023년 11월 30일
0
post-thumbnail

강의영상 (9)


개발

미사일 런처 임포트

미사일 런처 임포르를 위해 모델 fbx을 불러온 후 씬창에 드래그해서 배치한 다음 적절한 재질을 선택해서 색을 설정해준다.

  • Scale Factor을 0.5로 설정
  • Rig 애니메이션 None으로 설정

미사일 런처 초기설정

위와 같은 재질로 설정했다. (미사일은 잠시 비활성화) 이제 미사일 런처에 Turret 스크립트를 추가해준다.

  • Range : 30로 설정
  • Fire Rate : 0.25로 설정

HEAD를 선택해서 자식 오브젝트로 PartToRate를 만들고 transform을 초기화하면 헤드의 중앙으로 PartToRotate를 바로 만들 수 있다.

이제 PartToRotate를 헤드에서 꺼낸 후에 초기각도를 설정하고 다시 Head를 PartToRate의 자식 오브젝트로 넣어주자.

이 때 PartToRate의 Y=-90으로 설정한다. 터렛의 초기각도에 관한 설정이 궁금하면 해당 문서를 참고하자

PartToRotate의 Y 각도에 따라 머리가 잘 회전되는 것을 확인할 수 있다.

이제 PartToRotate의 자식 오브젝트로 FirePoint를 만들어서 미사일이 발사될 위치에 위치시킨다.

이제 생성한 오브젝트들을 미사일 런처에 추가해놨던 스크립트에 드래그드랍해서 초기화 시켜준다. 미사일은 다음에 추가하고 일단은 기존에 제작된 Bullet Prefab을 드래그 드랍해서 초기화 시킨다.

이제 모든 설정이 끝났으면 해당 미사일 런처를 프리팹에 드래그드랍해서 프리팹화시킨다.

상점 UI 업데이트

상점에서 이제 미사일 런처를 설치할 수 있도록 수정한다. 기존의 AnotherTurret을 MissileLauncherItem으로 바꾼 후에 sprite와 프리팹을 수정해준다.

버튼의 사이즈가 일관성 있도록 Preferred Width, Height을 170으로 조절해주었다.

터렛 설치 로직 업데이트

이제 미사일 런처 건설이 표시되도록 기존 코드들을 재작명해준다.

Shop.cs

using UnityEngine;

public class Shop : MonoBehaviour
{
    BuildManager buildManager;

    private void Start() //빌드 매니저 참조를 위해 instance 초기화
    {
        buildManager = BuildManager.instance;
    }
    public void PurchaseStandardTurret() //기본 터렛 건설
    {
        Debug.Log("Standard Turret Selected"); //테스트용 출력
        buildManager.SetTurretToBuild(buildManager.standardTurretPrefab); //기본 터렛을 건설하도록 설정
    }
    public void PurchaseMissileLauncher() //미사일 런처 건설
    {
        Debug.Log("Missile Launcher Selected"); //테스트용 출력
        buildManager.SetTurretToBuild(buildManager.MissileLauncherPrefab); //다른 터렛을 건설하도록 설정
    }
}

스크립트에서 단어를 선택하고 Ctrl+R 두 번, 또는 우클릭 후 이름 바꾸기하면 전체 코드에서 해당 단어를 동시에 재작명 할 수 있다.

리팩토링 과정에서 해당 방법을 사용하면 빠르고 효율적으로 재작명 할 수 있다.

스크립트를 수정하면서 끊어진 연결을 다시 연결해주자. GameMaster에서 AnotherTurret 프리팹을 아까 만들어놓은 MissileLauncher 프리팹으로 변경해준다. 그리고 Shop의 MissileLauncherItem 버튼의 이벤트도 PurchaseMissileLauncher로 다시 연결해준다.

이제 모든 연결이 끝났으면 실행을 시켜보자.


기존의 Turret 스크립트, Shop과 BuilManager 스크립트를 잘 설계한 덕분에 미사일 런처 또한 임포트 시키고 모델을 수정하는것을 제외하고는 크게 손이 가지 않았다.

개발하기에 앞서 기초 설계를 단단하고 치밀하게 해야하는 이유를 상기시켜준다.

기본적인 설계 없이 필요할 때마다 여러 스크립트를 방문하면서 참조하면서 개발을 진행하면 스파게티 코드가 될 가능성이 높다. 그렇게 되면 무엇인가 컨텐츠를 추가함에 있어서도 어려움을 겪게 될 것이고 추후에 진행될 리팩토링 과정에서 내가 짠 코드도 이해하지 못 할 수도 있다.

따라서 연관성이 없는 부분을 분리하는 "모듈화"를 습관화 하여 코드의 재사용성도 높이고 수정이나 추가함에 있어서 확장성이 더 뛰어난 방향으로 코딩을 하도록 하자.

그렇다고 모든 객체마다 모듈화를 시키는 것 또한 지양해야 한다. 적절함이 항상 중요함을 잊지 말자.


결과물

profile
Be Honest, Be Harder, Be Stronger

0개의 댓글