UNITY : MOBILE GAME

Alpha, Orderly·2023년 7월 21일
0

UNITY

목록 보기
3/3

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 화 한다.
  • 충돌된 객체에서 인터페이스 타입으로 컴포넌트를 가져오면 일괄적으로 인터페이스의 메소드를 호출할수 있다.

오브젝트와 플레이어의 상대적인 위치

  • localPosition 끼리 빼면 된다.
profile
만능 컴덕후 겸 번지 팬

0개의 댓글