디지털트윈 유니티 기초(error,가위바위보)

coc·2026년 4월 4일

if 문 연습

using UnityEngine;

public class scrIF2 : MonoBehaviour
{
    public float fTimeMax = 1; //초기화 하여 돌아갈 시간 
    public float fCurTime = 0; //현재시간 

    void Update()
    {
        fCurTime = fCurTime - Time.deltaTime; // 시간이 감소함
        if(fCurTime <= 0)
        {
            fCurTime = fTimeMax;
            Debug.Log("1초 지났다!");
        }

    }
}

if문 연습2

using UnityEngine;

public class scrIF3 : MonoBehaviour
{
        //가위바위보 게임 만들기
        //약속.. 가위 1 / 바위 2 / 보 3 / 0 은 안냇다

    public int nUser = 0;       //사람이 낸것
    public int nCom = 0;        //컴퓨터가 낸것


    public void Update()
    {
        //input = 키보드, 마우스, 조이스틱, 터치 등 사용자의 모든 입력 장치로부터 들어오는 신호를 관리

        /*GetKeyDown = 역할: 사용자가 특정 키를 누른 그 순간(프레임) 딱 한 번만 true를 반환합니다.

        특징: 키를 계속 꾹 누르고 있어도 처음 눌린 순간에만 반응하므로, 단발성 액션(예: 점프, 총 쏘기, 메뉴 열기)에 주로 사용됩니다.

        GetKeyDown: 누르는 순간 (Down)

        GetKey: 누르고 있는 동안 (Stay)

        GetKeyUp: 떼는 순간 (Up)*/

        /*KeyCode =   KeyCode는 유니티에서 정의한 열거형(Enum) 데이터 타입입니다.

        역할: 키보드에 있는 수많은 물리적 키들을 컴퓨터가 이해할 수 있는 이름으로 정의해 둔 목록입니다.

        예시: A, Space, Escape, Return(엔터) 등 수많은 키 이름이 담겨 있습니다.  */

        /*Alpha0 = 역할: 키보드 상단 숫자 패드에 있는 숫자 '0' 키를 가리킵니다
        참고: 오른쪽 숫자 키패드에 있는 0은 Keypad0이라고 따로 부릅니다. Alpha0는 문자열 자판 위에 있는 숫자 0을 의미합니다.*/

	  // 유니티 옛날 코드 방식
        if (Input.GetKeyDown(KeyCode.Alpha0))
            nUser = 0;
        if (Input.GetKeyDown(KeyCode.Alpha1))
            nUser = 1;
        if (Input.GetKeyDown(KeyCode.Alpha2))
            nUser = 2;
        if (Input.GetKeyDown(KeyCode.Alpha3))
            nUser = 3;


        if (nUser != 0 && nCom == 0)     //사람은 결과를 냇고, 컴퓨터는 내지 않은 상태일때
        {
            nCom = Random.Range(1, 4);      //1~3 까지 랜덤으로 내게 한다

            if (nUser == nCom)              //비교
            {
                //비겼다
                Debug.Log("비겼다");
            }
            else
            {
                //다르다
                if (nUser == 1 && nCom == 2)        //가위 바위
                {
                    Debug.Log("졌다.");
                }
                else if (nUser == 1 && nCom == 3)   //가위 보
                {
                    Debug.Log("이겼다.");
                }
                else if (nUser == 2 && nCom == 1)   //바위 가위
                {
                    Debug.Log("이겼다.");
                }
                else if (nUser == 2 && nCom == 3)   //바위 보
                {
                    Debug.Log("졌다.");
                }
                else if (nUser == 3 && nCom == 1)   //보 가위
                {
                    Debug.Log("졌다.");
                }
                else if (nUser == 3 && nCom == 2)   //보 바위
                {
                    Debug.Log("이겼다.");
                }
                else if (nUser == 0 && nCom == 1)   //x 가위
                {
                    Debug.Log("유저가 안내서 졌다.");
                }
                else if (nUser == 0 && nCom == 2)   //x 바위
                {
                    Debug.Log("유저가 안내서 졌다.");
                }
                else if (nUser == 0 && nCom == 3)   //x 보
                {
                    Debug.Log("유저가 안내서 졌다.");
                }
                else
                {
                    Debug.Log("잘못된 값입니다.");
                }
            }

            //초기화 하여 내기 전 상태로 돌아간다
            //nUser = 0;
            //nCom = 0;
            ResetGame();
        }
    }

    public void ResetGame()
    {
        //초기화 하여 내기 전 상태로 돌아간다
        nUser = 0;
        nCom = 0;
    }
}

에러

가위바위보 에러

에러 발생이유 에러(InvalidOperationException)는 현재 유니티 프로젝트의 설정이 신규 입력 시스템(Input System Package)으로 되어 있는데 예전 방식 코드를 써서 에러 발생
요약 : 코드는 옛날 방식인데, 유니티 엔진 설정은 최신 방식만 쓰도록 되어 있어서

해결방법

input manager (old)로 변경

위 가위 바위 보 메서드 분리

using UnityEngine;

public class scrIF3_2 : MonoBehaviour
{
    int nUser = 0; // 사람이 낸것 
    int nCom = 0; // 컴퓨터가 낸것

    void Update()
    {
        InputUser(); // 유저가 낸다

        if (nUser !=0 && nCom == 0) // 내면 동작한다
        {
            InputCom(); // 컴퓨터가 낸다
            CheckResult(); // 판정한다
            ResetGame(); // 초기화 한다 
        }
    }

    //유저 입력
    void InputUser()
    {
        if (Input.GetKeyDown(KeyCode.Alpha0))
            nUser = 0;
        if (Input.GetKeyDown(KeyCode.Alpha1))
            nUser = 1;
        if (Input.GetKeyDown(KeyCode.Alpha2))
            nUser = 2;
        if (Input.GetKeyDown(KeyCode.Alpha3))
            nUser = 3;
    }

    //컴퓨터 입력
    void InputCom()
    {
        nCom = Random.Range(1, 4);
    }

    //결과 판정
    void CheckResult()
    {
        if (nUser == nCom)//비교
        {
            //비겼다
            Debug.Log("비겼다");
        }
        else
        {
            if (nUser == 1 && nCom == 3 || nUser == 2 && nCom == 1 || nUser == 3 && nCom == 2)
            {
                Debug.Log("이겼다.");
            }
            else if (nUser == 1 && nCom == 2 || nUser == 2 && nCom == 3 || nUser == 3 && nCom == 1)
            {
                Debug.Log("졌다.");
            }
            else if (nUser == 0 && nCom == 1 || nUser == 0 && nCom == 2 || nUser == 0 && nCom == 3)
            {
                Debug.Log("유저가 안내서 졌다.");
            }
            else
            {
                Debug.Log("잘못된 값입니다.");
            }
        }
    }

    //초기화
    public void ResetGame()
    {
        nUser = 0;
        nCom = 0;
    }
}

컴퓨터가 무조건 이기게 하는방법

using UnityEngine;

public class scrIF3_2 : MonoBehaviour
{
    int nUser = 0; // 사람이 낸것 
    int nCom = 0; // 컴퓨터가 낸것

    void Update()
    {
        InputUser(); // 유저가 낸다

        if (nUser !=0 && nCom == 0) // 내면 동작한다
        {
            InputCom(nUser); // 컴퓨터가 낸다
            CheckResult(); // 판정한다
            ResetGame(); // 초기화 한다 
        }
    }

    //유저 입력
    void InputUser()
    {
        if (Input.GetKeyDown(KeyCode.Alpha0))
            nUser = 0;
        if (Input.GetKeyDown(KeyCode.Alpha1))
            nUser = 1;
        if (Input.GetKeyDown(KeyCode.Alpha2))
            nUser = 2;
        if (Input.GetKeyDown(KeyCode.Alpha3))
            nUser = 3;
    }

    //컴퓨터 입력
    void InputCom(int nUser)
    {
        // 유저가 낸 값에 따라 이기는 값을 강제로 할당
        if (nUser == 1)      // 유저가 가위
            nCom = 2;        // 컴은 바위
        else if (nUser == 2) // 유저가 바위
            nCom = 3;        // 컴은 보
        else if (nUser == 3) // 유저가 보
            nCom = 1;        // 컴은 가위
        else
            nCom = Random.Range(1, 4); // 유저가 0을 냈거나 예외 상황일 때
    }

    //결과 판정
    void CheckResult()
    {
        if (nUser == nCom)//비교
        {
            //비겼다
            Debug.Log("비겼다");
        }
        else
        {
            if (nUser == 1 && nCom == 3 || nUser == 2 && nCom == 1 || nUser == 3 && nCom == 2)
            {
                Debug.Log("이겼다.");
            }
            else if (nUser == 1 && nCom == 2 || nUser == 2 && nCom == 3 || nUser == 3 && nCom == 1)
            {
                Debug.Log("졌다.");
            }
            else if (nUser == 0 && nCom == 1 || nUser == 0 && nCom == 2 || nUser == 0 && nCom == 3)
            {
                Debug.Log("유저가 안내서 졌다.");
            }
            else
            {
                Debug.Log("잘못된 값입니다.");
            }
        }
    }

    //초기화
    public void ResetGame()
    {
        nUser = 0;
        nCom = 0;
    }
}

문제

가위 바위 보 코드 정리 함수로 만들기 함수로 정의하여 기능으로 나누기 유저가 낸다 컴퓨터가 낸다 판정을 한다

 using UnityEngine;

public class scrIF4 : MonoBehaviour
{
public int nUser1 = 0;
public int nUser2 = 0;
public int user1win = 0;
public int user2win = 0;
public int user1lose = 0;
public int user2lose = 0;

void Update()
{
    InputUser1();
    InputUser2();

    if (nUser1 != 0 && nUser2 != 0)
    {
        CheckResult();
        StageReset();
    }

    if (user1win == 3 || user2win == 3)
    {
        GameReset();


    }

}

void InputUser1()
{
    if (Input.GetKeyDown(KeyCode.Alpha5)) nUser1 = 1;
    if (Input.GetKeyDown(KeyCode.Alpha6)) nUser1 = 2;
    if (Input.GetKeyDown(KeyCode.Alpha7)) nUser1 = 3;
}

void InputUser2()
{
    if (Input.GetKeyDown(KeyCode.Alpha1)) nUser2 = 1;
    if (Input.GetKeyDown(KeyCode.Alpha2)) nUser2 = 2;
    if (Input.GetKeyDown(KeyCode.Alpha3)) nUser2 = 3;
}

void CheckResult()
{
    if (nUser1 == nUser2)
    {
        Debug.Log("비겼다.");
    }
    else if ((nUser1 == 1 && nUser2 == 3) ||
             (nUser1 == 2 && nUser2 == 1) ||
             (nUser1 == 3 && nUser2 == 2))
    {
        user1win++;
        user2lose++;
        Debug.Log("user1: " + user1win + "승 " + user1lose + "패" + "user2: " + user2win + "승" + user2lose + "패");
    }
    else if ((nUser1 == 1 && nUser2 == 2) ||
             (nUser1 == 2 && nUser2 == 3) ||
             (nUser1 == 3 && nUser2 == 1))
    {
        user2win++;
        user1lose++;
        Debug.Log("user1: " + user1win + "승 " + user1lose + "패" + "user2: " + user2win + "승" + user2lose + "패");
    }
    else
    {
        Debug.Log("다시 입력하세요");
    }
}
public void StageReset()
{
    nUser1 = 0;
    nUser2 = 0;
}
public void GameReset()
{
    nUser1 = 0;
    nUser2 = 0;
    user1win = 0;
    user2win = 0;
    user1lose = 0;
    user2lose = 0;

}

}


# 2인용 가위 바위 보 게임

 using UnityEngine;

public class scrIF4 : MonoBehaviour
{
public int nUser1 = 0;
public int nUser2 = 0;
public int user1win = 0;
public int user2win = 0;
public int user1lose = 0;
public int user2lose = 0;

void Update()
{
    InputUser1();
    InputUser2();

    if (nUser1 != 0 && nUser2 != 0)
    {
        CheckResult();
        StageReset();
    }

    if (user1win == 3 || user2win == 3)
    {
        GameReset();


    }

}

void InputUser1()
{
    if (Input.GetKeyDown(KeyCode.Alpha5)) nUser1 = 1;
    if (Input.GetKeyDown(KeyCode.Alpha6)) nUser1 = 2;
    if (Input.GetKeyDown(KeyCode.Alpha7)) nUser1 = 3;
}

void InputUser2()
{
    if (Input.GetKeyDown(KeyCode.Alpha1)) nUser2 = 1;
    if (Input.GetKeyDown(KeyCode.Alpha2)) nUser2 = 2;
    if (Input.GetKeyDown(KeyCode.Alpha3)) nUser2 = 3;
}

void CheckResult()
{
    if (nUser1 == nUser2)
    {
        Debug.Log("비겼다.");
    }
    else if ((nUser1 == 1 && nUser2 == 3) ||
             (nUser1 == 2 && nUser2 == 1) ||
             (nUser1 == 3 && nUser2 == 2))
    {
        user1win++;
        user2lose++;
        Debug.Log("user1: " + user1win + "승 " + user1lose + "패" + "user2: " + user2win + "승" + user2lose + "패");
    }
    else if ((nUser1 == 1 && nUser2 == 2) ||
             (nUser1 == 2 && nUser2 == 3) ||
             (nUser1 == 3 && nUser2 == 1))
    {
        user2win++;
        user1lose++;
        Debug.Log("user1: " + user1win + "승 " + user1lose + "패" + "user2: " + user2win + "승" + user2lose + "패");
    }
    else
    {
        Debug.Log("다시 입력하세요");
    }
}
public void StageReset()
{
    nUser1 = 0;
    nUser2 = 0;
}
public void GameReset()
{
    nUser1 = 0;
    nUser2 = 0;
    user1win = 0;
    user2win = 0;
    user1lose = 0;
    user2lose = 0;

}

}



profile
시작

0개의 댓글