복습: 모듈식 포탑
Coddy Unity 여정의 Unity 게임 아키텍처 섹션에 포함된 레슨. 50개 중 5번째.
챌린지
쉬움부품을 사용해 테스트 사격장의 두 포탑을 만드세요. TurretControl.cs는 이미 좌우 화살표 키로 각 포탑을 회전시키고, Shell.cs는 포탄을 앞으로 날려 보냅니다. 장면에서 Turret1에는 Cannon과 포탄 4개가 든 Ammo가, Turret2에는 TwinCannon과 포탄 3개가 든 Ammo가 제공됩니다. 다음 부품을 작성하세요:
- Ammo: 공개 int
shells와 공개 메서드bool Take()를 작성하세요. 포탄이 남아 있으면 하나를 사용하고true를 반환합니다. 포탄이 없으면 객체의 이름과is empty를 로그에 기록합니다. 예를 들어Turret2 is empty와 같이 기록한 뒤false를 반환합니다. - Weapon: 항상 Ammo와 함께 사용하는 추상 컴포넌트로, 공개
shellPrefab(GameObject), 공개 floatcooldown(Inspector에서 1로 설정), 공개 메서드Pull()을 작성하세요. 쿨다운 중에 당기면 아무 일도 일어나지 않고 포탄도 사용하지 않습니다. 그렇지 않으면Take()가 포탄을 내어줄 때 쿨다운이 시작되고Fire()가 실행됩니다.Fire()는 각 무기에서 작성하는 추상 메서드입니다. - Cannon은 포탑 앞 1단위 지점에서 포탄 하나를 발사합니다. TwinCannon은 포탄 하나의 탄약으로 두 발을 발사합니다. 발사 지점에서 왼쪽으로 0.4, 오른쪽으로 0.4 떨어진 위치에서 발사합니다. 포탄은 포탑과 같은 방향(
transform.rotation)으로 회전한 채transform.position + transform.rotation * offset에서 시작합니다. 여기서offset은 포탑 기준으로 본 위치이며, 예를 들면new Vector3(0f, 0f, 1f)입니다. - TurretControl에서 Space 키를 누르면 포탑이 장착한 Weapon의 방아쇠를 당깁니다.
Play를 눌러 두 포탑을 회전시키고 발사해 탄약을 모두 소진한 다음 Check를 누르세요.
직접 해보기
using UnityEngine;
// 모든 포탑 무기가 공유하는 것.
public class Weapon : MonoBehaviour
{
}