-
(23) 메인맵 제작#1Galaxy Ball/2. 싱글플레이 - 스토리모드 2024. 6. 10. 22:09
이제 드디어 메인맵을 제작하려 한다. 이것을 위해 총 4가지의 에셋을 구입하였다
우선 임시로 완성된 기본 화면이다. 이제 이 사진을 하나씩 하나씩 뜯어보자
우선 백그라운드 역할을 해줄 Space와 Stars. 각각 애니메이션도 만들어 배경의 움직임도 구현하였다
두번째는 캔버스 영역. 기존 스테이지맵과 마찬가지로
일시정지 버튼과 축소/확대버튼, 스테이지 선택화면까지 그대로 가져왔다
GameManager, 스테이지도 똑같은 스크립트를 부착해주었고
메인 플레이어도 마찬가지. 파란색 구체를 사용할지 아니면 지구 이미지를 넣어줄지는 아직 고민중이다
카메라도 똑같이 설정해주었다. 하지만 한가지 다른점이 있다면
Camera Reduction 스크립트에서 1차 스테이지맵과 메인스테이지맵 크기 비율이 달라 오차가 발생한다
using UnityEngine; using TMPro; using UnityEngine.SceneManagement; public class CameraReduction : MonoBehaviour { private Camera mainCamera; private int currentIndex = 0; private float[] sizes; private string[] sizeTexts = { "100%", "75%", "50%" }; public TextMeshProUGUI buttonText; void Start() { mainCamera = Camera.main; if (mainCamera == null) { Debug.LogError("메인 카메라를 찾을 수 없습니다!"); return; } // 현재 씬에 따라 sizes 배열 설정 string currentSceneName = SceneManager.GetActiveScene().name; if (currentSceneName == "Stage") { sizes = new float[] { 15f, 30f, 45f }; } else if (currentSceneName == "Main Stage") { sizes = new float[] { 3f, 7f, 13f }; } UpdateButtonText(); // 초기 텍스트 업데이트 } public void ChangeCameraSize() { if (mainCamera != null) { currentIndex = (currentIndex + 1) % sizes.Length; mainCamera.orthographicSize = sizes[currentIndex]; // 카메라 크기 변경 UpdateButtonText(); } } private void UpdateButtonText() { if (buttonText != null) { buttonText.text = sizeTexts[currentIndex]; } } }
그래서 수정해주었다. 씬의 이름을 가져와 "Stage"면 기존 설정 그대로,
"Main Stage"면 또다른 비율의 확대/축소를 하도록 하였다
SceneManager.GetActiveScene().name
활성화 된 현재 씬의 이름을 가져오는 코드. 유용하게 쓰일것같으니 이참에 외워두자
그리고 clear 씬에서 버튼을 눌렀을때 튜토리얼 씬인 Stage씬으로 넘어가는것을 확인했다
스테이지가 5를 넘어가면 거기서부터는 클리어를 해도 Main Stage로 넘어가야하기 때문에
코드를 수정해주었다
정지버튼 기능도 구현해주었다. 사실상 여기까지는 큰 추가없이 기존 시스템에서 전부 가져온것들이다
이제 슬슬 제대로 된것들은 고쳐나가보자. 가장 먼저 행성이 붉거나 푸르게 보이는 현상.
이는 튜토리얼에서 임시로 설정한 클리어 여부에 따라 다른 색상으로 보이게 하기 위해 맞춰두었던 기능으로
정확히는 모든 스테이지에 달린 StageState라는 코드중 위 부분 때문에 이렇게 된것이다
물론 튜토리얼에서나 저게 먹히는것이지 메인 스테이지맵에서도 이걸 사용할 생각은 없기에
이번엔 제대로 보기좋게 수정해보도록 하겠다
1. 클리어 하지 않았을시
행성의 모든 RGB값을 50으로 통일
2. 현재 클리어할 차례일시
행성 위에 노란색 별 아이콘을 띄우기
3. 이미 클리어 했을시
행성의 모든 RGB값을 255로 통일
1번과 3번은 RGB값만 변경시켜주면 되니까 어렵지 않다
까다로운건 2번인데, 지금 클리어 해야하는 순서, 즉 StageClearID와 stagenum이 일치할때만
아이콘을 생성시켜야 한다는것.
우선 임시 아이콘으로 사용할 "Clearhere"을 만들어준뒤
public GameObject Clearhere; ........ if (stageClearID < this.stagenum) { isclear = false; spriteRenderer.color = new Color32(50, 50, 50, 255); } else if (stageClearID == this.stagenum) { isclear = true; spriteRenderer.color = new Color32(50, 50, 50, 255); if (Clearhere != null) { Instantiate(Clearhere, transform.position, Quaternion.identity, transform); } } else { isclear = true; spriteRenderer.color = new Color32(255, 255, 255, 255); } }
게임 오브젝트로 clearhere을 받아준뒤, 만약 stageClearID와 stagenum값이 동일한 경우라면
해당 오브젝트의 정가운데 clearhere을 생성시켜준다
본인의 차례에 따라 잘 생성되는것을 확인할 수 있다
'Galaxy Ball > 2. 싱글플레이 - 스토리모드' 카테고리의 다른 글
(25) 메인맵 제작#3 (0) 2024.06.12 (24) 메인맵 제작#2 + 스테이지 제작 준비 (1) 2024.06.11 #오류수정 (2) 2024.06.05 (22) 스테이지 클리어 조건 & 클리어 씬 제작 (2) 2024.06.04 (21) 클리어한 스테이지만 활성화★ (0) 2024.06.03