상세 컨텐츠

본문 제목

[유니티 소소모임] 2주차. 유니티 에디터 배우기 1 (Editor: Hetbahn)

24-25/Untiy

by 롱롱😋 2024. 10. 11. 12:33

본문

728x90

 

 

 

게임 오브젝트 충돌 처리

충돌을 위한 필수 조건
  1. 두 오브젝트 모두 Collider2D 컴포넌트를 가지고 있어야 함
    Collider2D는 오브젝트의 충돌 범위를 정의. 충돌이 일어나려면 모든 오브젝트가 이 컴포넌트를 가지고 있어야 함
  2. 두 오브젝트 중 하나 이상은 Rigidbody2D 컴포넌트를 가져야 함
    Rigidbody2D는 Unity에서 물리 법칙을 적용하기 위한 컴포넌트. 오브젝트의 이동이나 충돌이 물리적으로 처리되려면 최소한 한 오브젝트가 이 컴포넌트를 포함해야 함

 

 

 

📍  기존 코드

using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private float moveSpeed = 5.0f; // 이동 속도

    private void Update()
    {
        float x = Input.GetAxisRaw("Horizontal"); //좌우 이동
        float y = Input.GetAxisRaw("Vertical"); //위아래 이동

        // 새로운 위치 = 현재 위치 + (방향 * 속도)
        transform.position += new Vector3(x, y, 0) * moveSpeed * Time.deltaTime;
    }
}
  • 위 코드는 기본적인 이동 처리를 담당
  • transform.position을 이용해 오브젝트의 위치를 매 프레임마다 업데이트하지만, 물리 엔진을 활용하지 않아 장애물과 충돌을 처리하지 못하고, 오브젝트가 장애물을 통과하는 문제를 발생시킴

 

 

 

컴포넌트 접근과 관리 방법

  • 오브젝트에 포함된 컴포넌트에 접근하려면 GetComponent<컴포넌트이름>()을 사용함
  • 예를 들어, Rigidbody2D에 접근하려면 GetComponent<Rigidbody2D>()를 호출해 현재 오브젝트의 Rigidbody2D 컴포넌트를 가져올 수 있음
권장 방법
  1. 컴포넌트와 동일한 타입의 변수를 먼저 선언함
  2. GetComponent<>()를 통해 해당 컴포넌트 정보를 가져와 변수를 초기화함
  3. 이렇게 저장된 변수를 통해 해당 컴포넌트의 정보에 접근하거나 변경할 수 있음

 

→ 이 방식은 컴포넌트 정보를 한 번만 가져와 클래스 내 어디서든 사용할 수 있고, 성능에도 유리함

 

 

 

Rigidbody2D 활용

  • Rigidbody2D는 오브젝트에 물리적인 힘을 적용하는 컴포넌트로, 이동 방향과 속도를 나타내는 속력(velocity)의 기본값이 (0,0)이기 때문에 움직이지 않음. 하지만 velocity 값을 설정하면 물리 법칙을 따르는 이동이 가능함
  • 기존의 transform.position += ... 방식 대신, Rigidbody2D의 velocity 변수를 설정해 충돌 시 자동으로 멈추거나 반응하는 물리적 처리가 가능함

 

 

 

📍  변경 코드 (Rigidbody2D 적용)

  • Rigidbody2D 컴포넌트를 활용하면 충돌 시 적절한 물리 처리를 할 수 있음
using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private float moveSpeed = 5.0f; // 이동 속도
    private Rigidbody2D rigid2D;

    private void Awake()
    {
        rigid2D = GetComponent<Rigidbody2D>();
    }

    private void Update()
    {
        float x = Input.GetAxisRaw("Horizontal"); //좌우 이동
        float y = Input.GetAxisRaw("Vertical"); //위아래 이동

        // 새로운 위치 = 현재 위치 + (방향 * 속도)
        //transform.position += new Vector3(x, y, 0) * moveSpeed * Time.deltaTime;

	// Rigidbody2D 컴포넌트에 있는 속력(velocity) 변수 설정
        rigid2D.velocity = new Vector3(x, y, 0) * moveSpeed;
    }
}
  • Awake() 함수에서 GetComponent<Rigidbody2D>()를 사용해 현재 오브젝트의 Rigidbody2D 컴포넌트를 가져옴
  • transform.position을 직접 변경하는 대신, rigid2D.velocity를 설정해 Rigidbody2D의 속력으로 이동을 처리함
  • Rigidbody2D를 사용하면 장애물과 충돌할 때 자동으로 멈추거나 물리 엔진에 따라 이동이 조정되며, 장애물을 통과하지 않게 됨

 

 

 

📍  동영상 예시

기존 : 이동은 잘되지만, 장애물과 충돌했을 때 어떻게 처리해야 하는지 내용이 없어, 오브젝트가 계속 장애물을 뚫고 지나가려는 것을 확인할 수 있음

 

변경 :장애물 앞에서 멈추고 더 이상 통과하려 하지 않음

[출처] 고박사 - 따라하면서 배우는 고박사의 유니티 기초

(섹션 2 유니티 2D 기초)

 

Corner Unity

ⓒ Hetbahn

728x90

관련글 더보기