사생활 보호 설정
https://gamjia.tistory.com
Updated News
Mini Rooms
답글수 [0]
What Friends Say
한마디로 표현해봐~
1촌평 관리
[Day 10] Save The Dog Tutorial 4
GamJia 2024. 11. 16. 14:54
오블완 챌린지 10일차
며칠 전에 알리에서 산 고양이 방석
위에 앉아 기분 좋게 글을
쓰고 있는 GamJia 입니다
어제 강의에 이어서Save The Dog을 만들어 보겠습니다
오늘은 강아지랑 벌 코드를
작성하려고 했는데 Oh No
Flappy Bird의 흔적이 남아있습니다
만약에 프로젝트로 각각 분리했다면
상관 없겠지만 저는 Scene으로만 분리해서..
이 Script들을 분리하는 작업을
우선 해주도록 하겠습니다
일단 Scripts 폴더에 현재 프로젝트
이름의 폴더를 생성해서
Script들을 1차 분리 하겠습니다
사실 이름을 다른걸 써도 되지만
저는 NameSpace로 분리해주겠습니다
https://docs.unity3d.com/kr/2022.3/Manual/Namespaces.html
네임스페이스 - Unity 매뉴얼
대형 프로젝트로 더 많은 스크립트를 사용할수록 스크립트 클래스 이름이 서로 충돌할 가능성도 커집니다. 여러 프로그래머가 게임의 서로 다른 파트를 따로 작업하고 나중에 하나의 프로젝트
docs.unity3d.com
using System.Collections; using System.Collections.Generic; using UnityEngine; using SaveTheDog; // 추가 namespace SaveTheDog // 추가 { public class Player : MonoBehaviour { } }
적용 방법은 간단합니다
using + NameSpace 이름
class 밖에 NameSpace 선언
이렇게 해주면 끝입니다
근데 class 이름이 동일해서
Add Component 할 때 헷갈리는
경우가 있습니다
그럴 때는
AddComponentMenu / 상위 폴더 + 원하는 이름
을 입력하면 됩니다
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.SceneManagement; using SaveTheDog; namespace SaveTheDog { [AddComponentMenu("Save The Dog/Save The Dog UI Manager")] public class UIManager : MonoBehaviour { } }
그리고 게임의 핵심 기능 중
하나인 타이머 표시를 위해
Text Mesh Pro를 하나 만들어주겠습니다
using System.Collections; using System.Collections.Generic; using UnityEngine; using TMPro; using UnityEngine.SceneManagement; using SaveTheDog; namespace SaveTheDog { [AddComponentMenu("Save The Dog/Save The Dog UI Manager")] public class UIManager : MonoBehaviour { [SerializeField] private TextMeshProUGUI timerText; public static UIManager Instance => instance; private static UIManager instance; private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } public void UpdateTimerText(int time) { if (timerText != null) { if(time>0) { timerText.text = time.ToString(); } else { timerText.text="Game Clear!!"; } } } } }
using UnityEngine; using SaveTheDog; using System.Collections; namespace SaveTheDog { public class LineManager : MonoBehaviour { [SerializeField] GameObject line; [SerializeField] Animator animator; private Coroutine timerCoroutine; // 타이머 코루틴 변수 public static LineManager Instance => instance; private static LineManager instance; private void Awake() { if (instance == null) { instance = this; DontDestroyOnLoad(gameObject); } else { Destroy(gameObject); } } void Update() { if (Input.GetMouseButtonDown(0)) { Instantiate(line, Vector3.zero, Quaternion.identity, this.transform); } if(Input.GetMouseButtonUp(0)) { if (timerCoroutine==null) { timerCoroutine = StartCoroutine(StartTimer()); } } } private IEnumerator StartTimer() { float timerDuration = 10f; float timeRemaining = timerDuration; while (timeRemaining > 0f) { timeRemaining -= 1f; UIManager.Instance.UpdateTimerText(Mathf.FloorToInt(timeRemaining)); // UI 업데이트 yield return new WaitForSeconds(1f); // 1초 기다리기 } animator.SetBool("isClear", true); timerCoroutine = null; } public void StopTimer() { if(timerCoroutine!=null) { StopCoroutine(timerCoroutine); // 타이머 멈추기 timerCoroutine = null; // 타이머 코루틴을 null로 설정하여 재시작 가능하게 만듬 } } } }
그리고 저번의 Line Manager를 수정해서
10초 countDown을 진행 시키고 끝나면
멍멍이가 행복해하는 표정을 짓게
SetBool을 isClear true로 설정하겠습니다
밑에는 StopTimer가 있는데
이거는 나중에 벌에 쏘일 경우에
진행중인 Timer를 멈추기 위해 넣었습니다
제가 영상을 조금 빨리 설정했더니
멍멍이가 행복해하는 모습이
잘 안보이지만.. 암튼 잘 돌아갑니다ㅎㅎ
오늘은 여기까지 하고
GitHub에 Commit하는걸로
마무리 하겠습니다!
이번 게임도 그렇고..
다음 게임도 처음 만들어보는데
잘 강의를 마칠 수 있을지.....
열심히 해보겠습니다...
감사합니다!!