12. 팝업창 스크립트 합침

모래사우르스
|2024. 4. 29. 21:16

오늘 할 것은 inputfield로 입력한 이름을 받아서 팝업창에 출력하는 것.

그 전에 미리미리 스크립트나 코드를 깔끔하게 정리해두는게 미래를 위해 도움이 될 것 같아서, 한 씬에 최대한 스크립트 1개를 주려고 함. 근데 3개로 쪼개져있어서 그거 합치느라 좀 시간이 걸렸다.

 

<스크립트 합치기>

한 씬에 스크립트가 너무 많아서 일단 합쳐봄. (합치기 전에 일단 깃허브에 저장함.. 깃허브 진짜 하긴 해야하는데.)
근데 합쳤는데 팝업창 안 띄워짐. 슈바 

(버튼이 3개가 있음. 확인, 네, 아니오 이렇게 있다. 그것들에 해당하는 함수들을 다 하나의 스크립트 안에 넣음.)

아 아 아! 왜 안 되나 했더니ㅠㅠㅠ 캔버스에 넣어둔 스크립트에 팝업창 오브젝트를 넣어주지 않았음..
그래서 안뜨는 거였음....

그리고 주의할 점 : 메서드나 클래스 또는 오브젝트, 프로젝트명 변경 시 그 모듈과 연결된 다른 모듈이 먹히지 않을 수 있으니 변경 후엔 꼭
연결된 모듈 체크 후 재연결 시켜줘야함. (안 그러면 없다고 뜸)

<inputfield로 입력받은 테스트 출력하기>

(4/29)

은근 까다로웠다. 

해결 방법 : 클래스에 아래 코드를 작성

    private TMP_InputField InputName;

그리고 클래스 내부 함수 안에 아래 코드를 작성

("InputField"는 내가 인풋필드 오브젝트에 붙인 이름을 적으면 됨. 인풋필드 안에 있는 텍스트 아님!)

        InputName = transform.Find("InputField").GetComponent<TMP_InputField>();
        Debug.Log(InputName.text)

어려웠던 이유

1. 인풋필드 안에 있는 텍스트명을 넣어야하는지 헷갈렸음

2. 어디서는 transform으로 시작하고 어디서는 GetComponent, GetGameObject 등으로 시작함.

3. Text, TextMesh, TextMeshPro, TextMeshProUGUI 중에 뭘 써야할지 모름. 이거 좀 빡침 하나로 좀 통일 좀~~

4. 근데 와중에 변수 선언 TMP_InputField로 해야하는 거였음. 이름이 너무.. 헷갈스

(https://soopeach.tistory.com/13 참조1)

(https://velog.io/@cjb0325/%EC%9C%A0%EB%8B%88%ED%8B%B0-TMPInputField%ED%83%80%EC%9E%85-%EC%B4%88%EA%B8%B0%ED%99%94 참조2)

5. 저렇게 입력받은 InputName이 문자열 변수인 줄 알았음. 근데 출력이 안되서 알아보니, .text를 붙여야했음.

(https://discussions.unity.com/t/how-to-get-text-from-textmeshpro-input-field/215584/4 참조)

 

나중가면 익숙해지겠지..

스크립트에서 TMP 쓰는 법 (https://higatsuryu9975.tistory.com/32) (나중에 읽어보자.)

 

이제 해야하는거
입력받은 걸 다른 스크립트가 읽게 하기
거기서 읽고 텍스트로 출력해야함 (텍스트를 스크립트로 출력하는 거를 어케함?)

다른 스크립트에서 함수나 변수 읽어오는 거 어떻게 하나 알아봤는데 singleton 이거 많이 쓰는 것 같음. 근데 이거 했는데
스크립트명.instance.변수명 이렇게 쳐야하는데 instance라고 치니까 빨간줄.
그래서 그냥 이 블로그(https://j2su0218.tistory.com/546) 1번 내용 참조해서 public static 앞에 붙이니까 되었음.

읽어오는 건 성공. TextMeshPro 하나 선언하고 거기다 가져온 문자열 넣으려고 하는데, TMP_InputField 형식이랑 TextMeshPro 형식이랑 맞지 않아서 안된다고 뜸.
형변환 어케하지.. 

지금 여기서 막혔다. 내일 마저 해야겠다. 슬슬 막히는군