시작하기 앞서.
그림자 문제에 대해 유니티에 버그를 제보했습니다. (http://fogbugz.unity3d.com/default.asp?686520_7lhbntgd3vi4d3el)
그리고 며칠 뒤 Issue Tracker에 올라왔습니다. (http://issuetracker.unity3d.com/issues/shadow-moves-in-relation-to-the-object-that-casts-it-when-using-a-custom-projection-matrix)
빨리 고쳐지면 저도 좋죠.
역시 이런 버그를 제보할 때는, 버그가 발생하는 최소한의 조건만 제작하는 게 나은 것 같습니다.
다른 분도 이걸 예전에 제보했고, 그 분은 유료 사용자라 우선순위도 높을 텐데 Issue Tracker에 안 올라온 걸 보면요.
이번 주는 작업한 시간이 적었습니다.
그래서 바닥은 일단 추가는 했다, 라고 보셔도 될 겁니다.
바닥 중 대다수는 벽에 붙어있을 거라서, 벽을 만들고나서도 벽의 좌표들을 보관하도록 해야했습니다.
변수를 잘못 써서 벽 좌표가 제대로 저장되지 않아 생긴 문제.
벽 좌표 저장 코드를 잡고, 재질을 입혀보았습니다.
UV 만드는 것은 꽤 쉽습니다.
물론 저렇게 바닥의 삼각형들을 잡으면, 안이 파인 형태의 바닥을 만들 때 문제가 생기겠지만 그건 다음에 해결하죠.
그 다음에는 블록 편집을 위해 준비하는 겁니다.
일단 클릭을 받아주는 역할을 할 Quad를 또 만들어서, 층수를 조작할 때마다 따라다니게 합니다.
그러니 원래 바닥의 텍스쳐가 거슬려서 단색으로 바꿨죠.
(원래 바닥을 Terrain으로 바꿔도 될 것 같은데)
그리고 카메라도 층수에 따라 움직이고, 층 내에서도 높이를 조절할 수 있습니다.
이걸 하면서 발견한 높이 관련 버그도 잡았습니다.
그런데 만들고 보니, 편집할 때는 Floor 단위가 아니라 Level 단위로 해야하더군요.
즉 완성된 블록을 보는 것과 블록을 편집하는 것을 완전히 다른 두 모드로 둬야한다는 거죠.
문제는 지금까지 만든 코드들을 또 개편해야하는가, 하는 점입니다.
다음 주에는 그래서,
블록 저장과 불러오기 포맷에 대한 컨셉 증명.
컨셉이 기본적으로 Adobe Flash에 맞춰서 짜여있었기에, 아직 블록 저장에는 PNG를 사용할 생각이었습니다.
(예전에는 그래도 파일을 보면 어떤 맵일 지 감이 잡혔지만, 이제는 벡터 데이터를 저장해서 그게 안 될 겁니다)
문제는 Unity의 Color는 0-1까지의 float를 사용한다는 점.
PNG의 무손실성을 이용해서 16진법으로 변환된 데이터를 저장하는 건데,
float는 데이터 훼손 문제가 있을것같다는 겁니다.
Color32는 그래도 0-255까지 byte를 쓴다니, 한번 살펴봐야겠습니다.
그리고 시간이 남는다면,
화면을 클릭했을 때 어디를 클릭했는지 감지하는 코드.
(위의 사진5에 적힌 <Clicked> 부분에, 클릭한 오브젝트 이름과, 그에 따라 환산되는 좌표를 표시하게 할 생각)
P.S. 원래 바닥을 Floor라고 불렀는데, 그러니 층수의 Floor랑 용어가 겹치는 문제가 생겼습니다.
그래서 이제부터 층 안에 있는 바닥을 Slab라고 부를 겁니다.
Slab Added, Preparing for the Block Editor
Before talking about what I did for the game,
I've reported the shadow bug to Unity. (http://fogbugz.unity3d.com/default.asp?686520_7lhbntgd3vi4d3el)
Few days later, this appeared in Issue Tracker publicly. (http://issuetracker.unity3d.com/issues/shadow-moves-in-relation-to-the-object-that-casts-it-when-using-a-custom-projection-matrix)
I said I'd wait, but it'd be good for me if the fix comes faster.
I spent less time than usual for this in this week.
So the slab is, well, not malfunctioning.
Before working for the slab, I needed to save walls coordinates for the slabs and the others.
Because most of slabs will be stuck with walls.
This is not the slab's problem, it's wall's.
After fixing the wall data keeping scripts, I gave them material.
Making UV was quite easy.
As there were some time left, I prepared for the editor.
I made another Quad which will accept clicks, and make it follow when the floor is changed.
Since this Quad is transparent, original ground made the scene unreadable.
So I cleared the texture of the ground. (But I think I can make the ground Terrain, not Quad)
The main camera follows current floor, and camera can adjust height from that floor.
And I found a typo in script related to height playing with camera, and fixed it.
After doing this and thinking about it, however, I should've done this in a Level unit, not in Floor unit.
So I need to separate this in two different modes. The first mode will be watching a block, and later mode is editing one.
But do I have to reconstruct all the scripts I made so far? That is the question.
What to do for the next week, yeah.
The proof of conecpt about saving and loading a block using PNG format.
This concept has been made for Adobe Flash, so there may be some obstacles.
(I used PNG since I started this project. Link - Korean!)
The biggest problem is that Unity's 'Color' uses floats(0-1), which can corrupt data.
I've using PNG because it's basically loseless data compression.
But I found that Color32 uses byte(0-255), so maybe this will go alright...?
And there will be some time left to do something else.
I will write the script which will detect where I clicked.
P.S. I used to call this slab as 'Floor', but this makes the term 'Floor' two meaning.
So I will call it 'Slab' that characters stands on.