Unity 5.2.0f3로 '나홀로 완성하는 유니티 3D 액션게임' 미소녀 액션게임 8장까지 따라하기.

* 독특했던건 주인공의 공격 처리. 주인공 앞 부분에 캡슐 컬라이더를 배치하고 그 안에 들어온 적의 컬라이더들을 List에 담고 공격 버튼 클릭시 List에 들어있는 적들의 데미지 처리 함수를 호출하는 방식.

17/6/03 토

(용량이 커서 게임을 올리는건 보류)
조작법:
화면의 좌측 빨간색 터치패드를 마우스로 끌거나 폰의 경우 터치하여 주인공 조종,
화면의 우측 버튼들 클릭 또는 터치로 일반 공격(Attack) / 대시 공격(Dash) / 스킬(Skill) 공격 발동.
(일반공격 버튼의 경우 누르고 있으면 자동으로 3단계의 연속공격을 반복)
(데미지: 일반공격-10, 대시/스킬공격-30)
적 캐릭터의 경우 3군데의 생성장소에서 10초에 한 개씩 새로 생성되어 주인공을 향해 다가온다. 적은 주인공 앞에 머무르면 2초간격으로 주인공에게 2의 데미지를 준다.

2017/5/27 (토)
* PlayerMovement.cs(주인공 이동처리 관련) 새로 작성, Player에 추가.
* 화면상에 터치 패드 생성하고 드래그하여 주인공 이동시키기:
-Canvas 생성하고 그 안에 Image 추가한 뒤 터치패드 백그라운드, 터치패드 이미지 넣고 위치 조정하기.
- TouchPad.cs 새로 작성, TouchControl-TouchPad에 추가, player 항목에 Hierarche-Player 적용.
- TouchPad에 Event Trigger 컴포넌트 추가, Add New Event Type으로 Point Down, Point Up 2개 추가한 뒤 각각 Toupad를 끌어넣고 TouchPad.ButtonDown, TouchPad.ButtonUp 함수를 지정.

# 버그: 잘 작동되는데 현재는 앞으로 진행시 하늘로 올라가는 버그가 있다.
PlayerMovement.cs의 Update() 함수 중
Vector3 speed = rbody.velocity;
speed.x = 4 * h;
speed.y = 4 * v;
rbody.velocity = speed; 부분을 주석처리하니 정상으로 돌아왔다.

* 주인공 후방 상공에서 따라가는 카메라 만들기:
FllowCamera.cs 새로 작성, Main Camera에 추가, follow에 Player 적용.

# 버그: 카메라가 주인공을 따라가지 않고 있다. LateUpdate()를 LastUpdate()라고 오타쳐서 생겼던 버그. 해결.

* 공격/대쉬/스킬 버튼 추가하고 그에따른 행동 처리.
* 체력게이지 만들기:

- Canvas 새로 생성, 'HealthUI'라 명명, 자식으로 Slider 추가, 'PlayerHealthSlider'라 명명한 뒤 위치 조정. 자식 중 Handle Slide Area는 제거하고 Fill Area, Fill의 x,y,z Position, width, Height 모두 0으로 변경, Fill-Color 붉은색으로 변경.
- PlyerHealth.cs 작성하여 Player에 추가, Health Slider에 HealthUI-PlayerHealthSlider 적용.

* 적 슬라임 추가하고 공격하고 피격당하는 처리:
EnemyHealth.cs(적 피격시 테두리 색 붉게 변화시키고 죽으면 화면 아래로 가라앉게 하기), EnemyAttack.cs(주인공이 적 주변에 가면 공격대기시간 마다 데미지를 받는 방식) 새로 작성, Slime에 추가.
6장 체력 게이지, 몬스터(1)까지 따라하기 완료.

2017/6/3 (토)
Unity 5.2로 '나홀로 완성하는 유니티 3D 액션게임' 7장 미소녀 액션게임 3-체력, 게이지, 몬스터(2) 따라하기.

* 적이 주인공을 향해 가기:
- Terrain에 Navigation 베이킹.
- 적 Slime에 NavMeshAgent 적용,
- 'EnemyMove.cs' 새로 생성, 추가하여 적이 주인공을 따라가게 하기.

* 주인공의 공격 처리:
- Player의 자식으로 빈 게임오브젝트 2개 추가, 'NormalTarget'(Capsule Collider 추가), 'SkillTarget'(Sphere Collider 추가)이라 명명. 콜라이더 크기 적절하게 조절. 'NormalTarget.cs', 'SkillTarget.cs' 새로 작성, 각각 추가.
- 'PlayerAttack.cs' 새로 작성 Player에 추가, 'PlayerMovement.cs'에 내용 추가. PlayerAttack.cs 컴포넌트 중 NormalTarget, SkillTarget 항목에 각각 동일명의 Player-NormalTarget/SkillTarget을 끌어 적용.

# 버그: 작동을 하긴 하는데 반응속도가 너무 느리다. 때리고 난 뒤 1초 정도 인터벌 뒤에 적의 체력이 줄고 뒤로 밀려나간다.
- 해결: StartCoroutine()에서 부르는 함수 StartDamage(데미지 양, 주인공 위치, 대기시간, 밀리는 정도)의 매개변수를 제대로 이해 못해서 생긴 현상이었다. 대기시간 변수를 밀리는 정도의 x좌표 정도로 착각해서 5를 넣어뒀기에 공격이 있은지 5초 뒤에야 함수가 실행되었고 그제서야 체력이 깎이고 밀리는 동작이 나온것.

Unity 5.2로 '나홀로 완성하는 유니티 3D 액션게임' 7장 미소녀 액션게임 4-슬라임 자동 생성 및 화면 효과 따라하기.

* 10초마다 3곳의 생성 지점 중 한 곳에서 적 슬라임 생성하기:
- 빈 게임오브젝트 생성, 'EnemySpawn'으로 명명, 'EnemySpawn.cs' 작성하여 추가.
- 자식으로 3개의 빈 게임오브젝트 생성, 'SpawnPoint(1)/(2)/(3)'로 각각 명명.
- EnemySpawn.cs의 Enemy에 Slime 프리팹 적용, SpawnPools의 Size 3으로 설정, SpawnPoint(1)~(3)을 각각 끌어 적용.

# 버그: 생성되는데는 문제가 없는데 새로 생성된 슬라임의 경우 공격에 데미지를 받지 않는다. 슬라임이 죽으면 NormalTarget.cs의 list인 targetList에서 collider 목록이 제거되어야 하는데 제거되지 않아 생기는 문제로 보인다. 8:45
EnemyHealth.cs의
GetComponent<Rigidbody> ().isKinematic = true;를 주석처리하자 문제가 해결됐다.
죽을때 걸리적 거리지 않게 하는 것인데 Kinematic으로 변화되며 targetList에 새로운 collider로 인식되어 추가되고 본체가 사라짐으로 null상태인 콜라이더 찌꺼기가 남아 생기는 문제.

# 버그: 스킬 공격이 제대로 적용이 되지 않는 문제.
'Player' AnimationEvent 'Skill' has no receiver! Are you missing a component?'란 에러 메시지가 뜬다.
- 해결: Hierarchy-Player를 선택한 뒤 Animation 창을 띄우면 애니메이션들이 보이는데 그중 BG_Skill을 선택해 보면 중간에 Animation Event를 설정해 놓은 것이 보인다. 점프하여 칼을 던지는 순간에 Skill()함수를 호출하게 해 놓았는데 현재 이 함수가 없기에 뜨는 에러였다. PlayerMovement.cs에 임시로 public void Skill(){}를 추가하니 에러가 사라졌다.

# 버그: 적들이 주인공쪽으로 향하지 않고 0,0 좌표를 향해 가는 버그가 생겼다.
- 해결: 새로 'Player1'이란 태그를 만들고 EnemyMove.cs의 Awake() 함수 내용도
player = GameObject.FindGameObjectWithTag ("Player1").transform; 으로 바꾸니 해결됐다. 왠지 몰라도 Player란 태그를 쓰면 0,0,0 좌표로 인식한다.

# 버그: 적 슬라임의 주인공에대한 공격이 안 먹히는 버그.
- 해결: EnemyAttack.cs의 Awake()함수에서
player = GameObject.FindGameObjectWithTag ("Player");를
player = GameObject.FindGameObjectWithTag ("Player1");로 바꾸니 해결.

* 주인공 데미지 입을 때 화면 빨갛게 만들기:
- Hierarchy-HealthUI에 자식으로 UI-Image 생성, 'DamageImage'라 명명.
- 'PlayerHealth.cs' 내용 추가. 컴포넌트의 DamageImage 항목에 위에 만든 DamageImage 끌어 적용.

* 터치 컨트롤러 오류 처리:
터치 컨트롤러 동작이 제대로 이뤄지지 않을 경우 두 캔버스가 충돌을 일으켜 발생하는 현상이라고 책에 나왔는데 현재 에디터 상에서의 실행엔 문제가 없다. 안드로이드 실기에서의 문제이려나? 어쨋건 해결하려면 HealthUI의 Graphic Raycaster 컴포넌트를 Remove Component로 제거하면 된단다. 현재는 그냥 비활성화 시켜놓았다.
8장까지 따라하기 완료.


스킬공격(점프하여 칼 날리기)하는 장면 스냅샷.