'유니티 5.x 게임 개발의 시작' 10.게임 내장 에디터 만들기 따라하기.

18/1/10 수

-GameCtrl2.cs를 복제, GameCtrl3.cs로 만들고 코드내 레벨 생성 함수들 제거, 새로 LevelEditor.cs 생성하고 레벨 생성을 이곳에서 담당하게 처리. LevelEditor.cs를 Hierarchy-GameController에 추가, Tiles-Size: 4로 설정하고 Element0~4에 각각 WallPref, PlayerPref, CollectablePref, GoalPref 드래그하여 끌어넣기.

# 플레이어 캐릭터가 발판 모서리에 착지할 경우 꼼짝도 못하는 버그는 여전하다.
# 바꾼 스크립트들로 실행해 보니 다 잘되는데 오브들을 다먹고 골을 생성할 때 stack overflow 에러가 난다-해결: 한참을 헤멨는데 if(toCreate.name == "GoalPref"){ 부분에서 내가 정해준 이름이 아닌 책에 쓰인대로 "Goal"이란 이름으로 찾아서 생긴 오류였다.

LevelEditor.cs에 Update()함수를 추가한 뒤 플레이를 하고 LevelEditor를 활성화 시킨 뒤 화면을 좌클릭하면 벽이 새로 생성되고 우클릭하면 제거된다.

- IMGUI를 활용, 게임 플레이 중 F2키를 누르면 화면에 생성가능 물체명 버튼들 4개 만들고 누른 뒤 마우스 좌클릭으로 그 물체 생성, 마우스 우클릭으로 물체 제거하게 처리.

- Cube 생성, 'PlayerSpawn'이라 명명, PlayerSpawn이란 이름의 Material 생성, Rendering Mode: Transparent로, 색상을 빨간색, 알파값 적게하여 반투명하게 한 뒤 PlayerSpawn에 적용, 'PlayerStart.cs' 새로 생성, 추가. Player에 PlayerPref을 끌어 적용한 뒤 프리팹화.
GameController-LevelEditor-Tiles-Element1에 PlayerPref 대신 PlayerSpawn을 적용.

- GameCtrl3.cs에 UpdateOrbTotals()함수 추가하고 LevelEditor.cs 코드 수정해서 새로 오브젝트 생성하거나 제거할 때 숫자 동일하게 변경하게 처리.

- 만든 레벨 파일에 저장/불러오기: LevelEditor.cs 코드 수정.
F2키 누르면 좌측상단에 레벨이름 입력창, Save, Load, Quit 버튼이 생성되고 레벨 이름 입력창에 원하는 레벨명을 입력한 뒤 Save 버튼을 클릭하면 그 이름으로 저장된다. Load 버튼을 클릭하면 해당 이름의 레벨이 있을시 불러오고 없으면 레벨명 입력창에 Error란 글을 띄운다.

# 현재는 맨 윗줄만 저장이 되는 버그가 있다. 다시 보니 저장문제가 아니라 로드 문제인 듯 보인다. -해결: LoadLevelFromString() 함수 중
CreateBlock (int.Parse (blockIDs[j]), j, lines.Count - i); 부분의 마지막 i를 1로 잘못 쓴 오타 때문이었다.

10. 게임 내장 에디터 만들기 따라하기 완료.

# 로드할 때 마다 플레이어가 늘어나는 버그가 있다-LoadLevelFile()함수에
GameObject player = GameObject.FindGameObjectWithTag ("Player");
Destroy (player); 코드를 넣어 플레이어가 늘어나는 버그는 막았다.

# 플레이어 생성박스가 제대로 저장/로드되지 않아 플레이어가 나오지 않는 경우가 생기고 있다-플레이어의 위치에 생성박스를 생성하는 것으로 해결.

# 역시 뭔가 제대로 저장이 되지 않고있다. 프리팹들의 이름 문제인걸까?