본문 바로가기
제출용/TIL

내일배움캠프 39일차 TIL + 컴퓨터 UI 사용하기

by 유린테 2024. 6. 11.

컴퓨터 오브젝트를 누르면 컴퓨터 창이 뜨고, 컴퓨터 창 안에서 자유롭게 다닐 수 있게 하겠다.

 

먼저, 컴퓨터에 띄워줄 각 창과 버튼들은 먼저 연동을 해놓았다.

InternetButton 스크립트를 작성해 여기서 전체적인 인터넷 관련 코드를 제어해주기로 했다.

public class InternetButton : MonoBehaviour
{
    public GameObject Internet;
    public GameObject Mail;
    public GameObject SendMail;
    public GameObject Blog;

    private GameObject activeUI;
    private bool isInternetVisible = false;

    void Start()
    {
        // 시작 시 모든 UI를 비활성화
        Internet.SetActive(false);
        Mail.SetActive(false);
        SendMail.SetActive(false);
        Blog.SetActive(false);

        // 시작 시 마우스 커서를 숨깁니다.
        //Cursor.visible = false;
        Cursor.lockState = CursorLockMode.Locked;
    }

    public void ToggleInternetUI()
    {
        isInternetVisible = !isInternetVisible;
        Internet.SetActive(isInternetVisible);
        if (!isInternetVisible)
        {
            HideAllUI();
        }
        UpdateCursorState();
    }

    public void ShowInternetUI()
    {
        ShowUI(Internet);
    }

    public void ShowMailUI()
    {
        ShowUI(Mail);
    }

    public void ShowSendMailUI()
    {
        ShowUI(SendMail);
    }

    public void ShowBlogUI()
    {
        ShowUI(Blog);
    }

    private void ShowUI(GameObject ui)
    {
        // 현재 활성화된 UI가 있으면 비활성화
        if (activeUI != null)
        {
            activeUI.SetActive(false);
        }

        // 새로운 UI를 활성화하고 기록
        ui.SetActive(true);
        activeUI = ui;
        UpdateCursorState();
    }

    public void HideAllUI()
    {
        Internet.SetActive(false);
        Mail.SetActive(false);
        SendMail.SetActive(false);
        Blog.SetActive(false);
        activeUI = null;
        UpdateCursorState();
    }

    // X 버튼 클릭 시 호출되는 메서드
    public void OnCloseButtonClick()
    {
        HideAllUI();
    }

    // 마우스 커서 상태 업데이트
    private void UpdateCursorState()
    {
        if (isInternetVisible || activeUI != null)
        {
            Cursor.visible = true;
            Cursor.lockState = CursorLockMode.None;
        }
        else
        {
            Cursor.visible = false;
            Cursor.lockState = CursorLockMode.Locked;
        }
    }
}

각 UI 화면들을 게임오브젝트로 설정하고, 

평소엔 UI가 안나오다가 컴퓨터를 클릭하면 나오고, 버튼을 통해 다른 화면으로 넘어가면 

원래 UI는 꺼지고 다음 화면 UI가 나오는 식으로 사용했음.

 

그리고 게임 자체에서 마우스 커서를 꺼놔서 

인터넷 창 버튼을 눌러야 하는데 커서기능이 안돼는 문제가 있어서

인터넷 UI 가 켜진 동안에는 커서가 나오게끔 커서 상태 코드도 사용해주었다.

 

그리고...

컴퓨터 오브젝트에도 컴퓨터 스크립트를 붙여줘서 

오브젝트 클릭 시 인터넷 화면으로 넘어가게!!! 해놨는데

머지하면서 다른 팀원분 코드랑 꼬였는지 ... 컴퓨터 인터랙션이 전혀 안돼서 날렸다

넘 슬픈것

public class Computer : MonoBehaviour
{
    public GameObject internetButtonManager; // InternetButton 오브젝트
    private InternetButton internetButtonScript;
    public float interactionDistance = 3.0f; // 플레이어와의 상호작용 거리

    private Transform playerTransform;

    void Start()
    {
        internetButtonScript = internetButtonManager.GetComponent<InternetButton>();
        playerTransform = GameObject.FindGameObjectWithTag("Player").transform; // 플레이어의 Transform 가져오기
    }

    void Update()
    {
        // 플레이어가 특정 거리 내에 있을 때만 마우스 클릭 이벤트를 처리
        if (Vector3.Distance(playerTransform.position, transform.position) <= interactionDistance && Input.GetMouseButtonDown(0))
        {
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if (Physics.Raycast(ray, out RaycastHit hit))
            {
                if (hit.transform == transform)
                {
                    internetButtonScript.ToggleInternetUI();
                }
            }
        }
    }
}

 

원래 E 가 인터랙션 버튼이라 E를 누르면 컴퓨터가 켜지게 해놨는데,

E를 누르면 물건이 주워지는 기능이 생기면서 내가 해놨던 거울포탈과 컴퓨터가 모두 작동이 되지 않았다.

그래서 거울은 클릭으로 넘어가게 고쳐주었으나,

컴퓨터는 왜인지 고치지 못했다..... ㅠㅠㅠㅠ

 

이번에 꽤 애정을 가지고 만들었었고

부족하지만 꽤 마음에 들게? 나왔었는데  아예 컴퓨터 인터랙션부터가 안돼게 되어버려서

인터넷 창은 보지도 못했다

그게 마감 한시간 전에 생긴 일이라 거울 안돼는거 고치고 나니 시간도 없어서..... 

진짜 너무 아쉬울 따름이다

 

어제도 머지 문제로 계속 내가 만든 것들이 지워져서 여러번 다시 만들었어야 해서 그것부터 약간 꺾였는데
마감 당일 심지어 마감 직전에 이래버리니 그냥 마음을 놓게 되는 것 같다

사실 놓친 못했음 발표 끝나고도 해봤는데 안돼더라 뭐가 문제인지 모르겠음 

 

TIL 이 아니라 오늘의 찡얼거림이 되어버렸다

근데 내 일주일 싹 날아갔는데........ 슬퍼