방명록
- 유니티 게임개발 - 게임 개발 심화 팀 과제 #32023년 10월 17일 21시 39분 19초에 업로드 된 글입니다.작성자: noun06
메모리 게임을 토대로 새로운 미니 게임을 구현하였다. 이 게임은 플레이어가 버튼 패턴을 따라 클릭하는 게임이다. 플레이어가 선택한 버튼 순서를 추적하는 리스트를 선언하고 플레이어가 버튼을 클릭할 때 호출되는 AddToPlayerSequenceList를 통해 버튼 id를 받아와서 리스트에 추가한다. 그 다음 실제 게임에서의 패턴과 플레이어의 패턴을 비교하여 성공 혹은 실패를 판정한다. 성공했을 때는 점수를 올리고 다음 라운드를 시작하는 메서드를 호출하여 게임을 지속한다.
using System.Collections; using System.Collections.Generic; using TMPro; using UnityEngine; using UnityEngine.UI; public class MemoryGameManager : MonoBehaviour { //[SerializeField] private List<AudioClip> buttonSoundsList; [SerializeField] private Sprite normalSprite; [SerializeField] private Sprite highlightSprite; [SerializeField] private List<Button> clickableButtons; //[SerializeField] private AudioClip loseSound; //[SerializeField] private AudioSource audioSource; [SerializeField] private CanvasGroup buttons; [SerializeField] private Button startButton; [SerializeField] private TextMeshProUGUI scoreText; private List<int> playerTaskList = new List<int>(); private List<int> playerSequenceList = new List<int>(); private float highlightDuration = 0.1f; private int score = 0; private void Awake() { ResetButtonImages(); UpdateUI(); } public void AddToPlayerSequenceList(int buttonID) { playerSequenceList.Add(buttonID); StartCoroutine(HighlightButton(buttonID)); int minLength = Mathf.Min(playerTaskList.Count, playerSequenceList.Count); for (int i = 0; i < minLength; i++) { if (playerTaskList[i] != playerSequenceList[i]) { StartCoroutine(PlayerLost()); return; } } if (playerSequenceList.Count == playerTaskList.Count) { ScoreRound(); StartCoroutine(StartNextRound()); } } private void ScoreRound() { score++; UpdateUI(); } private void UpdateUI() { scoreText.text = score.ToString(); } private IEnumerator HighlightButton(int buttonID) { clickableButtons[buttonID].image.sprite = highlightSprite; //audioSource.PlayOneShot(buttonSoundsList[buttonID]); yield return new WaitForSeconds(highlightDuration); clickableButtons[buttonID].image.sprite = normalSprite; yield return new WaitForSeconds(1f); } private IEnumerator PlayerLost() { //audioSource.PlayOneShot(loseSound); playerSequenceList.Clear(); playerTaskList.Clear(); yield return new WaitForSeconds(2f); startButton.gameObject.SetActive(true); buttons.interactable = false; } private IEnumerator StartNextRound() { playerSequenceList.Clear(); buttons.interactable = false; yield return new WaitForSeconds(1f); int newPattern = Random.Range(0, 4); playerTaskList.Add(newPattern); for (int i = 0; i < playerTaskList.Count; i++) { int index = playerTaskList[i]; yield return StartCoroutine(HighlightButton(index)); } buttons.interactable = true; } private void ResetButtonImages() { foreach (var button in clickableButtons) { button.image.sprite = normalSprite; } } public void StartGame() { score = 0; UpdateUI(); StartCoroutine(StartNextRound()); startButton.gameObject.SetActive(false); } }
다음글이 없습니다.이전글이 없습니다.댓글