게임 오브젝트 이동하기
실제 게임을 진행할 때는 유니티 에디터나 인스펙터 뷰와 같은 화면을 볼 수 없기 때문에 스크립트의 코드를 이용해 트랜스폼 컴퍼넌트의 포지션 정보를 수정해야 합니다.
유니티에서는 각각의 게임 오브젝트에 소속된 컴포넌트에 접근할 수 있고, 컴포넌트 내부 클래스의 변수 데이터를 사용하거나 수정하고, 사용자가 만든 함수를 호출할 수 있습니다.
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에서 직접 설정할 수 있습니다.
게임 오브젝트 물리와 충돌
오브젝트에 물리와 중력을 적용할 수 있는 Rigidbody 컴포넌트는 오브젝트의 질량, 마찰력(위치/회전), 중력 계수, 옵션 등을 설정할 수 있습니다. 중력 이외 다른 오브젝트와 상호작용이 필요한 설정은 Collider 컴포넌트로 충돌 범위를 적용해야 합니다.
서로 다른 두 오브젝트가 충돌하기 위한 조건
위의 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의 속력 변수를 설정해 오브젝트 이동을 처리하게 되면 물리 처리 기반 이동이 가능해집니다.
오브젝트 간 물리적인 충돌시 호출되는 이벤트 함수는 다음과 같습니다.
오브젝트 간 접촉시 호출되는 이벤트 함수는 다음과 같습니다.
게임 오브젝트 생성 함수
원본 오브젝트를 복제할 시 플레이 중 삭제된다면, 더이상 복제가 불가능합니다. 이에 따라 원본 오브젝트를 파일로 보관(프리팹)하고, 보관된 원본을 코드로 복제하여 안전하게 개발할 수 있습니다. Instantiate(복제할 오브젝트, 위치, 회전);를 통해 원본을 동일하게 복제할 수 있습니다.
게임 오브젝트 삭제 함수
Instantiate(); 함수와 반대로 Destroy(삭제할 오브젝트, 시간(초)(흐른 뒤 삭제)) 함수를 통해 매개 변수의 오브젝트 뜨는 컴포넌트를 삭제할 수 있습니다. 공격받은 적을 삭제하거나, 플레이어가 얻은 아이템을 삭제하는 등 게임에서 영구적으로 사라져야 할 때 사용합니다.
해당 포스트는 고박사, 따라하면서 배우는 고박사의 유니티 기초, (2020, 7월 6일), 섹션 2. 유니티 2D 기초 (Unity 2D Basic) (106:03) 강의를 참고하여 작성하였습니다.
Corner Unity
Editor : 동동
[유니티 소소모임] 2주차. 유니티 에디터 배우기 1 (Editor: Borybop) (1) | 2024.10.11 |
---|---|
[유니티 소소모임] 2주차. 유니티 에디터 배우기 1 (Editor: Luna) (0) | 2024.10.11 |
[유니티 소소모임] 2주차. 유니티 에디터 배우기 1 (Editor : Ijin) (1) | 2024.10.11 |
[유니티 소소모임] 2주차. 유니티 에디터 배우기 1 (Editor: 니나노) (0) | 2024.10.11 |
[유니티 소소모임] 1주차. 유니티 기초 (Editor: Luna) (4) | 2024.10.04 |