본문 바로가기

유니티

유니티2D 가위 바위 보 게임에서 승리할 때 다른 씬에 있는 오브젝트의 색상을 변경하는 코드

728x90
반응형

using UnityEngine;
using UnityEngine.SceneManagement; // SceneManager를 사용하기 위해 추가함

public class RockPaperScissors : MonoBehaviour
{
// 가위, 바위, 보 이미지를 보여주기 위해 public 변수로 선언함
public GameObject rockObject;
public GameObject paperObject;
public GameObject scissorsObject;

// 승리할 때 색상을 변경할 오브젝트를 참조하는 변수
public GameObject winObject;

// 가위, 바위, 보 선택지를 나타내는 enum 타입을 만듦
private enum Choice
{
Rock, // 0
Paper, // 1
Scissors // 2
}

private void Update()
{
// 1, 2, 3 키가 눌렸을 때 각각 가위, 바위, 보를 선택하는 함수를 호출함
if (Input.GetKeyDown(KeyCode.Alpha1))
{
Play(Choice.Rock);
}
else if (Input.GetKeyDown(KeyCode.Alpha2))
{
Play(Choice.Paper);
}
else if (Input.GetKeyDown(KeyCode.Alpha3))
{
Play(Choice.Scissors);
}
}

private void Play(Choice playerChoice)
{
// 컴퓨터는 랜덤하게 가위, 바위, 보 중 하나를 선택함
Choice computerChoice = (Choice)Random.Range(0, 3);
Debug.Log("Player: " + playerChoice + ", Computer: " + computerChoice);

// 플레이어가 선택한 것에 따라 가위, 바위, 보 이미지를 보여줌
switch (playerChoice)
{
case Choice.Rock:
rockObject.SetActive(true);
paperObject.SetActive(false);
scissorsObject.SetActive(false);
break;

case Choice.Paper:
rockObject.SetActive(false);
paperObject.SetActive(true);
scissorsObject.SetActive(false);
break;

case Choice.Scissors:
rockObject.SetActive(false);
paperObject.SetActive(false);
scissorsObject.SetActive(true);
break;
}

// 컴퓨터가 선택한 것을 로그로 출력함
switch (computerChoice)
{
case Choice.Rock:
Debug.Log("Computer chose Rock");
break;

case Choice.Paper:
Debug.Log("Computer chose Paper");
break;

case Choice.Scissors:
Debug.Log("Computer chose Scissors");
break;
}

// 승리, 패배, 무승부를 판단함
int result = (int)playerChoice - (int)computerChoice;
if (result == 0) // 무승부
{
Debug.Log("Draw!");
}
else if (result == -1 || result == 2) // 승리
{
Debug.Log("You Win!");

// 승리할 때 오브젝트의 색상을 변경함
winObject.GetComponent<Renderer>().material.color = Color.green;
}
else // 패배
{
Debug.Log("You Lose!");
}
}
}


위 코드에서는 winObject 변수를 추가하여 승리할 때 색상을 변경할 오브젝트를 참조합니다. 승리할 때 winObject 오브젝트의 색상을 Color.green으로 변경합니다. 씬이 바뀌어도 winObject 오브젝트를 찾을 수 있다면 색상을 변경할 수 있습니다. 예를 들어, 다른 씬에 있는 오브젝트의 이름이 WinObject이라면 다음과 같이 변경할 수 있습니다.

GameObject winObject = GameObject.Find("WinObject");
winObject.GetComponent<Renderer>().material.color = Color.green;

단, Find 함수는 씬에서 오브젝트를 검색하는 작업이므로 오버헤드가 있을 수 있습니다. 가능하면 미리 변수로 참조해두는 것이 좋습니다.

728x90
반응형