오늘 할 것은 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)
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 형식이랑 맞지 않아서 안된다고 뜸.
형변환 어케하지..
지금 여기서 막혔다. 내일 마저 해야겠다. 슬슬 막히는군
'TIL > 유니티' 카테고리의 다른 글
14. 정처기 + 유니티 singleton (0) | 2024.05.03 |
---|---|
13. 유니티_이름 입력받고 팝업창에 띄우기 (1) | 2024.05.03 |
11. 팝업창 만들기 (0) | 2024.04.29 |
10. 유니티_에셋 구입, 텍스트 깜빡이는 효과 구현 (0) | 2024.04.27 |
7. 유니티_InputField (1) | 2024.04.22 |