일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 스파르타내배캠til
- Til
- 내배캠
- 텍스트게임
- 피셔예이츠
- 분반별학습
- 최종프로젝트
- 코딩테스트
- Input Field
- 스파르타내일배움캠프TIL
- 스파르타
- 티스토리챌린지
- input system
- projectl
- 유니티
- 마크다운
- 알아볼것
- Action
- 백준
- 스파르타내일배움캠프
- 스파르타부트캠프
- 스탠다드
- 내주말
- 오블완
- 내일배움캠프
- string배열과 char
- 코테
- 코테풀기
- 분반별
- 프로그래머스
- Today
- Total
Ottoman
내일배움캠프 5주 2일차(21) TIL - 유니티 스크립트 주의사항... 본문
// 이슈
캐릭터선택없이 바로 만들면 이벤트인보크 떠도 버튼이 안바뀌어있음
생각한 원인:
이벤트액션이 캐릭터선택창 스크립트에 있다.
캐릭터선택창은 게임시작화면에서 비활성화 되어있다.
캐릭터선택창을 진입하지 않고 바로 캐릭터를 만들어 플레이하면 캐릭터선택창 안의 event가 생성되어있지 않다.
Call이벤트함수는 그라운드바의 버튼을 눌렀을때 호출된다. 이걸 눌렀을때가 처음 캐릭터선택창이 활성화되기 때문이다.
정상작동하려면 순서가 캐릭터선택창의 Start()-> Call이벤트 여야 하지만 현재순서는 Call이벤트 -> Start()이다.
디버그를 통한 추가 관찰
public void ButtonSelectCharacterMenu()
{
selectCharacterMenu.SetActive(true);
SCMscript.CallBoolEvent();
}
SetActive(true)하면 거기서 캐릭터선택창으로 가서 Start()를 실행하지 않고 바로 아래줄의 CallBoolEvent를 실행한다. 그 다음에 캐릭터선택창의 Start()가 실행되었다.
이유 : Awake, OnEnable까지만 실행되고 Start는 그 후순위였다.
해결방법
private void Start()
{
OnBoolEvent += ButtonSwap;
}
==>>
private void OnEnable()
{
OnBoolEvent += ButtonSwap;
}
Start에서 실행하던 체인을 OnEnable로 바꾸니 순서가 맞게되었다.
인게임 이름바꾸기
이슈
그라운드바의 이름 버튼을 누르면 이름바꾸는 UI가 뜬다.
인풋필드에 입력을해도 ENTER키가 비활성화 되어있다.
생각하는 원인 :
로그인의 LimitedNameLength()가 인게임UI의 인풋필드를 가리키지않고 기존 인풋필드를 가리켜 예외가 작동하고 있다.
해결방안:
새로운 인풋필드를 가리키는 LimitedNameLength() 가 실행되게 한다.
새로운 UI로 들어가면 Update()문이 작동하지도 않았다.
아예 새로운 UI에서만 작동하는 스크립트를 따로 만들겠다.
이슈
바뀔 대상을 제대로 지시하지 못함
1차 제출 완료했으니 차분히 문제점을 확인하고 수정해보자.
1. 이름 입력 후 엔터버튼 클릭시 플레이어 상단에 이름이 안 뜸. 객체가 생성되고 텍스트가 입력되어있지 않다.
생각나는 이유:
입력한 텍스트가 플레이어 객체의 텍스트에 입력되고 있지 않다.
이름만 교체하는 스크립트는 따로 만들어놨다는걸 잊고있었다. 또 엉뚱한데 만지고 있었다는 뜻.
기능을 새로 만들면 그림이든 다이어그램이든 만들어놔야겠다는 생각이 든다.
유저목록이 계속 증식하는 버그
필드에서 private List<string> userNames = new List<string>(); 선언과 동시에 초기화를 했었는데 이것이 반복 된것 같다.
필드에는 선언만 하고 객체생성은 Start에서 했더니 해결됐다.
GetComponent를 반복문에서 쓰는경우 문법상 문제가 없어도 GetComponent가 작동하기 전에 for, foreach문이 먼저 돌아서 원하는 결과를 얻지 못 할 수 있다.
if (obj.layer == LayerMask.NameToLayer(layerName) || obj.layer == LayerMask.NameToLayer(layerName2) && obj.transform.parent == null)
{
userNames.Add(obj.GetComponent<PlayerInfo>().Name);
}
대안:
if (obj.layer == LayerMask.NameToLayer(layerName) || obj.layer == LayerMask.NameToLayer(layerName2) && obj.transform.parent == null)
{
PlayerInfo info = obj.GetComponent<PlayerInfo>();
userNames.Add(info.Name);
}
GetComponent를 변수에 캐싱해두고 쓰기.
대안2: 가능하면 반복문 안에서 GetComponent 하지 않기.
ui 앵커 shift , 피봇 alt
오늘의 소감
유니티 자체의 버그는 너무 힘들고 슬프다.
'TIL' 카테고리의 다른 글
내일배움캠프 5주 4일차(23) TIL - 이슈해결 (1) | 2024.05.17 |
---|---|
내일배움캠프 5주 3일차(22) TIL - 팀프로젝트 생성자 vs Awake() (0) | 2024.05.16 |
내일배움캠프 5주 1일차(20) TIL (0) | 2024.05.13 |
내일배움캠프 4주 일요일 TIL - Unity Input Field, TMP, 게임오브젝트캐싱 (0) | 2024.05.12 |
내일배움캠프 4주 토요일 TIL - 싱글톤 (1) | 2024.05.11 |