강의 71,72,73강 수강
강의 수강: Unity Turn-Based Strategy Game: Intermediate C# Coding
71. Grenade Action (13:09)
GrenateAction 추가.
BaseAction 기반의 새로운 액션은 어떻게 추가하는지 복습하는 동시에, 발사체가 있고 범위 데미지가 있는 액션은 어떻게 구현하는지에 대한 튜토리얼이라 할 수 있겠다.
다만 아쉬운 건 수류탄이 직선으로 linear 타이밍으로 날아간다는 것과 폭발 이펙트가 없다는 것인데, 폭발 이펙트는 다음 강의에서 구현한다. 날아가는 애니메이션은 수정할런지.
72. Grenade Visuals (16:59)
폭발 이펙트는 이전의 ShootAction 에서 사용했던 BulletHitVFX 를 복사해서 수정.
- Shape - Radius: 0.2 -> 2
- Emission - Brusts
- Count: 30 -> 200
- Cycles: 1 -> 2
- Interval: 0.010 -> 0.050
- Start Speed: 0.5 ~ 3 -> 3 ~ 10
- Start Size: 0.1 ~ 0.2 -> 0.2 ~ 0.6
- Trails: disabled -> enabled
- Lifetime: 0.1
- Minimum Vertex Distance: 0.01
- Width over Trail: 0.1
- Renderer
- Material: 새로 생성한 GrenadeExplosion material 지정
- Trail Material: 새로 생성한 GrenadeExplosion material 지정
Trail 도 ShootAction 에서 썼던 것을 복사해서 사용.
포물선을 그리며 날아가는 것에는 AnimationCurve 라는 unity 클래스를 활용.
Vector3 moveDir = (targetPosition - positionXZ).normalized;
float moveSpeed = 15f;
positionXZ += moveSpeed * Time.deltaTime * moveDir;
float distance = Vector3.Distance(positionXZ, targetPosition);
float distanceNormalized = 1 - distance / totalDistance;
float maxHeight = totalDistance / 4f;
float positionY = arcYAnimationCurve.Evaluate(distanceNormalized) * maxHeight;
transform.position = new Vector3(positionXZ.x, positionY, positionXZ.z);
73. Destructible Crate (07:56)
Create (=상자) 라는 별도의 개임 객체를 만들고, 해당 객체의 layer 는 Obstacles 로 지정.
GrenateAction 에서 데미지를 주는 로직에서 범위 내에 있는 Crate 에도 데미지를 주도록 수정. Crate 는 HP 개념 없이 한 대만 맞으면 부서지도록 (삭제하도록) 구현.
단 이 과정에서 Crate 가 부서질 경우 Pathfinding 도 업데이트 해줘야 하는데, Pathfinding 과 Crate 간 상호 의존성을 만들지 않기 위해 PathfindingUpdater 라는 클래스를 따로 만들고, 해당 클래스에서 DestructibleCrate.OnAnyDestroyed 리스너를 등록하게끔 해서 구현.