-
(12) 각종 수정 & 싱글플레이 패배조건 추가Galaxy Ball/2. 싱글플레이 - 스토리모드 2024. 5. 23. 17:45
본론에 들어가기 전, 각종 사소한 수정부분을 기술하겠다
가장 먼저 게임을 개발하는 내내 느낀게 있다면 화면이 너무 비좁다는것이다.
만들어놓은 적 유닛만 14개인데 정작 플레이 화면에는 2~3개만 놓아도 꽉 차 보인다
그래서 원래는 카메라를 더 축소시켜야하나 생각했었는데 그럴게 아니라 모든 오브젝트들을
전체적으로 더 작게 만들면 되는 일이었다
그래서 고정 구체도 작게 만들고
초소화 유닛을 제외한 모든 유닛의 크기를 0.7로 줄여주었다
아 드디어 숨이 트인다
이제 유닛들도 폰트사이즈를 조절할 수 있다. 총알 폰트사이즈는 해놓고 이건 왜 여태 안했나 싶다
근데 이렇게 해놓고 보니 굳이 IsShowHP라는 기능이 필요가 없었다
그냥 폰트사이즈를 0으로 해두면 보이지 않는것이었다
귀찮아서 걍 냅둘려다가 코드가 한줄이라도 주는게 좋을테니 빼주었다
적 총알의 색을 기존 회색에서 전부 빨강으로 바꾸어주었다
플레이를 할때 검파랑보다는 빨강파랑 조합이 더 보기 좋고 산뜻해보인다
------------------------------------------------------------------------------
그리고 마지막으로 패배조건을 하나 더 추가해보려고 한다
멀티플레이에서의 패배조건은 딱 하나. 내가 날린 구체가 팽창하기전, 동적인 상태에서
내 Deadzone에 닿았을 때였다
하지만 서로 공을 날릴수 있는 멀티 모드와 달리 혼자서 적을 상대해야하는 싱글플레이 모드에서는
꼼수가 가능하다는것을 깨달았다.
만약 너무 코너에 몰려 더 구체를 발사하기 힘들어진다면 그냥 firezone에서 연속 클릭을 하면되는것
이런 식으로 말이다
그리고 굳이 이런 꼼수가 안쓰더라도 그냥 아무것도 하지않고 가만히 있어 본다고 가정해보자
그럼 적 유닛들만 열심히 총알을 발사하다가 나중엔 플레이 영역 전체가 총알로만 가득 차버리게 될것이다
뭐 크게 문제되진 않겠지만 보기 좋아보이지 않고 확실히 억제하는 시스템이 하나 필요해 보인다
그래서 생각해본게
적 유닛 총알 + 내 총알 > 12
이 조건이 충족한다면 게임을 패배 판정 하는것이다
해당 시스템을 구현하기 위해 간단한 코드를 추가하였고, 해당 코드는 당연히 싱글플레이 인게임씬을 전체 제어하는
"SPGameManager" 그 중에서도 태그를 실시간으로 세어줘야 하니 Update 메서드 안에 넣어주었다
여기서 쓰인 핵심 코드는 FindGameObjectsWithTag라는 기능이다
그래서 태그가 "EnemyBall" 혹은 "P1ball" 이라면 totalBalls라는 int타입 변수에 더해주고
만약 이 totalBalls라는 변수값이 12를 초과해버리면 "Fail" 씬변환을 해버리는 것이다
그래서 이렇게 12개가 넘어가버리면 씬 변환이 자동으로 되는것이다
--------------------------------------------------
영상에서 보이는 씬은 싱글플레이 모드에서 패배판정에 만족했을때 넘어가는 "Fail"씬이다
전글에서 만든 선택지에 이어 한가지 선택지가 추가되었다
오른쪽에 보이는 하늘색 구체는 말그대로 랜덤한 씬으로 이동시켜주는 선택지로
1. 인트로씬
2. 스테이지 선택씬
3. 창고 씬
4. 미니게임씬
5. P1 Win 씬
이 5가지 씬 중 랜덤으로 하나를 정하여 이동시켜줄 생각이다
구현은 간단하다. Random.Range(1,6)으로 랜덤한 값을 가지는 변수를 만들어준뒤
숫자의 값에 따라 변환하는 씬을 바꿔주기만 하면 된다
이 5개중 3~5번째에 있는 인트로, 스테이지, P1 Win 씬은 기존에 있던 씬을 가져오는 것이지만
1,2번째에 있는 Example, Design은 처음 보는것들이다. 이번글에서는 이것까지 설명하고 마치겠다
첫번째 Example 씬 같은 경우는 사실 기존에 있는 씬이었다.
이름만 들어도 알 수 있듯이 내가 개발을 하는내내 연습장용으로 쓰던 씬이었는데
이스터에그 같은 느낌으로 버릴까 고민중이던 이 씬을 사용하기로 했다
하지만 돌아갈수 있는 수단을 마련해줘야 하니 좌측상단에 버튼을 추가하여 저 버튼을 누르면
스테이지 선택씬으로 돌아갈수 있게 해주었다
2번째 Design씬은 첫번째와 달리 내가 임의적으로 추가한 씬이다
1번째가 이스터에그 느낌이라면 2번째는 코너속의 코너같은 미니게임 느낌으로 만들어보았다
컨셉은 간단하다. 가운데에 있는 뒤로가기 버튼을 누르기만 하면 되는것
이런 느낌이다. 실전은 클릭이 아니라 터치이기 때문에 훨씬 더 쉬울것같아
일부러 최대한 잡기 어렵게 만들어보았다
using UnityEngine; using UnityEngine.SceneManagement; public class MovingSphere : MonoBehaviour { public float speed = 20f; public float moveDuration = 0.1f; // 이동 시간 private Vector2 moveDirection; private float moveTimer = 0f; private void Start() { SetRandomDirection(); } private void Update() { moveTimer += Time.deltaTime; transform.Translate(moveDirection * speed * Time.deltaTime); if (moveTimer >= moveDuration) { SetRandomDirection(); moveTimer = 0f; } } private void OnMouseDown() { SceneManager.LoadScene("Stage"); } private void SetRandomDirection() { float randomAngle = Random.Range(0f, 360f); moveDirection = Quaternion.Euler(0, 0, randomAngle) * Vector2.right; } }
구체에 들어간 코드이다.
새로운 방향을 정하고 그 방향으로 정해진 시간만큼 이동한뒤 다시 새로운 방향으로 정하고 이동하고를 반복한다
공의 스피드는 20
방향이 정해지고 이동하는 시간은 0.1초이다
이렇게 해서 랜덤한 선택을 맡길수 있는 랜덤 공까지 구현을 마무리 했다. 아마 다음글에서는
계속해서 미루고 있었던 Json을 다루지 않을까 싶다
'Galaxy Ball > 2. 싱글플레이 - 스토리모드' 카테고리의 다른 글
(14) Json으로 스테이지에 적 배치하기 (0) 2024.05.29 (13) Json으로 알맞는 스테이지창 불러오기 (0) 2024.05.29 (11) 패배씬 만들기 (1) 2024.05.23 (10) 적 유닛 추가 제작 #3 & 총정리 (0) 2024.05.23 (9) 적 특수 유닛 제작 #2 (0) 2024.05.22