2025.03.13
강의 52강 수강
강의 수강: Unity Turn-Based Strategy Game: Intermediate C# Coding
52. Shooting Bullet Visual (20:51)
Effect - Trail 객체를 생성해서 총 쏜 효과를 만든다.
- Trail Renderer
- Width: 0.05
- Time: 0.1
- Min Vertex Distance: 0.01
- autodestruct: enable
- Material: Material 객체를 아래 속성으로 새로 만든다.
- Surface Input
- Base Map: 적당한 색 (강의에서는 노란색)
- Emission: enable
- Emission Map: 적당한 색 (강의에서는 빨간색)
만든 Trail 객체를 Prefab 으로 만든다.
Unit Prefab 내부의 총 객체 안에 ShootPoint 객체를 만들어서 총구에 위치시킨다.
이벤트 리스너에서 원하는 데이터 형식 받기
public event EventHandler<OnShootEventArgs> OnShoot;
public class OnShootEventArgs : EventArgs
{
public Unit targetUnit;
public Unit shootingUnit;
}
private void Shoot()
{
OnShoot?.Invoke(this, new OnShootEventArgs {
targetUnit = targetUnit,
shootingUnit = unit,
});
targetUnit.Damage();
}
ShootAction 에서 총을 쏘면 이벤트를 듣고 있던 UnitAnimator 에서 총알 발사 애니메이션 실행.
- 위에서 만든 Trail Prefab (
BulletProjectile) 으로 객체를 생성해서 움직인다.
private void ShootAction_OnShoot(object sender, ShootAction.OnShootEventArgs e)
{
animator.SetTrigger("Shoot");
Transform bulletProjectileTransform =
Instantiate(bulletProjectilePrefab, shootPointTransform.position, Quaternion.identity);
BulletProjectile bulletProjectile = bulletProjectileTransform.GetComponent<BulletProjectile>();
Vector3 targetUnitShootAtPosition = e.targetUnit.GetWorldPosition();
targetUnitShootAtPosition.y = shootPointTransform.position.y;
bulletProjectile.Setup(targetUnitShootAtPosition);
}
public class BulletProjectile : MonoBehaviour
{
private void Update()
{
Vector3 moveDir = (targetPosition - transform.position).normalized;
float deistanceBeforeMoving = Vector3.Distance(transform.position, targetPosition);
float moveSpeed = 200f;
transform.position += moveSpeed * Time.deltaTime * moveDir;
float distanceAfterMoving = Vector3.Distance(transform.position, targetPosition);
if(deistanceBeforeMoving < distanceAfterMoving)
{
trailRenderer.transform.parent = null;
Destroy(gameObject);
}
}
}
총 쏜 이펙트가 좀 더 자연스럽게 사라지게 하기 위해 BulletProjectile 객체를 없애기 전에 trailRenderer 의 부모를 null 로 하고, autodestruct 옵션을 켜면 trail 애니메이션이 끝날 때 자연스럽게 사라진다.
총 맞은 이펙트를 만들기 위해 Effect - Particle 객체를 만드는 데 옵션을 꽤 많이 설정한다. 일일이 기록하진 않겠다. 그냥 기억 안나면 강의를 다시 보자.
Trail, Particle 과 Material 을 직접 만들어서 적용했는데 퀄리티가 괜찮다. 다음 강의가 Health System 이니 점점 게임 같아지는 것 같아서 재밌다.