디버그
어제 만들어뒀던 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에 관한 것이다.
'유니티' 카테고리의 다른 글
유니티 코인 먹기 게임 만들기 - 2 캐릭터 움직이기 (0) | 2025.03.27 |
---|---|
유니티 코인 먹기 게임 만들기 - 1 맵 만들기 (0) | 2025.03.27 |
유니티 MonoBehaviour (0) | 2025.03.26 |
유니티 스크립트 (0) | 2025.03.25 |
유니티 UI 컴포넌트 (0) | 2025.03.25 |