728x90
반응형
SMALL
과제 1. GUI를 UGUI로 변경해보기 !!
우선 결과물 먼저
가위바위보 스크립트를 만들어주고 캐릭터에 넣어준다.
이럴 때 switch case문을 적극 활용합니다!!
그런데말입니다. GUI는 거의 쓰지 않는다고 합니다.
UGUI(무료) 와 서드파티인 NGUI(유료 95$)를 많이 사용한다고합니다.
지금 테스트 해보기 위해서 GUI로 했다는 점!
아래 코드는 사운드와 UI를 뺀 기능만 담겨있습니다.
public class RockScissorsPaper : MonoBehaviour
{
bool flagJanken = false; //묵찌빠 시작 플래그
int modeJanken = 0; // 게임 모드
//상수로 케이스들을 정의해두고
const int JANKEN = -1;
const int GOO = 0;
const int CHOKI = 1;
const int PAR = 2;
const int DRAW = 3;
const int WIN = 4;
const int LOOSE = 5;
//애니메이터를 사용
private Animator animator;
//가위바위보를 위해
int myHand;
int unityHand;
int flagResult;
int[,] tableResult = new int[3, 3];
float waitDelay;
private void OnGUI()
{
if (!flagJanken) //묵찌빠가 아니면
{ //UI에 게임 버튼 추가
flagJanken = (GUI.Button(new Rect(10, Screen.height - 110, 100, 100), "묵찌빠"));
}
// 묵찌빠 모드
if (modeJanken == 1)
{
// UI에 게임 버튼 추가
if (GUI.Button(new Rect(Screen.width / 2 - 50 - 120, Screen.height - 110, 100, 100), "묵"))
{
myHand = GOO;
modeJanken++;
}
if (GUI.Button(new Rect(Screen.width / 2 - 50, Screen.height - 110, 100, 100), "찌"))
{
myHand = CHOKI;
modeJanken++;
}
if (GUI.Button(new Rect(Screen.width / 2 - 50 + 120, Screen.height - 110, 100, 100), "빠"))
{
myHand = PAR;
modeJanken++;
}
}
}
// Start is called before the first frame update
void Start()
{
animator = GetComponent<Animator>();
univoice = GetComponent<AudioSource>();
// 결과 테이블 미리 결정 [유니티짱, 플레이어]
tableResult[GOO, GOO] = DRAW;
tableResult[GOO, CHOKI] = WIN;
tableResult[GOO, PAR] = LOOSE;
tableResult[CHOKI, GOO] = LOOSE;
tableResult[CHOKI, CHOKI] = DRAW;
tableResult[CHOKI, PAR] = WIN;
tableResult[PAR, GOO] = WIN;
tableResult[PAR, CHOKI] = LOOSE;
tableResult[PAR, PAR] = DRAW;
}
// Update is called once per frame
void Update()
{
// 묵찌빠 상태이면
if (flagJanken)
{
// 게임 모드에 따라
switch (modeJanken)
{
case 0: // 묵찌빠 시작
UnityChanAction(JANKEN);
modeJanken++;
break;
case 1: // 플레이어 입력 대기
//애니메이션 초기화
animator.SetBool("Janken", false);
animator.SetBool("Aiko", false);
animator.SetBool("Goo", false);
animator.SetBool("Choki", false);
animator.SetBool("Par", false);
animator.SetBool("Win", false);
animator.SetBool("Loose", false);
break;
case 2: // 판정
flagResult = JANKEN;
// 유니티짱의 손을 무작위로 선택
unityHand = Random.Range(GOO, PAR + 1);
// 유니티짱 액션
UnityChanAction(unityHand);
// 결과
flagResult = tableResult[unityHand, myHand];
modeJanken++;
break;
case 3: // 결과
// 약간의 시간 간격
waitDelay += Time.deltaTime;
if (waitDelay > 1.5f)
{
// 유니티짱 결과 액션
UnityChanAction(flagResult);
waitDelay = 0;
modeJanken++;
}
break;
default: // 초기화
flagJanken = false;
modeJanken = 0;
break;
}
}
// 유니티짱의 액션
void UnityChanAction(int act) // 이벤트 함수
{
switch (act)
{
case JANKEN:
animator.SetBool("Janken", true);
break;
case GOO:
animator.SetBool("Goo", true);
break;
case CHOKI:
animator.SetBool("Choki", true);
break;
case PAR:
animator.SetBool("Par", true);
break;
case DRAW:
animator.SetBool("Aiko", true);
break;
case WIN:
animator.SetBool("Win", true);
break;
case LOOSE:
animator.SetBool("Loose", true);
break;
}
}
}
}
아주 귀엽습니다.. 귀여워요
728x90
반응형
LIST
'UNITY_C#' 카테고리의 다른 글
유니티를 위한 C# 기초 [변수, 변수의 타입, 함수] (0) | 2023.09.22 |
---|---|
[유데미x스나이퍼팩토리]6회차_0921_커뮤니케이션 게임_유니티(Unity)10주 완성 프로젝트 캠프_ (0) | 2023.09.22 |
유니티_날짜와 시간 기록,저장하고 불러오기 DateTime (0) | 2023.09.20 |
유니티_PlayerPrefs_로컬에 기록저장하기 (0) | 2023.09.20 |
유니티_오디오 사용하기_날짜별 오디오 이벤트주기 (0) | 2023.09.20 |