적의 체력을 세팅하고 탄환으로 적을 맞출시
적의 체력이 감소하고 탄환 오브젝트는 삭제하는 코드를 작성했다.
<PseudoCode> 의사코드
Enemy 체력을 5 로 세팅
Bullet 이 EnemyTag 와 충돌했을때
Enemy Hp--
if ( Hp == 0 ) Destroy ( gameObject )
bullet 은 Destroy ( gameObject )
▼ 발생한 문제

여기서 또 문제가 발생했다.
적용이 되는것 같으면서도 가끔 Enemy 가 한 방에 Destroy 되는 현상이 발생
내가 모르는 사이 크리티컬 확률이 생긴건가??
public class Enemy : MonoBehaviour
{
[Header("Info")]
[SerializeField] private int hp = 5;
[Header("Movement")]
[SerializeField] private Transform player;
[SerializeField] private float baseSpeed = 3f;
[Header("Tags")]
[SerializeField] private string playerTag = "Player";
[SerializeField] private string wallTag = "Wall";
private void Update()
{
transform.Translate(Vector3.back * baseSpeed * Time.deltaTime);
}
public void Hit()
{
hp--;
if (hp <= 0)
{
Destroy(gameObject);
}
}
private void OnTriggerEnter(Collider other)
{
var bullet = other.GetComponent<Bullet>();
if(bullet != null)
{
Hit();
}
if(other.CompareTag("Player"))
{
Destroy(other.gameObject);
}
else if(other.CompareTag("Wall"))
{
Destroy(gameObject);
}
}
}
public class Bullet : MonoBehaviour
{
[SerializeField][Range(1f, 30f)] private float bulletSpeed;
[SerializeField] private float lifeTime = 5f;
[SerializeField] private string enemyTag = "Enemy";
void Start()
{
Destroy(gameObject, lifeTime);
}
private void Update()
{
transform.Translate(Vector3.up * bulletSpeed * Time.deltaTime);
}
private void OnTriggerEnter(Collider other)
{
if(!other.CompareTag(enemyTag))
{
return;
}
Enemy enemy = other.GetComponent<Enemy>();
if(other.CompareTag(enemyTag))
{
enemy.Hit();
}
Destroy(gameObject);
}
}
▼ 문제가 발생한 원인



아 나는 바보다
- 원인 : Enemy 클래스와 Bullet 클래스 모두 데미지를 연산하고 있었다 ( 즉 데미지가 두배 )
└ Enemy 클래스의 OnTriggerEnter(Collider other) 함수에서 Hit( )
└ Bullet 클래스의 OnTriggerEnter(Collider other) 함수에서 Tag 시 Hit( ) - 그리고 또 다른 원인으로는 화면 밖에서 생성된 Enemy 가 이미 몇번의 충돌 끝에 화면에 보여지는 것
버그의 대부분은 프로그래머의 실수라는 말은 단순하지만 세삼 체감되는 말이다.
▼ 해결
var bullet = other.GetComponent<Bullet>();
if(bullet != null)
{
Hit();
}
- 위의 이 코드를 삭제
- Bullet 에서만 데미지를 연산하게 작성
└ 이유는 탄환에서 데미지를 넣게 해야 다음에 새 Enemy 를 추가할 때에도 편할것 같다.
└ Enemy 에서 데미지 연산을 하게 작성하면 새 Enemy 를 추가할 때마다 데미지 계산을 넣는 번거로움이 발생
└ 그래서 Bullet 이 Enemy 와 충돌시 오브젝트 파괴와 데미지 연산을 하는 것으로 수정
'📖TIL > 🤔발생한 문제와 해결' 카테고리의 다른 글
| 팀 프로젝트 중 발생한 문제와 해결 (0) | 2025.12.16 |
|---|---|
| 팀 프로젝트 중 발생한 문제 (0) | 2025.11.11 |
| 코루틴 사용중 팅김 현상과 해결 (0) | 2025.10.18 |
| 유니티 작업중 발생한 문제와 해결 (0) | 2025.10.16 |