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 일
|