Unity에서 적이 보이지 않았던 이유와 이미지 뭉개짐 해결

김보근·2024년 9월 11일

Unity

목록 보기
83/113

Unity에서 적이 보이지 않았던 이유와 이미지 뭉개짐 해결

1. 적이 보이지 않았던 이유:

오늘 적 오브젝트가 Scene 창에서는 잘 보이지만 Game 창에서는 전혀 보이지 않는 문제를 겪었다. 처음엔 렌더링 문제나 오브젝트의 레이어 문제인 줄 알았는데, 원인은 예상 외로 간단했다. 적의 Z축 위치가 잘못 설정되어 있어서 카메라가 렌더링할 수 있는 범위를 벗어났던 것이다.
해결 방법은 적 오브젝트의 Z축 값을 0으로 고정해서 카메라가 적을 제대로 렌더링할 수 있도록 수정하는 것이었다. 2D 게임에서 Z축은 잘못 설정될 수 있는 흔한 문제라는 걸 다시 한 번 느꼈다.

void SpawnEnemy()
{
    // 랜덤한 각도를 계산
    Vector2 randomDirection = Random.insideUnitCircle.normalized;

    // 스폰 위치 계산 (랜덤 방향으로 반경 내에서)
    float spawnDistance = Random.Range(minSpawnDistance, spwanRadius);
    Vector3 spawnPosition = player.position + new Vector3(randomDirection.x, randomDirection.y, 0) * spawnDistance;

    // 몹을 해당 위치에 소환
    GameObject enemy = GameManager.Instance.ObjectPool.Get(0);
    enemy.transform.position = spawnPosition;
    enemy.GetComponent<Enemy>().Init(spawnData[level]);
}

2. 총탄 이미지 뭉개짐 해결:

총탄을 발사할 때, FromToRotation을 사용해 총탄의 방향을 회전시키고 있었는데, 총탄이 날아가는 동안 X, Y 축의 값들이 동시에 변경되면서 이미지가 뭉개지는 현상이 발생했다.
이 문제는 내가 총탄의 기본 방향이 위쪽(Y축)을 향하고 있다는 걸 고려하지 않아서 발생한 것이었다. 이를 해결하기 위해 Mathf.Atan2로 각도를 계산한 후, Z축 회전만 적용하도록 Quaternion.Euler로 수정했다. 기본 방향을 고려해 -90도를 추가해줘야 이미지가 올바른 방향으로 회전하면서 문제를 해결할 수 있었다.

private void Fire()
{
    if (!player.scanner.nearestTarget)
        return;

    Vector3 targetPos = player.scanner.nearestTarget.position;
    Vector3 dir = targetPos - transform.position;
    dir = dir.normalized;

    Transform bullet = GameManager.Instance.ObjectPool.Get(prefabId).transform;
    bullet.position = transform.position;

    // 총탄이 기본적으로 위를 향하고 있다면 Z축만 회전
    float angle = Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg - 90f;
    bullet.rotation = Quaternion.Euler(new Vector3(0, 0, angle));

    bullet.GetComponent<Bullet>().Init(damage, count, dir);
}

결론

이런 방식으로 적이 보이지 않거나 이미지가 뭉개지는 문제를 해결할 수 있었다는 걸 기록해두면 나중에 비슷한 문제를 만났을 때 쉽게 해결할 수 있을 것 같다.

영상

profile
게임개발자꿈나무

0개의 댓글