당근을 배치하고 이제 당근을 랜덤으로 출력하도록 코드를 짤 것이다.
* 이전 작성 글에서 랜덤 숫자를 출력하는 부분 등 코드가 전반적으로 수정되었다.
(이전 작성 글)
https://studybook.tistory.com/66
[UNITY] 프리팹(Prefab) 생성
이제 당근을 배치해보자. 위 사진처럼 토끼 뒤에 당근 12개를 랜덤으로 출현시켜야 한다. 랜덤 출현을 적용하기 전에 먼저 당근 12개를 프리팹을 이용하여 배치할 것이다. 똑같은 오브젝트를 여
studybook.tistory.com
EventManager 스크립트를 전반적으로 수정해주었다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class EventManager : MonoBehaviour
{
public GameObject Success; //성공 이미지
public GameObject Failure; //실패 이미지
public GameObject Rabbit; //토끼 이미지
private bool success_state; //성공이미지 활성화.비활성화 설정
private bool failure_state; //실패이미지 활성화.비활성화 설정
private bool rabbit_state; //토끼이미지 활성화.비활성화 설정
public GameObject[] Carrot = new GameObject[12]; //당근이미지
private bool carrot_state; //토끼이미지 활성화.비활성화
private int sum = 0; //당근 개수 합계
void Start()
{
CarrotView();
//성공.실패 이미지 비활성화
success_state = false;
failure_state = false;
//토끼 이미지 활성화
rabbit_state = true;
Success.SetActive(success_state);
Failure.SetActive(failure_state);
Rabbit.SetActive(rabbit_state);
}
//당근 랜덤 출현
void CarrotView()
{
int i = 0;
int carrotStateNum; //당근 활성.비활성화 랜덤 결정 정수
carrot_state = false;
//당근 초기화(비활성화)
for (i = 0; i < 12; i++)
Carrot[i].SetActive(carrot_state);
//합계 초기화
sum = 0;
for (i = 0; i < 12; i++)
{
//당근 랜덤으로 활성.비활성화 결정
carrotStateNum = Random.Range(0, 2);
//carrotStateNum이 1이면 활성화
if (carrotStateNum == 1)
carrot_state = true;
//0이면 비활성화
else
carrot_state = false;
//당근 활성.비활성화
Carrot[i].SetActive(carrot_state);
//활성화된 당근 개수
sum += carrotStateNum;
}
//콘솔 결과 확인
Debug.Log("sum: " + sum);
}
//짝수 버튼 클릭 시
public void EvenButtonClick()
{
//당근 개수가 짝수라면
if (sum % 2 == 0)
{
success_state = true;
failure_state = false;
}
//당근 개수가 홀수라면
else
{
success_state = false;
failure_state = true;
}
//성공.실패 이미지 출력
rabbit_state = false;
Rabbit.SetActive(rabbit_state);
Success.SetActive(success_state);
Failure.SetActive(failure_state);
//콘솔 결과 확인
Debug.Log("success_state: " + success_state + " / failure_state: " + failure_state);
//랜덤 숫자 재생성 및 토끼 이미지 출력
Invoke("Start", 3);
}
//홀수 버튼 클릭 시
public void OddButtonClick()
{
//당근 개수가 홀수라면
if (sum % 2 != 0)
{
success_state = true;
failure_state = false;
}
//당근 개수가 짝수라면
else
{
success_state = false;
failure_state = true;
}
//성공.실패 이미지 출력
rabbit_state = false;
Rabbit.SetActive(rabbit_state);
Success.SetActive(success_state);
Failure.SetActive(failure_state);
//콘솔 결과 확인
Debug.Log("success_state: " + success_state + " / failure_state: " + failure_state);
//랜덤 숫자 재생성 및 토끼 이미지 출력
Invoke("Start", 3);
}
}
[코드 설명]
기존에는 코드는 랜덤 숫자를 먼저 출력하고 랜덤으로 출력된 숫자에 맞게 당근을 출력하려고 했다. 그랬더니 당근이 랜덤 숫자에 맞게 출력이 될 때까지 반복해야해서 코드가 너무 비효율적으로 되었다. 그래서 당근이 총 12개이므로 이 당근들을 12번 반복하여 0부터 11당근들을 활성화 비활성화 할지 랜덤으로 결정한다. 그리고 이 당근들의 개수를 다 합해서 합계가 짝수인지 홀수인지 판단하여 누른 버튼에 따라 성공과 실패 이미지를 띄우는 걸로 코드를 수정하였다.
위처럼 코드를 짜고 EventSystem의 인스펙터를 확인해보면 Carrot 배열 크기만큼 element가 생긴 걸 볼 수 있다. 그곳에 해당하는 당근을 넣어준다.
[주의할 점]
게임을 실행했을 때 아래 사진처럼 사진의 순서가 앞뒤로 바꾸고 싶을 때가 있다.
이러한 경우에는 아래 사진처럼 뒤에 배치하고 싶은 것을 위로 자리를 바꿔준다.
[결과 확인]
게임을 실행해 당근이 잘 나오는지 확인할 때는 토끼를 비활성화하여 당근이 sum개수와 똑같이 잘 나왔는지 확인한다.
당근이 sum개수만큼 랜덤으로 잘 출력되는 것을 알 수 있다.
'🎮 Unity' 카테고리의 다른 글
[UNITY] 대화창 구현하기 / Scene 전환 (2) | 2023.08.02 |
---|---|
[UNITY] 프리팹(Prefab) 생성 (0) | 2023.03.05 |
[UNITY] 딜레이 주기(원하는 시간 뒤 이미지 출력) (0) | 2023.02.27 |
[UNITY] 랜덤 숫자 출력 / 버튼 이벤트 설정하기 / 성공.실패 이미지 띄우기 (0) | 2023.02.27 |
[UNITY] 슬라이더 디자인/볼륨 조절 (0) | 2023.02.15 |