본문 바로가기

유니티

가위바위보 이미지가 빠르게 바뀌다가 3초 뒤에 랜덤으로 선택되서 보여지는 코드

728x90
반응형

가위바위보 이미지를 빠르게 바꾸고 3초 뒤에 랜덤으로 선택된 이미지를 보여주기 위해서는 코루틴(Coroutine)을 사용하면 됩니다. 코루틴은 일종의 함수이며, 일시 중지되어 다른 코드가 실행될 수 있습니다. 코루틴을 사용하여 일정 시간이 지난 후에 랜덤으로 이미지를 선택하고 표시하는 코드를 작성해보겠습니다.

우선, 가위, 바위, 보 각각에 대한 이미지를 갖는 Sprite 타입의 변수가 필요합니다. 이 예시에서는 rockSprite, paperSprite, scissorsSprite 변수로 정의합니다. 이들은 미리 준비된 이미지 파일에서 로드하여 할당할 수 있습니다.

public Sprite rockSprite;
public Sprite paperSprite;
public Sprite scissorsSprite;


이제 가위바위보 이미지를 빠르게 바꾸기 위해 코루틴을 사용하겠습니다. 코루틴을 실행하기 위해서는 StartCoroutine() 함수를 호출해야 합니다. StartCoroutine() 함수는 IEnumerator를 반환하는 함수를 인수로 받습니다. 이제, 다음과 같이 코루틴 함수 ChangeImage()를 정의합니다.

private IEnumerator ChangeImage() {
float elapsedTime = 0f;
float waitTime = 0.1f; // 이미지 변경 간격

// 가위바위보 이미지를 빠르게 변경
while (elapsedTime < 3f) {
int randomIndex = Random.Range(0, 3); // 랜덤으로 인덱스 선택
switch (randomIndex) {
case 0:
image.sprite = rockSprite; // 가위 이미지 설정
break;
case 1:
image.sprite = paperSprite; // 바위 이미지 설정
break;
case 2:
image.sprite = scissorsSprite; // 보 이미지 설정
break;
}
elapsedTime += waitTime;
yield return new WaitForSeconds(waitTime); // waitTime 만큼 대기
}

// 랜덤으로 선택된 이미지 표시
int finalIndex = Random.Range(0, 3);
switch (finalIndex) {
case 0:
image.sprite = rockSprite; // 가위 이미지 설정
break;
case 1:
image.sprite = paperSprite; // 바위 이미지 설정
break;
case 2:
image.sprite = scissorsSprite; // 보 이미지 설정
break;
}

// 게임 상태 변경 및 결과 계산
gameState = GameState.ShowingResult;
}


이 함수는 일정 시간마다 가위, 바위, 보 이미지 중에서 랜덤으로 선택하여 화면에 표시하다가 3초가 지나면 마지막으로 선택된 이미지를 보여주고, 게임 상태를 ShowingResult로 변경합니다.

이제, Play() 함수에서 ChangeImage() 코루틴을 실행합니다.

public void Play() {
if (gameState == GameState.WaitingForInput) {
// 가위바위보 이미지 변경 시작
StartCoroutine(ChangeImage());
}
}


여기서 gameState는 현재 게임 상태를 나타내는 enum 타입 변수입니다. WaitingForInput 상태에서만 가위바위보 이미지 변경을 시작하도록 합니다.

마지막으로, 이기면 "Win!!!" 메시지를 표시하도록 CheckResult() 함수를 수정합니다.

private void CheckResult(HandType playerHand, HandType computerHand) {
if (playerHand == computerHand) {
resultText.text = "Tie";
} else if ((playerHand == HandType.Rock && computerHand == HandType.Scissors) ||
(playerHand == HandType.Paper && computerHand == HandType.Rock) ||
(playerHand == HandType.Scissors && computerHand == HandType.Paper)) {
resultText.text = "Win!!!";
} else {
resultText.text = "Lose";
}
}

이제 가위바위보 이미지가 빠르게 변경되다가 3초 뒤에 랜덤으로 선택된 이미지가 표시되고, 이기면 "Win!!!" 메시지가 표시됩니다.

728x90
반응형