코드 및 공부/기타

Debug

ekrxjvpvj0110 2024. 11. 5. 20:40

유니티 버전 - 2022.3.48f1

 

 

 

 

 

목차


  • Debug 클래스
  • 자주 사용되는 Debug
  • 마치며

 

 

 

 

 

Debug 클래스


Debug 클래스는 Unity에서 디버깅을 위한 다양한 기능을 제공하는 정적 클래스입니다
게임 개발 중 발생하는 문제를 추적하고, 게임의 상태를 확인하며, 코드 실행 중의 정보 출력을 용이하게 해줍니다
개발을 할때 Debug 클래스를 이용하여 다양한 로그 메시지를 출력할 수 있으며, 이를 통해 게임의 로직을 분석하고 버그를
수정하는 데 도움을 받을 수 있습니다

 

아래에는 Debug. Log / LogWarning / LogError / Assert / DrawRay에 대하여 다루고 있습니다 

 

 

 

자주 사용되는 Debug


 

Debug.Log


게임 실행 중 일반 정보를 출력할 때 사용합니다, 게임의 상태나 변수 값 등을 콘솔에 표시해 디버깅에 도움을 줍니다

Debug.Log("플레이어가 이동했습니다."); // object message


void OnCollisionEnter2D(Collision2D collision) // object message, object context
{
	Debug.Log("충돌 발생", collision.gameObject);
    	// 충돌한 오브젝트의 정보를 로그에 출력하고, context로 해당 오브젝트를 연결
}

 

콘솔에서 충돌로 인해 디버그가 발생하였을때 더블클릭하면 Hierarchy에서 충돌한 오브젝트를 가리킵니다

 

 

 

Debug.LogWarning


경고 메시지를 출력할 때 사용합니다, 주의가 필요한 상황이나 잠재적인 문제를 콘솔에 노란색으로 표시합니다

게임에 심각한 오류를 겪지는 않지만, 개발시 눈여겨봐야 할 사항을 경고할 때 유용합니다, 예를 들어서 특정 값이 예상 범위를 벗어났을 때 사용합니다

public class PlayerSpeedCheck : MonoBehaviour
{
    public float speedThreshold = 10f; // 경고 기준 값
    public Rigidbody2D playerRigidbody;

    void Update() // 속도 체크
    {  
        float currentSpeed = playerRigidbody.velocity.magnitude;
        
        if (currentSpeed > speedThreshold) 
        {
            Debug.LogWarning("플레이어의 속도가 기준 값 보다 높습니다, 속도: " + currentSpeed, gameObject);
            // object message, object context
            // 속도가 기준 값 이상일 때 경고 메시지 출력
        }
    }
}

 

경고 메시지가 나오고 클릭하면 어떤 오브젝트인지 가리킵니다

 

 

 

Debug.LogError


오류 메시지를 출력할 때 사용하는 메서드입니다, 문제가 발생했을음 나타내고 코드에서 예외 상황이나 오류를 처리할 때 사용합니다, 콘솔의 Error Pause와 함께 사용하여 오류가 발생하였을때 게임을 일시정지 할수도 있습니다

public class test : MonoBehaviour
{
    public GameObject player;

    void Start()
    {
        if (player == null)
        {
            Debug.LogError("오류: 플레이어 오브젝트가 할당되지 않았습니다", gameObject);
            // object message, object context
            // 플레이어 오브젝트가 할당되지 않은 경우 오류 메시지 출력
        }
    }
}

오류 메시지가 나오고 클릭하면 어떤 오브젝트인지 가리킵니다

 

 

 

아래를 살펴보면 게임이 일시정지되고 Hierarchy에서 강조되며 확인해보니 Player가 할당되어있지 않음을 확인할 수 있었습니다

 

 

 

 

 

Debug.Assert


public class test : MonoBehaviour
{
    public int[] scores // 인스펙터에서 3으로 설정한다고 가정

    void Start()
    {
        Debug.Assert(scores.Length == 5, "scores 배열의 길이는 5여야 합니다", gameObject);
        // object message, object context
    }
}

 

오류 메시지가 나오고 클릭하면 어떤 오브젝트인지 가리킵니다

 

 

 

아래를 살펴보면 게임이 일시정지되고 Hierarchy에서 강조되며 확인해보니 인스펙터에서 길이가 3인 것을 확인할 수 있었습니다

 

 

 

Debug.DrawRay


씬 뷰에서 레이캐스트를 시각화하고자 할 때 사용됩니다, 게임이 실행되는 동안에만 작동하며, 씬 뷰에서만 확인 가능합니다

 

public class test : MonoBehaviour
{
    public Vector3 originRay;
    public Vector3 direction;
    public float distance;
    public float duration;
    public Color color;
    public bool depthTest = true;

    private void Start()
    {
        color = Color.red;
    }

    void Update()
    {
        Debug.DrawRay(originRay, direction.normalized * distance, color, duration, depthTest);
    }
}

 

originRay : 레이의 출발 지점입니다

direction : 레이가 뻗어 나가는 방향을 나타내는 벡터입니다

distance : 레이의 길이를 나타냅니다 

duration : 씬 뷰에 표시되는 지속 시간입니다 (초 단위, 0.1f = 0.1초)

color : 레이의 색상입니다

depthTest : 레이가 다른 오브젝트에 가려지는지 여부를 결정합니다 (기본값은 true)

 

 

 

위를 설정하고 난뒤의모습입니다

 

 

 

저렇게도 쓸 수 있지만 보통 간단하게 사용하기 때문에 모든 변수를 하나씩 지정하기보다는 필수적인 것만 설정합니다,

최소한 originRay, direction * distance, color가 필요합니다

 

public class test : MonoBehaviour
{
    void Update()
    {
        Debug.DrawRay(transform.position, transform.forward * 5f, Color.red);
    }
}​

 

 

 

 

 

마치며


아래는 유니티 공식 문서입니다, Debug에 대하여 설명하고있습니다

 

이상입니다

'코드 및 공부 > 기타' 카테고리의 다른 글

if문을 어떻게 쓰는지에 대한 생각  (0) 2024.12.17
게임 에셋 판매 사이트  (0) 2024.12.12
콘솔 창(Console)  (4) 2024.11.04
이벤트 함수의 실행 순서  (0) 2024.10.21
Unity - Scripting API를 참고하는 법  (1) 2024.10.14