Game Dev Study Log

by ricale

취미로 하는 게임 개발 공부

강의 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 도 업데이트 해줘야 하는데, PathfindingCrate 간 상호 의존성을 만들지 않기 위해 PathfindingUpdater 라는 클래스를 따로 만들고, 해당 클래스에서 DestructibleCrate.OnAnyDestroyed 리스너를 등록하게끔 해서 구현.