상세 컨텐츠

본문 제목

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

24-25/Untiy

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

본문

728x90

 

유니티 2D 기초

게임 오브젝트 이동하기

실제 게임을 진행할 때는 유니티 에디터나 인스펙터 뷰와 같은 화면을 볼 수 없기 때문에 스크립트의 코드를 이용해 트랜스폼 컴퍼넌트의 포지션 정보를 수정해야 합니다.

유니티에서는 각각의 게임 오브젝트에 소속된 컴포넌트에 접근할 수 있고, 컴포넌트 내부 클래스의 변수 데이터를 사용하거나 수정하고, 사용자가 만든 함수를 호출할 수 있습니다.

using UnityEngine;

public class Movement2D : MonoBehaviour
{
    private void Awake()
    {
        transform.position = transform.position + new Vector3(1,0, 0)*1;
        // transform.position += Vector3.right * 1;
    }
}

transform은 내가 소속되어 있는 게임 오브젝트의 Transform 컴포넌트를 의미하며, transform.position은 게임 오브젝트의 위치를 의미합니다. 위 코드는 현재 위치 + 방향 * 속도 = 새로운 위치로, 이동이 가능해집니다. 

 

방향키를 눌렀을 때 이동하도록 수정된 코드입니다.

public class Movement2D : MonoBehaviour
{
    private float moveSpeed = 5.0f;
    private Vector3 moveDirection = Vector3.zero;

    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");

        moveDirection = new Vector3(x, y, 0);
        transform.position += moveDirection * moveSpeed * Time.deltaTime;
    }
}

Input.GetAxisRaw()는 키보드, 마우스, 터치, 센서 등의 입력 관련 기능을 제공하는 유니티 클래스입니다. 가로축의 경우 왼쪽 방향키와 a를 입력할 시 -1이, 우측 방향키와 d를 입력할 시 +1이 됩니다. 이러한 기본 설정 값은 Edit > Project Settings > Input Manager에서 직접 설정할 수 있습니다.

Edit > Project Settings > Input Manager > Axes > Horizontal

 

게임 오브젝트 물리와 충돌

오브젝트에 물리와 중력을 적용할 수 있는 Rigidbody 컴포넌트는 오브젝트의 질량, 마찰력(위치/회전), 중력 계수, 옵션 등을 설정할 수 있습니다. 중력 이외 다른 오브젝트와 상호작용이 필요한 설정은 Collider 컴포넌트로 충돌 범위를 적용해야 합니다.

더보기

서로 다른 두 오브젝트가 충돌하기 위한 조건

  1. 두 오브젝트 모두 충돌 범위 Collider 컴포넌트를 가지고 있어야 함
  2. 둘 중 하나 이상의 오브젝트가 물리 처리를 담당하는 Rigidbody 컴포넌트를 가지고 있어야 함

위의 Rigidbody와 Collider 컴포넌트를 플레이어 오브젝트와 장애물 오브젝트에 각각 추가 후 실행하면, 기존 이동 코드로는 플레이어 오브젝트의 움직임이 어색한 것을 확인할 수 있습니다.

public class Movement2D : MonoBehaviour
{
    private float moveSpeed = 5.0f;
    private Rigidbody2D rigid2D;

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

    void Update()
    {
        float x = Input.GetAxisRaw("Horizontal");
        float y = Input.GetAxisRaw("Vertical");

        rigid2D.velocity = new Vector3(x, y, 0) * moveSpeed;
    }
}

오브젝트의 컴포넌트는 GetComponent<컴포넌트 이름>();으로 접근할 수 있습니다. Rigidbody2D의 속력 변수를 설정해 오브젝트 이동을 처리하게 되면 물리 처리 기반 이동이 가능해집니다.

 

오브젝트 간 물리적인 충돌시 호출되는 이벤트 함수는 다음과 같습니다.

더보기
  • onCllisionEnter2D(): 충돌 순간 1회 호출
  • onCllisionStay2D(): 충돌 후 닿아있는 프레임마다 호출
  • onCllisionExit2D(): 충돌 종료 1회 호출

 

오브젝트 간 접촉시 호출되는 이벤트 함수는 다음과 같습니다.

더보기
  • onTriggerEnter2D(): 충돌 순간 1회 호출
  • onTriggerStay2D(): 충돌 후 닿아있는 프레임마다 호출
  • onTriggerExit2D(): 충돌 종료 1회 호출

 

게임 오브젝트 생성 함수

원본 오브젝트를 복제할 시 플레이 중 삭제된다면, 더이상 복제가 불가능합니다. 이에 따라 원본 오브젝트를 파일로 보관(프리팹)하고, 보관된 원본을 코드로 복제하여 안전하게 개발할 수 있습니다. Instantiate(복제할 오브젝트, 위치, 회전);를 통해 원본을 동일하게 복제할 수 있습니다.

 

게임 오브젝트 삭제 함수

Instantiate(); 함수와 반대로 Destroy(삭제할 오브젝트, 시간(초)(흐른 뒤 삭제)) 함수를 통해 매개 변수의 오브젝트 뜨는 컴포넌트를 삭제할 수 있습니다. 공격받은 적을 삭제하거나, 플레이어가 얻은 아이템을 삭제하는 등 게임에서 영구적으로 사라져야 할 때 사용합니다. 


해당 포스트는 고박사, 따라하면서 배우는 고박사의 유니티 기초, (2020, 7월 6일), 섹션 2. 유니티 2D 기초 (Unity 2D Basic) (106:03) 강의를 참고하여 작성하였습니다.

 

 

 

Corner Unity

Editor : 동동

728x90

관련글 더보기