Unity 2일차 학습

규수·2026년 3월 17일

개발 공부 일지

목록 보기
14/44

오늘은 프레임에 따른 로직 실행의 차이와 유니티 물리 시스템의 두 축인 Collision, Trigger의 차이점에 대해 정리해 보겠습니다.

1) Update()와 FixedUpdate()

유니티에는 매 프레임 실행되는 함수가 여러 종류 있습니다. 그중 가장 자주 쓰이는 두 함수와 그 차이는 다음과 같습니다.

  1. Update()
  • 개념: 화면이 한 번 그려질 때(렌더링)마다 한 번씩 호출됩니다.
  • 특징: 컴퓨터의 성능이나 상황에 따라 프레임률이 변하면 실행 주기도 불규칙해집니다.
  • 사용 시기: 키보드나 마우스 입력 감지, 타이머 계산 등 일반적인 로직 처리에 사용합니다.
  1. FixedUpdate()
  • 개념: 프레임과 상관없이 설정된 고정 시간 간격마다 호출됩니다. (= 기본 0.02초 --> 50fps 기준)
  • 특징: 물리 엔진의 계산 주기와 일치하며 성능에 상관없이 일정한 횟수로 실행됩니다.
  • 사용 시기: 리지드바디(Rigidbody)를 이용한 힘의 적용, 속도 변화 등 모든 물리 관련 연산에 사용합니다.
<style>
using UnityEngine;

public class FrameTest : MonoBehaviour
{
    void Update()
    {
        // 매 프레임 입력을 확인해야 하므로 Update에서 처리
        if (Input.GetButtonDown("Jump"))
        {
            Debug.Log("점프 입력 감지");
        }
    }

    void FixedUpdate()
    {
        // 물리적인 힘을 가하는 로직은 FixedUpdate에서 안전하게 처리
        // 물리 연산은 일정한 주기로 계산되어야 물리 버그가 생기지 않음
    }
}
</style>

2) Collision vs Trigger

  1. Collision (OnCollisionEnter)
  • 정의: 물체끼리 부딪혀서 실제로 막히는 물리적 충돌을 의미합니다.
  • 특징: 물리적 반응(튀어오름, 마찰 등)이 일어나며 리지드바디의 영향을 직접 받습니다.
  • 사용 예시: 벽, 장애물, 닫힌 문, 맵의 경계선처럼 플레이어가 통과하면 안 되는 대상에 사용합니다.
  1. Trigger (OnTriggerEnter)
  • 정의: 물체가 서로 겹쳤다는 사실을 감지하는 비물리적 감지 방식입니다.
  • 특징: 물리적으로 밀려나지 않고 그대로 통과하며, 특정 영역에 진입했는지 여부만 판단합니다.
  • 사용 예시: 아이템 획득 범위, NPC 대화 가능 범위, 포탈 진입 범위, 퀘스트 판정 범위 등 막기보다 감지가 목적인 상황에 사용합니다.

3) OnTrigger의 동작 시점

트리거 이벤트는 Is Trigger가 체크된 오브젝트와 다른 오브젝트의 콜라이더가 겹칠 때 발생하며, 상황에 따라 세 가지 함수를 사용합니다.

  1. OnTriggerEnter2D
  • 개념: 두 오브젝트가 처음 겹치는 순간, 단 한 프레임만 실행됩니다.
  • 사용 예시: 플레이어가 아이템을 먹었을 때 아이템이 사라지게 하거나, 포탈에 닿자마자 맵을 이동시키는 로직에 적합합니다.
  1. OnTriggerStay2D
  • 개념: 두 오브젝트가 겹쳐 있는 동안 매 프레임 지속적으로 실행됩니다.
  • 사용 예시: 장판 공격이나 독 지대처럼 구역 안에 머무는 동안 지속적으로 데미지를 입혀야 하는 로직에 사용합니다.
  1. OnTriggerExit2D
  • 개념: 겹쳐 있던 오브젝트가 서로 완전히 떨어져 나가는 순간, 단 한 프레임 실행됩니다.
  • 사용 예시: 상점 NPC 근처를 벗어날 때 상점 UI를 자동으로 닫거나, 특정 구역을 나갈 때 경고 메시지를 띄우는 로직에 활용합니다.
<style>
using UnityEngine;

public class TriggerDetector : MonoBehaviour
{
    // 1. 진입 순간 (아이템 획득 등)
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.CompareTag("Item"))
        {
            Debug.Log("아이템을 획득했습니다!");
            Destroy(collision.gameObject);
        }
    }

    // 2. 체류 중 (지속 데미지 등)
    private void OnTriggerStay2D(Collider2D collision)
    {
        if (collision.CompareTag("Lava"))
        {
            Debug.Log("용암 지대에서 지속적인 피해를 입고 있습니다.");
        }
    }

    // 3. 이탈 순간 (상점 영역 등)
    private void OnTriggerExit2D(Collider2D collision)
    {
        if (collision.CompareTag("NPC_Zone"))
        {
            Debug.Log("상점 영역을 벗어났습니다. UI를 닫습니다.");
        }
    }
}
</style>

오늘은 유니티의 LifeCycle중 Update에서 주로 사용되는 Update,FixedUpdate의 차이와 Trigger에 대한 내용을 배워보았습니다.
Trigger에 대해서는 게임에서 정말 자주 보이는 예시인만큼 직접 구현해보았을 때의 이해도 잘 되었고 앞으로 게임 기획에 있어 어떻게 활용해야할지 이해할 수 있었습니다.

0개의 댓글