Tips
- 2D 배경의 Z축을 조절해 크기 조절 및 원근감을 줄수 있다.
타일맵
생성하기
- Create > 2D Object > TileMap
- Scene에 그리드가 그려진다.
- Grid의 Child에는 Tilemap이 있다.
팔레트
- Window > 2D > Tile Palette 에서 팔레트를 생성할수 있다
스프라이트 추가하기
- 아래와 같이 땅을 구성하는 스프라이트가 있다.
- 본 스프라이트는 그리드를 구성하는 재료들을 하나에 모아놓은 것이다.
- 위를 선택한 뒤 Sprite Mode를 Single 에서 Multiple로 변경 -> Apply
- Sprite Editor를 열어준 뒤 적절한 간격으로 잘라준다.
- Slice를 이용한다.
- 끝나면 항상 Apply!
128*128 픽셀 그리드로 잘 잘라진 스프라이트의 예시
- 잘 잘려진 여러개의 스프라이트가 생성된다.
- 그 후 Sprite의 Pixels per unit을 단일 스프라이트의 크기로 설정한다.
- 본 경우는 128 * 128 이기에 128로 설정한다.
- 이후 타일 팔레트에 스프라이트를 드래그-드롭 한다.
- 팔레트의 일부 선택 후 그리드에 칠할수 있다.
하단은 2d extra가 필요합니다
Animated Tile
- Animated Tile 을 생성, 애니메이팅 될 갯수를 정하고 스프라이트를 넣는다.
- 팔레트 생성후 드래그-드롭
- 이후는 일반적인 팔레트와 유사하게 사용한다.
Prefab Brush
- Prefab Brush를 생성한다.
- 사용하기를 원하는 게임오브젝트를 만들고 프리팹을 생성한다.
- 생성된 Prefab Brush의 Prefab 항목에 해당 프리팹을 지정한다.
- 타일 팔레트의 하단을 통해 브러쉬를 선택 및 사용한다.
Tilemap Collider
- 타일맵에 충돌을 추가한다.
- Tilemap Collider 와 Composite Collider를 추가, Tilemap Collider의 Used by Composite을 선택시 자동으로 스프라이트의 표면만 Collide되게 할수 있다.
2D 캐릭터 조종
플레이어
- 빈 게임오브젝트를 만들고 플레이어 명명
- 스프라이트를 자식에 넣는다.
- 스프라이트 자체를 플레이어로 쓰는것은 좋지 못하다.
플레이어 움직이기
- 플레이어의 RigidBody의 velocity 값을 원하는 방향의 Vector3 으로 설정하면 된다.
플레이어가 공중에 있는지 확인 하는 방법
- 점프를 하려면 플레이어가 공중에 있는지 지상에 있는지를 확인할 필요가 있다.
- 레이캐스트를 사용한다.
RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector3.down, 1.0f, _groundLayer);
// 자신이 있는 위치를 기준으로 1.0f 길이만큼 아래로 레이저를 쏜다.
// 레이저를 쐈을때 닿는것은 _groundLayer 만
/*
[SerializeField]
private LayerMask _groundLayer;
를 포함하여 레이저가 닿을 레이어를 인스펙터에서 정하거나
저 위치에 1 << [레이어 번호] 를 넣어 지정할수 있다.
*/
if(hit.collider != null)
{
// 레이저가 땅에 닿을시 땅에 닿았다고 표시하기.
_isGrounded = true;
}
- 땅에 닿았는지를 메소드로 만들어 그때마다 확인할수도 있다.
void Movement()
{
float move = Input.GetAxisRaw("Horizontal");
_rigid.velocity = new Vector2(move, _rigid.velocity.y);
if (Input.GetKeyDown(KeyCode.Space) && IsGrounded())
{
_rigid.velocity = new Vector2(_rigid.velocity.x, _jumpForce);
}
}
bool IsGrounded()
{
RaycastHit2D hit = Physics2D.Raycast(transform.position, Vector2.down, 0.6f, 1 << 8);
if (hit.collider != null)
{
return true;
}
return false;
}
히트박스 만들기, 데미지 계산
방법
- 빈 히트박스 스프라이트를 생성, Collider를 만들고 플레이어의 스프라이트의 Children에 둔다.
- 히트박스는 플레이어와 다른 레이어에 위치하게 한다.
- 각각의 애니메이션에 대해 공격에 관여할 부분을 Collider로 지정, 애니메이션 키프레임을 녹화한다.
- 공격이 진행될 때에만 히트박스가 활성화 되도록 해야 한다.
- Project Settings > Physics 2D 에서 어떤 레이어와 어떤 레이어가 상호작용 하지 않게 할지 설정이 가능하다.
- 만들어진 Hitbox 에 Rigidbody 와 공격을 확인할 Script를 만든다.
Interface
- 데미지를 입는것과 관련된 모든 프로퍼티/메소드를 Interface 화 한다.
- 충돌된 객체에서 인터페이스 타입으로 컴포넌트를 가져오면 일괄적으로 인터페이스의 메소드를 호출할수 있다.
오브젝트와 플레이어의 상대적인 위치