-
(26) 각종 수정 사항 + 아이템 유닛 추가 제작Galaxy Ball/2. 싱글플레이 - 스토리모드 2024. 6. 13. 17:10
각종 수정사항들에 대해서 적고 넘어가겠다
아이템을 하나 추가했다. 이름은 Big. 말 그대로 처음부터 큰 사이즈의 구체가 생생된다
확실히 구체가 크다보니 조준해서 적 유닛을 맞추는게 수월해진다
Small과 Twice 아이템의 색상을 변경했다. Big도 보면 알다시피 최대한 다양하게 색을 잡아서
게임판이 다채롭게 보였으면 해서 이렇게 변경하였다
싱글플레이에 사용될 아이템은 이렇게 5가지이다. 냉정하게 나머지 아이템들은 플레이어에게 도움이
되지 않는다고 판단했다.
무적 아이템인 Invincible 아이템 코드도 수정해주었다
이제부터 적 유닛도 Invincible 아이템에 맞으면 무조건 파괴된다
하지만 중간보스급은 다르다. 밸런스를 위해 파괴대신 총 4의 데미지를 입히는것을 했다
----------------------------------------------------------
지금은 아직 기재하지 않았지만 게임의 스토리는 주인공이 스테이지를 하나씩 하나씩 클리어해 나가며 중간중간
배치된 특수 유닛을 파괴해야지만 아이템 하나하나의 능력을 사용할 수 있다
글로 적으니까 무슨 말인지 나도 잘 이해가 안가는데, 예를 들자면
위에 보이는 이 아이템들이 게임하는 중간중간에 랜덤으로 생성이 되고, 거기서 아이템을 획득하면 사용할 수 있게
활성화가 되는데 이걸 처음부터 전부 줘버리면 게임의 밸런스가 무너지고 스토리의 전개도 애매해진다
그러니 스테이지15에 Twice 아이템을 발사하는 적 유닛을 최초로 제거하면 그때부터 랜덤생성에 Twice 아이템이
포함되는것이다.
그러니 일정 스테이지마다 배치되어있는 아이템을 발사하는 특수 유닛을 잡고 클리어 해야지만 그 다음 스테이지부터
그 유닛이 쓰던 아이템을 나도 사용할 수 있다는뜻
이 시스템을 구현하기 위해서는 2가지가 필요하다
1. 특정 아이템만 발사하는 유닛과 그 유닛용 아이템
2. 특정 스테이지 이상 클리어해야 아이템 생성시키기
1번부터 만들어보자
우선 유닛은 아이템의 색깔에 맞춰 몸체 색도 변경해주었다. 이름은 앞에 Icon의 I를 붙이는걸로 통일했다
그리고 유닛이 사용할 아이템이다. 겉보기에는 똑같아 보이지만 태그가 적 총알용 태그로 되어있는것을 볼 수 있다
원래 쓰던 태그로 해버리면 데드존에 닿을시 바로 패배판정이 나기 때문에 이렇게 따로 만들어줘야 한다
그리고 만들어놓은 유닛 Muzzle(총구)에 만들어놓은 총알 프리팹을 넣어주기만 하면 된다
2. 특정 스테이지 이상 클리어해야 아이템 생성시키기
만약 5번 스테이지에 나오는 IEnemy1을 파괴하고 클리어 했다 쳐보자.
그럼 6번 스테이지부터는 IEnemy1이 사용하던 아이템이 랜덤생성 목록에 추가되어야 한다
우선 아이템이 등장할 순서는 사진만 봐도 알다시피
Big -> Small -> Twice -> Endless -> Invincible 순이다
우선 임의로 5번 스테이지 클리어시 첫번째 아이템, 10번 클리어시 두번째, 15번 클리어시 세번째 아이템까지
랜덤생성 목록에 추가하는걸로 하겠다
using UnityEngine; public class SPRandomGenerate : MonoBehaviour { public GameObject[] spherePrefabs; public GameObject background; public float minSpawnTime = 7f; public float maxSpawnTime = 12f; private float nextSpawnTime; private Collider2D backgroundCollider; private StageGameManager stageGameManager; void Start() { nextSpawnTime = Time.time + Random.Range(minSpawnTime, maxSpawnTime); backgroundCollider = background.GetComponent<Collider2D>(); stageGameManager = FindObjectOfType<StageGameManager>(); if (stageGameManager == null) { Debug.LogError("StageGameManager를 찾을 수 없습니다."); } } void Update() { if (Time.time >= nextSpawnTime) { SpawnSphere(); nextSpawnTime = Time.time + Random.Range(minSpawnTime, maxSpawnTime); } } void SpawnSphere() { Vector2 min = backgroundCollider.bounds.min; Vector2 max = backgroundCollider.bounds.max; Vector3 randomPosition = new Vector3(Random.Range(min.x, max.x), Random.Range(min.y, max.y), 0f); int maxIndex; // StageClearID에 따른 프리팹 인덱스 결정 if (stageGameManager.StageClearID <= 5) { maxIndex = 1; // 첫 번째 프리팹만 사용 } else if (stageGameManager.StageClearID <= 10) { maxIndex = 2; // 첫 번째와 두 번째 프리팹 사용 } else if (stageGameManager.StageClearID <= 15) { maxIndex = 3; // 첫 번째, 두 번째, 세 번째 프리팹 사용 } else { maxIndex = spherePrefabs.Length; // 모든 프리팹 사용 } int prefabIndex = Random.Range(0, maxIndex); Instantiate(spherePrefabs[prefabIndex], randomPosition, Quaternion.identity); } }
게임판에 일정한 시간폭 안에 아이템을 랜덤생성하는 스크립트이다.
이게 멀티플레이 개발할때 만들어두었는데 이 기능을 위해 이번에 싱글플레이용으로 새로 만들었다.
이번에도 역시 어디까지 클리어했나 구별할 수 있는 변수 StageClearID를 사용한다
위 사진처럼 우선 배열에는 아이템들을 전부 집어넣고 StageClearID가 5가 넘었다면 배열의
첫번째에 있는 아이템만, 10이 넘었다면 두번째 요소까지 랜덤생성하도록 만들었다
한번 StageClearID를 10으로 놓고 실험해보자.
랜덤생성되는 아이템이 Small, Big 둘중 하나만 나오는것을 확인할 수 있다
'Galaxy Ball > 2. 싱글플레이 - 스토리모드' 카테고리의 다른 글
(28) 메인맵 제작#4 + 수정사항 (2) 2024.06.14 (27) 스테이지 제작 #1 (0) 2024.06.14 (25) 메인맵 제작#3 (0) 2024.06.12 (24) 메인맵 제작#2 + 스테이지 제작 준비 (1) 2024.06.11 (23) 메인맵 제작#1 (0) 2024.06.10