이번에는
게임창에서 유닛 버튼을 눌렀을 때 똑같은 지정 유닛이 필드에 늘어나게 하는 작업,
일정시간이 지나면 지정 적군 유닛이 계속 필드에 나오게 하는 작업,
유닛은 적군과 만나면 충돌하고, 유닛은 유닛끼리, 적군은 적군끼리 충돌하지 않는 작업
을 해주려고 합니다.
1. 유닛 복제 - Instantiate
우선, 하나의 스크립트로 할 수도 있지만, 유닛과 적군이 명확히 구분되어 있다는 점과 가독성의 편리를위해 UnitSpawner, EnemySpawner 스크립트를 각각 생성해주었습니다.
각각의 스크립트에 각각의 프리팹을 넣어줄 prfUnit과 prfEnemy 변수를 생성했습니다.
먼저, 유닛은 이전에 버튼을 누르면 유닛이 SetActive(true)되도록 만들었습니다.
UnitSpawner 스크립트에서 해당 유닛의 복제를 생성해주기 위해
Instantiate() 매서드를 사용했습니다.
이렇게 하면 위 영상과 같이 버튼을 누를 때마다 해당 유닛이 필드에 복제되어 생성됩니다.
그 다음 적군은 Time.deltaTime과 Update함수를 사용해
게임시작 후 5초마다 해당 적군 유닛이 자동 생성되도록 코드를 작성했습니다.
5, 10, 15... 5의 배수의 시간(초)보다 커지게 되면 적군 유닛을 한 마리씩 생성합니다.
여기서 같다가 아니라 커지면으로 한 이유는
델타타임이 float값이기 때문에 정확히 5가 나오는 것은 확정지을 수 없기 때문입니다.
2. 충돌 - OnTrigger
위 영상처럼 유닛과 적군은 충돌하면서
유닛은 유닛끼리 겹치게 하고, 적군은 적군끼리 겹치게 해줄겁니다.
이렇게 하지 않으면 '전쟁시대' 게임과 같이 모두 줄을 서게 됩니다.
먼저, 유닛과 적군 컴포넌트에 Box Collider를 추가해줍니다.
콜라이더는 충돌체라는 뜻입니다.
그냥 이것만 추가해주고 실행하면 모두 줄을 서게 됩니다.
그걸 해결하기 위해 박스 콜라이더에서 Is Trigger를 체크하는 곳이 있습니다.
체크표시 하시면 이들은 충돌영역은 가지고 있지만 물리적인 충돌은 하지 않는 충돌체가 됩니다.
하지만 이렇게 하면 아군끼리, 적군끼리는 겹치게 되지만 정작 아군과 적군마저 관통해버립니다.
이걸 해결하기 위해 해당 코드를 작성해줄겁니다.
이동에 관련된 코드니까 이전에 만든 MovementController 스크립트에 작성합니다.
OnTriggerEnter()는 서로 다른 충돌영역이 접촉했을 때 자동으로 호출되는 함수입니다.
만약 "Unit" 태그를 가진 오브젝트가 본인과 다른 태그인 "Enemy"와 충돌영역이 겹치게 된다면
speed를 0으로 만들어서 멈춰라라는 코드입니다.
그 밑에도 같은 코드이며 서로 상대방의 Tower에 닿을 때도 멈춰야하니 똑같이 작성했습니다.
이렇게 하면 유닛끼리, 적군끼리는 겹치게 되고, 유닛과 적군은 충돌하게 됩니다.
이 충돌영역을 벗어났을 때 즉, 서로의 상대방이 없을 때 해당 유닛은 다시 이동하게 해줘야 합니다.
그래서 OnTriggerExit()함수를 사용해서 충돌영역을 벗어나게 되면
다시 speed를 1로 만들어주려 했는데 실패해서 성공하게 되면 추가 업로드 하겠습니다.
감사합니다.
'Unity > Unity 타워디펜스게임 프로젝트' 카테고리의 다른 글
[Unity 게임프로젝트] 타워디펜스게임(6) - 유닛, 체력바 추가 및 공격 기능 일부 수정 (0) | 2024.04.12 |
---|---|
[Unity Game Project] 타워디펜스 게임(5) - 유닛 공격과 이동기능 수정 (0) | 2024.03.24 |
[Unity 게임 프로젝트] 타워디펜스게임(3) - 유닛 프리팹화, 이동구현 (0) | 2024.03.18 |
[Unity 게임 프로젝트] 타워디펜스 게임(2) - 스테이지 화면, 캐릭터 화면 UI 추가 및 유닛 추가 작업 (0) | 2024.03.08 |
[Unity게임 프로젝트] 타워디펜스 게임(1) - 홈, 스테이지 선택, 설정 화면 UI작업 (2) | 2024.03.07 |