마인카트를 타고 불타는 경사면을 달리는 모습.

Unity 5로 '유니티2D 게임 공작소' 11장 Scene뷰를 활용하여 레벨 디자인 하기 따라하기 계속.

* 스위치 3개의 조합으로 장애물인 돌 3개를 각각 나타나고 사라지게 하는 설정을 달리하여 적절한 스위치 조합을 맞췄을 경우 돌 3개를 모두 사라지게 하여 지나갈 수 있게 하는 퍼즐 만들기 따라하기 성공.
양옆의 스위치는 각각 Switch Turn Mode, Switch Objs Turn Mode: On 중간 스위치는 Off로 설정.
좌측 스위치 Switch On Objs-0, Switch Off Objs-2-Stone Center/Right
중간 스위치 Switch On Objs-3-Stone Left/Center/Right, Switch Off Objs-0
우측 스위치 Switch On Objs-0, Switch Off Objs-1-Stone Left

* 스위치 퍼즐(시간차를 이용한 퍼즐) 따라하기.
1. 스위치를 켜면 발판 2개가 지정한 시간만큼 생성되었다 사라지는 것을 이용한 퍼즐.
2. 각 스위치는 발판 1개씩을 생성하고 가까운 것 부터 각각 사라지는 시간이 5,7,9초로 먼 스위치부터 켜고 건너야 하는 퍼즐.
3. 스위치를 켜면 올라갈 수 있는 돌 2개와 적 2명(적 2을 생성될 장소에 만든 뒤 Prefab으로 전환하고 만든 적은 제거, Switch Instantiate Objs에 스테이지가 아닌 프로젝트창의 방금 만든 프리팹에서 끌어와 적용한다)이 동시에 생성되고 10초 뒤엔 모두 사라진다. 적과 싸우다 보면 10초 뒤 적들과 함께 올라갈 돌들이 사라지므로 적을 무시하고 가야하는 퍼즐.

- Stage라는 폴더에 모아두었던 JumpTrigger들을 각각의 메인, 룸1, 룸2, 보스필드로 옮겨놓았더니 죽은 다음에 다시 실행시 PlayerController.cs-Awake() 함수에서 Stage_Trigger_CheckPoint[] triggerList = GameObject.Find("Stage").GetComponentsInChildren<Stage_Trigger_CheckPoint>(); 코드의 이동 장소를 못찾아 주인공이 꼼짝 못하는 버그가 생겼다. 태그로 검색하는 방법을 찾아야할 듯 하다.
Stage_Trigger_CheckPoint[] triggerList =
GameObject.FindGameObjectWithTag("JumpTrigger").
GetComponentsInChildren<Stage_Trigger_CheckPoint>();로 변경해 문제를 해결
하다.

* 물리엔진을 사용한 특수연출(낙석)
StageObj_DestroySwitch.cs 새로 작성, PlayerBodyCollider.cs-OnTriggerEnter2D()함수에 내용 추가.
- 낙석 트리거 준비: 빈 게임오브젝트 생성, 'DestroySwitch'로 명명, BoxCollider2D 적용(x: 1, y: 20), StageObj_DestroySwitch.cs 적용. 프리팹으로 전환하기.
- 떨어질 돌 준비: 둥그런 바위 모양인 Stage_Rock 스프라이트를 스테이지에 끌어 넣고 Rigidbody2D(Mass:100), Circle Collider 2D(is Trigger:Off) 적용. 하위에 'DeathCollider_Rock'이란 이름으로 빈 게임오브젝트 생성, Circle Collider 2D(is Trigger:On)적용. 프리팹으로 전환하기. 낙석의 Rigidbody2D-Gravity Scale을 조정해 낙하속도를 조절할 수 있다. 1은 너무 느리고 5정도가 적당해 보이는듯.
- 돌 낙하를 막을 용도로 박스나 스톤을 낙석 밑에 배치해 추락을 막고 이 막고있는 장애물을 낙석트리거의 StageObj_DestroySwitch-DestroyObjList에 Size를 1로 늘리고 Element0에 드래그하여 넣어준다.
주인공이 낙석트리거를 지나가면 낙석을 막고있던 받침대가 사라져 낙석은 아래로 추락한다. 추락하여 움직이고 있는 중의 낙석을 맞으면 주인공은 죽는다.
낙석 테스트 성공.

* 높은 곳에서 떨어져 내릴 경우 충돌체크가 제대로 안되어 땅속에 박혀 꼼짝 못하게 되는 버그가 종종 생기고 있다.
- BaseCharacterController.cs에서 velocityMax = new Vector2(100.0f, 80.0f); 최대 속도인 변수 y값을 100에서 80으로 변경하자 높은 곳에서 떨어져도 땅속에 박히는 경우가 사라졌다.
- 최대 속도를 제한한 뒤 컴퓨터 상에서는 문제가 없는데 웹 용으로 플레이할 경우 바닥의 충돌체크가 얇을 경우 바닥에 박혀 움직이지 못하는 버그가 생긴다. 웹 용의 경우 루프의 업데이트 속도도 떨어지는 모양. y 최대 속도를 80에서 70으로 변경해 봤지만 그래도 웹 용에선 바닥에 박히는 버그가 여전하다. 바닥의 충돌체크를 넓게 만드는 방법으로 가야할 듯.

* 비탈길을 굴러내려가는 마인카트
빈 게임오브젝트 생성, 'Car_HingeJoint'로 명명, 카트 몸통 그래픽인 Stage_Car_Body를 하위로 끌어넣어 만들고 MoveObject 태그 적용, BoxCollider2D 적용(is Trigger:Off), Rigidbody 2D 적용. 그 하위에 카트 바퀴 그래픽인 Stage_Car_Wheel를 끌어넣고 복제해 4개로 만든 다음 앞쪽 두 바퀴에 Circle Collider 2D(is Trigger:Off), Rigidbody 2D, Hinge Joint 2D(Connected Rigid Body: Stage_Car_Body의 Rigidbody 2D 적용하고 Connected Anchor위치 조정) 적용. 프리팹으로 전환.
Car_HingeJoint 프리팹을 경사길에 배치하고 굴러가지 않게 박스 등으로 막아두고 Car_HingeJoint 프리팹에 올라탄 위치에 DestroySwitch 트리거를 갖다놓고 StageObj_DestroySwitch-Destroy Obj List-Size: 1, Element0: 막아둔 박스 드래그하여 넣기. 이렇게 하여 마인카트에 올라타면 막고있던 장애물이 사라져 자동으로 경사길을 달려가게 된다.
Stage_Car_Body의 Rigidbody 2D-Fixed Angle에 체크하면 카트가 뒤집히거나 하는 것을 방지할 수 있다. 따라하기 성공.

* 카메라 트리거로 상황에따라 화면 확대/축소시키기.

* 불꽃속에 머무르면 체력이 차츰 줄어드는 효과 처리
- 파티클 시스템으로 화염 이펙트 만들고 particle System에 새로 작성한 Unity2DSortingLayer.cs 적용하여 맨 앞에 보이게 만든 뒤 'EffectFire'란 명칭의 프리팹 생성,
- 빈 게임오브젝트 생성, 'DamageFire'로 명명, 'DamageObject' 태그 지정.
새로 StageObj_Damage.cs 작성하여 적용. Circle Collider 2D(is Trigger:On) 적용. 하위에 위에 만든 화염 이펙트 프리팹 추가. 화면에 배치한 뒤 주인공이 그 안에 머무르면 체력이 줄어드는 효과 테스트 성공.

7/31 일
- 버그 2가지.
1. Stage01의 경우 열쇠 A를 먹어도 디스플레이상에 표시안되는 문제. 다른 2,3,4 스테이지상에선 문제 없으나 유독 1스테이지만 안되고 있다.
-'Stage_Item_Key_A'란 명칭의 게임오브젝트가 StageA_SubCamera 이외에도 키도어 두 군데에서 모두 동일 명칭을 쓰고 있어 생긴 문제였다. 나머지 이름들을 변경해주자 버그가 사라졌는데 그러고보니 오히려 나머지 2,3,4 스테이지에서 문제가 없이 작동했던 것이 이해가 안된다. 어쨋건 명칭을 바꾼 것 때문에 StageObj_KeyDoor.cs의 Awake()함수 중 closeDoor = transform.Find ("Stage_Item_Key_A").gameObject;를 바꾼 이름 "KeyGraphic"으로 바꿔줘야 했다.

2. 웹 용으로 랜더링할 경우 땅에 박혀 움직이지 않는 현상 계속. Hierarchy-Player-Player Controller-Velocity Max-Y: 80으로 인스펙터창에서 바꿔줘도 동일한 현상.

* 적 최종 보스 만들기.
부품들을 조합하여 형태 갖추고 몸통에 올라탈 수 있는 Box Collider 2D, 머리에 피격 판정용 Circle Collider 2D, 집게와 발톱들에 공격 판정용 Circl Collider 2D 추가.
적 보스 만들기 계속. EnemyMain_D_Boss.cs 새로 작성.
새 게임 오브젝트 생성, 'BossHUD'라 명명, 기존 서브 카메라에 주인공 체력바(HUD_HP, HUD_HPbar, HUD_HPbar_Back)를 복사하여 이름만 살짝 변경한 뒤 하위에 붙여넣어 보스 체력바도 완성.
한데 애니메이션이 엄두가 안난다. 애니메이션 중. 대충 성공.

16/7/31 일