유니티

유니티 - 로그 / 충돌

당혜성 2025. 3. 26. 22:30

디버그

어제 만들어뒀던 Awake Start 등등 만든 곳에 디버그를 해보자. 그럼 옆에 UnityEngine.Debug가 나올 것이다.

Debug.Log()로 안에 글을 써보자. printf문과 똑같다. " " 안에 넣도록 하자

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    //한 번만 호출
    void Awake()
    {
        Debug.Log("로그");
    }
    //한 번만 호출
    void Start()
    {

    }

    //여러번 호출
    void Update()
    {

    }

    //물리에 관한 계산
    void FixedUpdate()
    {

    }

    //프레임이 끝날때 계속 호출
    void LateUpdate()
    {

    }

    //활성화 될 때 마다 호출
     void OnEnable()
    {

    }

    //비활성화 될 때 호출
     void OnDisable()
    {

    }

    //지울때마다 호출
     void OnDestroy()
    {

    }

    //게임을 끝날때 호출
     void OnApplicationQuit()
    {

    }
}

저장하고 유니티로 가보도록 하자.

 

유니티를 저장하고 GameManager를 누르고 옆에 스크립트에 추가된 것을 확인하고, game 화면으로 가서 실행을 하면 밑에 Console에 로그가 찍혀있다.

잘 찍혀있다면 정상적으로 작동된 것이다.

 

특수한 로그를 찍어보자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    //한 번만 호출
    void Awake()
    {
        Debug.Log("로그");
        Debug.LogWarning("경고");
        Debug.LogError("에러");
    }
    //한 번만 호출
    void Start()
    {

    }

    
}

 

편의를 위해 나머지는 다 지웠다. 저장 후 다시 유니티로 가보자.

 

재생을 시켜두면 스크립트가 디버그를 안 하기 때문에 재생을 풀고 다시 재생을 시키면 로그, 경고, 에러가 나온다.

오른쪽 상단에 하얀 동그라미, 노란 세모, 빨간 팔각형이 다 나오는지 확인하자.

로그: 일반적

경고: 심각하진 않지만 알아야 되는 거

에러: 심각함

 

print로도 Debug.Log의 역할을 할 수 있다. print는 MonoBehaviour에서 받아온다.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    //한 번만 호출
    void Awake()
    {
        Debug.Log("로그");
        print("로그");
    }
    //한 번만 호출
    void Start()
    {

    }

    
}

이렇게 만들어서 저장 후,  다시 유니티에 가보자

 

그러면 Debug:Log랑 MonoBehaviour 둘 다 나오는 걸 볼 수 있다.

print를 대신해서 사용해도 되지만, MonoBehaviour가 없으면 사용이 불가능하다.

 

이번에 이벤트 함수를 print에 다 넣어보자

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    //한 번만 호출
    void Awake()
    {
        print("Awake");
    }
    //한 번만 호출
    void Start()
    {
        print("Start");
    }

    //여러번 호출
    void Update()
    {
        print("Update");
    }

    //물리에 관한 계산
    void FixedUpdate()
    {
        print("FixedUpdate");
    }

    //프레임이 끝날때 계속 호출
    void LateUpdate()
    {
        print("LateUpdate");
    }

    //활성화 될 때 마다 호출
    void OnEnable()
    {
        print("OnEnable");
    }

    //비활성화 될 때 호출
    void OnDisable()
    {
        print("OnDisable");
    }

    //지울때마다 호출
    void OnDestroy()
    {
        print("OnDestroy");
    }

    //게임을 끝날때 호출
    void OnApplicationQuit()
    {
        print("OnApplicationQuit");
    }
}

 

저장 후 유니티로 가보자. 그러면 콘솔에서 자꾸 뭐가 나올 텐데 

스타트부터 뜰 텐데, 나는 바로 못 멈춰서 좀 스킵이 됐다. 순서대로 나오는 것만 확인하자.

확인을 못했어도 순서대로 나오는데, FixedUpdate, Update, LateUpdate 가 불규칙적으로 나올 것이다.

 

OnEnable과 OnDisable만 남겨두고 print를 다 지우자.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    //한 번만 호출
    void Awake()
    {
      
    }
    //한 번만 호출
    void Start()
    {
      
    }

    //여러번 호출
    void Update()
    {
       
    }

    //물리에 관한 계산
    void FixedUpdate()
    {
    
    }

    //프레임이 끝날때 계속 호출
    void LateUpdate()
    {
      
    }

    //활성화 될 때 마다 호출
    void OnEnable()
    {
        print("OnEnable");
    }

    //비활성화 될 때 호출
    void OnDisable()
    {
        print("OnDisable");
    }

    //지울때마다 호출
    void OnDestroy()
    {
      
    }

    //게임을 끝날때 호출
    void OnApplicationQuit()
    {
       
    }
}

저장 후 유니티로 들어가서 게임을 시작했다 멈췄다 하면 OnEnable과 OnDisable이 나올 것이다.

재생하는 상태에서 GameManager 컴포넌트를 껐다 켰다 하면 나온다. 한번 확인해 보자.

 

다음은 OnMouseDown을 해볼 것이다. 

마우스 상호작용

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    private void OnMouseDown()
    {
        print("OnMouseDown");
    }
}

저장 후, 유니티에 가서 컴포넌트를 만들어주자.

 

Box Collider 컴포넌트 생성 -> Mesh Renderer 생성 후 Materials 가서 Default-material 클릭 -> Mesh Filter 선택 후 cube 선택

다 만들고 나서 재생해 보자. 재생 후에 박스를 누르면 콘솔창에 OnMouseDown이 콘솔에 나온다.

 

 

다음은 충돌체다.

충돌체

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    //충돌체가 들어왔다
    private void OnCollisionEnter(Collision collision)
    {
        print("OnCollisionEnter");
    }
    //충돌체가 충돌 중이다
    private void OnCollisionStay(Collision collision)
    {
        print("OnCollisionStay");
    }
    //충돌체가 나갔다
    private void OnCollisionExit(Collision collision)
    {
        print("OnCollisionStay");
    }
}

주석에도 있듯이

OnCollisionEnter: 충돌체가 들어왔다.

OnCollisionStay: 충돌체가 충돌 중이다.

OnCollisionExit: 충돌체가 나갔다.

 

저장 후 유니티에 와서 충돌할 물체를 만들어 주자.

Hierarchy 우클릭 -> Sphere 생성 후 큐브 옆에 두자. 충돌을 하려면 물리가 있어야 하는데 GameMasager에 Rigidbody를 추가해 주고, Use Gravity를 끄자.

그리고 박스를 열심히 충돌해 주자. 그러면 콘솔에 로그가 나온다.

직접 움직여야 한다.

 

그리고 Trigger 친구들을 넣어주자.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    //충돌체가 들어왔다
    private void OnCollisionEnter(Collision collision)
    {
        print("OnCollisionEnter");
    }
    //충돌체가 충돌 중이다
    private void OnCollisionStay(Collision collision)
    {
        print("OnCollisionStay");
    }
    //충돌체가 나갔다
    private void OnCollisionExit(Collision collision)
    {
        print("OnCollisionStay");
    }

    private void OnTriggerEnter(Collider other)
    {
        print("OnTriggerEnter");
    }

    private void OnTriggerStay(Collider other)
    {
        print("OnTriggerStay");
    }
    private void OnTriggerExit(Collider other)
    {
        print("OnTriggerExit");
    }
}

트리거를 하려면 하나에 반드시 트리거야 한다. GameManager에 Is Trigger를 체크해 주자. Rigidbody도 필수다.

 

 

실행하고 충돌시키면 OnTriggerEnter -> OnTrigger Stay -> OnTrigger Eixt 순서대로 나온다. 확인해 보도록 하자.

 

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class GameManager : MonoBehaviour
{
    private void OnTriggerEnter2D(Collider2D collision)
    {
        
    }

    private void OnCollisionEnter2D(Collision2D collision)
    {
        
    }


}

이렇게 2d가 붙어있으면 2d에 관한 것이다.