-
(11) 패배씬 만들기Galaxy Ball/2. 싱글플레이 - 스토리모드 2024. 5. 23. 16:08
이번엔 게임에서 패배했을때 뜨게될 창을 만들도록 하겠다
사실 멀티플레이 같은 경우는 임시이긴 하지만 상당히 간단하게 만들었었다
텍스트 하나 띄워놓고 아무곳이나 클릭만 하면 다시 인게임 씬으로 넘어가게 했었지만
이번엔 좀 더 참신하게 만들어보도록 하겠다
만들기전, 당연히 싱글플레이 인게임창에 있는 Deadzone에 패배판정이 일어나는 순간 "Fail" 씬으로 변환하게 해주었고
씬 등록도 해두었다. 이제 한번 만들어보자
원래는 아무것도 움직이지 않는 정적인 화면에
"다시 하기"
"메인메뉴로 돌아가기"
"스테이지로 돌아가기"
이 3가지 버튼을 만들어주려 했었다
그러다 문듯 이때 했었던 동적인 시작화면에 아이디어를 받아 이번에도 스스로 알아서 움직이는 씬을 만들어보겠다
내가 구상해본건 3가지의 각자 다른 구체를 만들고 사방에서 적 유닛이 계속해서 발사를 하는것이다
당연히 3가지 구체에 내구도 같은건 없고 파괴되지 않으며 계속해서 동적으로 움직이게 만드는것이 목적이다
빨간색공 : 인게임씬으로 씬변환
초록색공 : 스테이지 선택씬으로 씬변환
검정색공 : 시작씬으로 씬변환
역할은 이렇게 부여하려고 한다. 이제 진짜 한번 만들어보자
우선 가장 쉬운 적 프리팹 배치와, 구체 모양 오브젝트를 만들어 가운데 배치해주었다
그리고 공이 빠져나가지 않도록 벽 역할을 해줄 Box Collider도 깔아주었다
아 그리고 적의 회전을 담당하는 Enemy1Center에서 이제 회전하는 각도도 Inspector창에서 직접 수정할수 있게 해주었다
왜냐면 적 유닛 프리팹자체가 아래를 바라보고 있기 때문에 기본값인 -60~60도 사이로 잡아버리면
밑에서 위를 바라보도록 만든 적 유닛은 무조건 바닥쪽만 바라보며 총알을 발사하기 때문.
이를 방지하기 위해 각도를 조절해줬다
그리고 가장 중요한 이 3가지의 버튼들. 엄연히 말하면 총알을 맞고 팅겨나가며 콜라이더의 영향을 받아야하기 때문에
캔버스의 그 버튼이 아니다. 정확히는 오브젝트이지만 버튼의 기능을 구현하도록 하겠다
using UnityEngine; public class ButtonScript : MonoBehaviour { private SpriteRenderer spriteRenderer; private Color originalColor; public float colorChangeAmount = 60f / 255f; void Start() { spriteRenderer = GetComponent<SpriteRenderer>(); originalColor = spriteRenderer.color; } void OnMouseDown() { spriteRenderer.color = new Color( Mathf.Max(originalColor.r - colorChangeAmount, 0), Mathf.Max(originalColor.g - colorChangeAmount, 0), Mathf.Max(originalColor.b - colorChangeAmount, 0), originalColor.a ); } void OnMouseUp() { spriteRenderer.color = originalColor; } void OnMouseExit() { spriteRenderer.color = originalColor; } }
가장 먼저 각각의 버튼에 부착할 ButtonScript이다
사실 이 스크립트에는 크게 중요한 기능은 없지만 다만 캔버스 버튼을 눌렀을때 볼수 있는 효과를 내게 하고 싶어
추가해보았다. 버튼을 누르면 RGB값이 60씩 낮아지며, 클릭을 떼면 원래 RGB값으로 돌아오게 된다
말그대로 정말 시각적인 효과일 뿐이고 실질적인 버튼 역할을 시켜줄 스크립트는 GameManager에 넣도록 하겠다
using UnityEngine; using UnityEngine.SceneManagement; public class SPFailSceneManager : MonoBehaviour { void Update() { if (Input.GetMouseButtonDown(0)) { RaycastHit2D hit = Physics2D.Raycast(Camera.main.ScreenToWorldPoint(Input.mousePosition), Vector2.zero); if (hit.collider != null && hit.collider.gameObject.name == "GoStage") { SceneManager.LoadScene("Stage"); } if (hit.collider != null && hit.collider.gameObject.name == "GoMenu") { SceneManager.LoadScene("Start Scene"); } if (hit.collider != null && hit.collider.gameObject.name == "Retry") { SceneManager.LoadScene("Story-InGame"); } } } }
빈 오브젝트 'GameManager'에 들어갈 SPFailSceneManager 스크립트
말 그대로 버튼을 누름에 따라 각각 맞는 씬변환을 하도록 만들었다
씬변환이 잘 이루어지는것을 확인할 수 있다
'Galaxy Ball > 2. 싱글플레이 - 스토리모드' 카테고리의 다른 글
(13) Json으로 알맞는 스테이지창 불러오기 (0) 2024.05.29 (12) 각종 수정 & 싱글플레이 패배조건 추가 (0) 2024.05.23 (10) 적 유닛 추가 제작 #3 & 총정리 (0) 2024.05.23 (9) 적 특수 유닛 제작 #2 (0) 2024.05.22 (8) 적 유닛 마무리 & 적 특수 유닛 제작 #1 (0) 2024.05.21