※ 주의.. 본인은 튜토게임정도 만들어본 뉴비다... 경고


코드에 대한 자세한 설명은 불가한다.

코드, 에러에 대해 본인도 헷갈리므로, 메커니즘에 대해서만 말해줄 수 있다.

본인은 대부분 구글링을 통해 학습한다.


참고로 게임 플랫폼은 PC.


※ 주의.. 본인은 튜토게임정도 만들어본 뉴비다... 경고



3-2 [ Floor생성기 Mapsize ]



viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c5331f7d0bbda398e4ba8f661cb0170c6bd277078c006b194d118b835



이게 저번 part-1에서 자동 생성한 _tilemap이다.


그냥 그린것과 다른점은.

맵크기를 손쉽게 바꿀 수 있다.

위의 크기는 '5' 이다.




viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c5331f7d0bbda398e4ba8f661cb0170c6e12225769206e1ccd118b807

[ Mapsize = 5 ]



중앙을 기준으로 맵크기가

0 = 1블록

1 = 9블록

2 = 25블록

.

.

.

5 = 121블록 이다.


이러는 이유는 나중에 난이도조절을 위한. Floor관리 시스템을 계획중이므로. (자세한건 나중에)





3-2 [ Floor생성기 설명 ]


viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c5331f7d0bbda398e4ba8f661cb0170c6bd2d27729007b593d118b817



대충 가장 맨윗부분의 좌표가 (0,0) 이다.

왜냐? isometric이므로. 45도 틀어졌다고 보면된다. (자세한건 생략한다)


아무튼, 최상단을 (0,0)이라 하고.

하단으론 y, 우측으론 x 좌표이다.


이 목적은 '원하는 위치에 똥 떨구기'를 원하므로,

우선 테스트를 위해 (0,0)에 똥을 떨궈 보도록 한다.)




4-1 [ 똥 떨구기 ]


viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c1761a0d6d6de348b49aa9e83cef107260f1c49021c398f



우선 화면 좌상단위치에 똥을 한발 장전(?!) 한다.


임시 똥발사기를 Timer로 대신하고.

1초가 지나면, Floor의 (0,0)으로 위치로 옮긴다.



################################### 여기서 중요한 점 ###################################


우리가 말하는 (0,0) 위치값은. _tilemap상의 coordinate(좌표)이다.

따라서 (0,0)좌표를 화면상 global_position으로 바꾸기위해선 변환이 필요하다.


1. 원하는 좌표값을 가져온다. 여기선 (0,0) = coordinate

2. var a = _tilemap.map_to_world(coordiate) #a 에는 coordinate(0,0)값을 local_position값으로 변환값 들어간다.

3. var b = _tile_map.to_global(a) #b 에는 a = local_position 값을 global_positon값으로 변환값이 들어간다.

4. dung.positon = b #최종적으로 똥(dung)의 화면상 위치값(global_positon)을 b로 해주면된다.


#############################################################################################



장전된 똥이 1초뒤에 원하는 타일맵 좌표 (0,0)에 소환되며 '활ㅡ짝' 웃는것을 볼 수 있다.




4-2 [ 똥 중력적용 ]



viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c1761a0d6d6de348b49aa9ed0caf706205f4c1d021c398f



이미 해당 좌표 (0,0)으로 소환이 완료되었으므로,

해당위치(0,0)으로 소환할시 y-axis 값에 - 340(화면 밖 까지)을 해준다.


그리고 똥을 rigidbody2d로 만들었기때문에, physicmeterial를 생성해주고,

gravity_scale 값을 = 5로 주면, 소환시 중력이 적용된다. (장전중일땐 0으로)




4-3 [ 똥 스탑 ]


이는 잠시 어려운 난제 중 하나였다.

사실, physicsmeterial을 처음 다루기 때문이다.


대충 여기저기 만져본결과.

아무 힘이 가해지지 않았을시(소환즉시) gravity_scale = 0일때와

어떤 힘이 가해지는중(예:중력)일시 gravity_scale = 0은 다르다.

# 가장 이해하기 쉬운건. 우주상에 떠있는 사과라고 생각하면된다.

# 둘다 중력0이지만, 멈춰있을때와 누군가 톡 민힘이 남아있을때 계속 움직이는것.


아무튼

(0,0)에 소환했을당시 위치를 넘어서면, gravity와 linear_damp값을 주어 멈추게했다.




viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c1761a0d6d6de348b49aa9ed299f0572b091717021c398f



아무튼 잘 멈춘다.


굿.




4-4 [ 똥 드랍위치 표시 ]



그러나 이것은 코드상으로는 (0,0) 위치이지만.

실제 플레이어는 이를 모르거나 헷갈릴수 있다.


따라서 이것을 '알기쉽게' 똥 떨군 위치의 tile의 색상을 바꾼다.



viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c1761a0d6d6de348b49aa9ed59ff5522453161f021c398f



참고로 똥드랍 위치의 해당 타일색을 바꾸려면,

위의 ## 중요한 점 ## 변환을 역순으로 하면된다.


잘 된다.




4-5 [ 맵크기별 똥드랍 적용확인 ]


앞서, 타일을 직접 그리지않고,

맵생성기를 통해 그린 이유를 설명한다.


녹색의 Floor를 직접 그리게되면, tilemap상의 (0,0)위치가 매번 바뀐다.

이를 일일히 찾고 수정하기란 어렵다.


따라서 애초에 생성할때 좌표값들을 저장해놓고 관리하면 나중에 찾고 적용하기가 편하다.

생성기를 통해 적용했을경우

맵크기값만 바꿔줘도 자동으로 (0,0)을 찾아서 드랍해주는걸 볼 수 있다.




[ Mapsize = 0 ]


viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c1761a0d6d6de348b49aa9ed199a656250f161c021c398f



[ Mapsize = 5 ]


viewimage.php?id=2ab2d429f1&no=24b0d769e1d32ca73ceb86fa11d02831eebc6c37c2fa034916fac403202405ed3b9011cb8c1761a0d6d6de348b49aa9ed6c9a45b22581816021c398f




굿.



이젠, 원하는 Floor 좌표에 마음대로 똥을 떨굴 수 있는것이다.



...continue


ps.다음시간엔, Player가 똥을 처맞을시 충돌에대해 개발을 할 예정이다.

ps1.자꾸 글작성할때 ctrl+s를 눌러서 저장하기 띄우는건, 나만 그런가? 렉엄청걸린다.

ps2.가끔 스트 복붙하면 화면 맨위로 올라가진다. 나만그런가?

ps3. 틀린말, 오류, 훈수 대환영!