2018/5/14 월
Unity 5.2로 '유니티 게임개발 스타트업' 3-3 3D 액션게임 만들기 따라하기 계속.
* 적 프리팹 애니 설정:
Dude_low.fbx 선택한 뒤 Rig-Configure 클릭, 본들이 제대로 정해졌는지 체크한 뒤 Done
버튼 눌러 나온다.
Dude.prefab을 프로젝트 창으로 드래그하여 추가.
Idle.anim 파일을 Dude로 드래그하면 자동으로 Dude.controller가 생성되고 Animator
창에 Idle 스테이트가 생성된다. Run, Attack, Hurt, Die.anim도 드래그하여 넣고
Run: Bool형, Attack, Hurt, Die: Trigger형 변수를 새로 생성.
(Bool형은 지속되는 상태, Trigger형은 단발성인 상태에 적합해 보인다.)
Idle <> Run <> Attack 형태로 Transition 생성, 조건으로 Run,
Attack이 true일 때로 정하고 Has Exit Time: Off로 설정.
세 상태 모두 Hurt로 트랜지션 생성하고 Attack에서 Hurt로의 전이를 제외하고 왕복되게 설정. Hurt
> Run, Hurt > Idle은 조건 Run이 true/false인지로 갈리게 설정.
Hurt > Die 조건: Die로 설정.
* 적 주인공 추격, 공격처리:
- Enemy.cs 생성, Idle 상태로 있다가 주인공이 추적범위에 들어오면 추적 시작, 공격 범위에 들어오면
공격 하게 하고 멀어지면 다시 대기 상태로 전환. 현재 주인공쪽을 향하는 것은 되는데 이동이 안되고 있다(해결:
movSpeed가 0인 상태였기 때문. attackSpeed와 같은 4로 설정하니 제대로 쫓아온다).
- 프로젝트 창의 Dude 프리팹 선택 뒤 Animation 창으로 이동, Attack을 선택,
20번째 프레임으로 이동해 마우스 우클릭, Add Animation Event 클릭,
Edit Animation Event 창에서 function: DistanceCheck() 선택.
공격을 마친 뒤 거리를 측정하는 함수를 부르는 방식.
* 적의 공격시 주인공 체력 줄이고 0이 되면 죽음 처리:
- Enemy.cs, PlayerCtrl.cs에 코드 추가.
Dude 프리팹 선택 뒤 Animation 창으로 이동, Attack을 선택,
10번째 프레임으로 이동, 마우스 우클릭, Add Animation Event 클릭,
Edit Animation Event 창에서 function: AttackOn() 선택.
한데 이 방식은 적의 공격에 주인공이 맞았는지를 판단하는게 아니라 그냥 공격이 시작되면(적의 공격
애니메이션이 실행되면) 무조건 지정한 데미지 만큼 체력이 깎이는 방식이라 좀 어설픈 방식이긴 하다.
2018/5/19 토
Unity 5.2로 '유니티 게임개발 스타트업' 3-3 3D 액션게임 만들기 따라하기 계속.
* 적 피격, 죽음 처리:
Enemy.cs, Bullet.cs에 코드 추가하여 주인공 총알이 적에게 적중시 피격 애니메이션과 파편 튀기는
이펙트 붙이고 체력 감소, 체력이 0 이하가 되면 죽는 애니메이션 실행.
Tag에 Enemy 항목 추가, Dude의 Tag: Enemy로 설정.
Dude-Enemy-FxPoint에 Dude 자식인 FX_Point를 드래그해 연결,
HitFX: Sparks.prefab, HitSound: Mop_A_Hit.wav, DeathSound: Mop_A_Death.wav
각각 드래그해 연결.
Dude 클릭 뒤 Animation 창으로 이동, Hurt 애니메이션으로 전환한 뒤 20프레임에 마우스 우클릭,
Add Animation Event 선택, Function: DistanceCheck으로
설정하여 총알에 피격 받은 뒤 Idle 이나 Run 상태로 전환되게 설정.
죽음 애니메이션은 너무 느려서 Dude-Animator 창으로 이동, Die 상태의 Speed: 2로 설정해 애니메이션
속도를 2배로 변경.
* 곰 모양 적도 생성, 설정 좀 변경하여 만들기:
Teddy.prefab을 Hierarchy로 올리고 Tag: Enemy로 설정, Animator-Controller:
Dud.controller 지정, Audio Source 컴포넌트 추가, Enemy.cs 추가.
Enemy-Player: Player(Transform), FxPoint: FX_Point(Transform),
HitFX: Sparks.prefab, HitSound: Mop_B_Hit.wav, DeathSound: Mop_B_Death.wav
지정.
Mov Speed: 4, Find Range: 10, Damage:12, MaxHP: 150, Hp: 150으로
지정.
* 체력게이지 만들기('나홀로 완성하는 유니티 3D 액션게임' 방식):
- Canvas 새로 생성, 자식으로 Slider 추가, 'pHealthSlider'라
명명한 뒤 위치 조정. 자식 중 Handle Slide Area는 제거하고 Fill Area, Fill의 x,y,z
Position, width, Height 모두 0으로 변경, Fill-Color 붉은색으로 변경.
- PlayerCtrl.cs에 using UnityEngine.UI; //Slider 추가,
public Slider hpSlider 변수 추가, Hurt()함수에 hpSlider.value = hp /
maxHP; 내용 추가하여 주인공 체력 감소에 따라 체력 바 감소되게 처리.
* 적 사망시 캡슐 콜라이더 꺼지게 하기:
Enemy.cs의 Death() 함수에
this.GetComponent<CapsuleCollider> ().enabled =
false;
내용 추가하여 죽으면 캡슐콜라이더의 활성화가 꺼져 그 위를 지나가도 되게 처리. |