ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2D.MetalSlug 03. Bullet Fire(Animation Event)
    연습 프로젝트/2D.Metal Slug

    안녕하세요.

    오랜만에 MestalSlug 모작 프로젝트를 업데이트하러 들어왔습니다.

     

    Player가 발사할 총알과 

     

    원하는 시간에 맞춰 발사를 구현 할 예정입니다.

     

    총알은 머신건으로 시각적 효과를 줄 것이며

     

    이미지를 무료로 다운로드하였습니다.

     

    바로 제작 과정을 보겠습니다!


    가장 먼저 이미지의 Typ과 Mode를 바꿔 주었습니다.

    Type은 2D에서 제작을 할 것이기에 Sprite(2D and UI)로 바꿔 주었으며

    Texture Type은  존재하지만 기본값인 default 나 

    텍스처가 2D 게임에서 Sprite로 사용할 경우 권장 등 많은 Type들이 있습니다.

     

    Sprite Mode는 Multiple로 여러 개의 Sprite를 갖게 해 주었습니다.

    Sprite Mode는 3가지 타입이 존재하며

    (single, Multiple, Polygon)

    single : 한 개의 수프 라이트

    Multiple : 여러 개의 스프라이트

    Polygon : 4 각형뿐만 아니라 원 삼각형 오각형 등의 모양을 지원

    (아직 Polygon은 안 써봤습니다.)

     

    이후 Sprite editor에 들어가서 Slice를 해주었습니다.

     

    스프라이트로 애니메이션을 만든 Bullet은 프리팹화를 시켜 놓았습니다.


     

     

    처음에는 Bullet의 애니메이션의 Event를 생성해 발사를 해 주려고 했었습니다. 

     

    하지만 이렇게 조건을 걸어 줬을 시 총을 앞으로 발사할 때는 괜찮지만

     

    위로 발사하거나 아래로 발사를 하게 되어도 Vector2.right의 방향으로 가게 되었고,

    다른 조건을 걸어 줄 필요가 있었습니다.

     

    그리 하여 Bullet은 무조건 생성이 되면 앞으로 가는 동작을 하게끔 만들었으며

    Event를 삭제해 주는 걸로 조건을 Event를 걸어주지 않았습니다.

     

    또 한 발사 모션인 앞, 위, 아래 방향은 각 애니메이션에서 Event를 추가해 담당해 주기로 했습니다.

    (추가 적으로 계속 테스트를 해본 결과 앞의 애니메이션 동작 부분은 필요가 없기에 두 가지 모션만 쓰기로 했습니다.)

     


    이후 플레이어의 상체에 새로운 스크립트를 생성해 입혀 주어 각 애니메이션에 Event를 걸어 주었습니다.

    선언 변수부터 보겠습니다.

    Bullet : 프리팹화 된 총알입니다.

    bulletPosition : 앞 발사 시 총알이 생성될 위치입니다.

    bulletPositionUp : 위 발사 시 총알이 생성될 위치입니다.

    bulletPositionDown : 아래 발사 시 총알이 생성될 위치입니다.

     

    각 애니메이션의 위치에 맞게 빈 오브젝트를 플레이어 상체에 자식으로 붙여 주어 

    플레이어를 따라가게 만들었습니다.


    각 검은색 원의 위치가 각 발사될 위치인데

    빈 오브젝트라 보이지 않기에, 시각화를 해 주려고 스크립트를 입혀 주어

    알아볼 수 있게 해 주었습니다.

    검은 원 (시각화)

    OnDrawGizmos입니다. 한번 생성을 해 두었더니 재활용으로 잘 사용하고 있습니다.


    계속해서 Attack_F 스크립트를 보겠습니다.

    OnFire() : 플레이어가 앞 발사 모션을 할 때 Event로 실행될 함수입니다.

     

    OnFireUp() : 플레이어가 위 발사 모션을 할 때 Event로 실행될 함수입니다.

     

    OnFireDown() : 플레이어가 아래 발사 모션을 할 때 Event로 실행될 함수입니다.

     

    OnKnife() : 플레이어가 칼 공격을 할 때 Event로 실행될 함수입니다.

     

    간단히 제어를 하기 위해 GameObject fire 변수를 선언하였으며

    fire 변수에 Instantiate(생성될 오브젝트, 위치)로 생성을 해 주었습니다.

     

    fire.transform.SetParent(null)로 해준 이유는,

     

    생성된 Bullet이 플레이어에게 계속 붙어 있을 경우, 총을 발사한 뒤 플레이어가 점프를 뛰면

    이미 나간 총알이 플레이어를 따라서 위치가 바뀌기에 SetParent로 bullet의 부모를 null로 바꿔주었습니다.

     

    또한 앞 발사 모션이 아닐 시에는 총알이 위로 향하거나 앞으로 이동되어야 합니다.

     

    이동의 방향을 제어하는 것이 아닌 총알의 회전 값을 바꿔 주어 총알의 이동하는 방향이 바뀌는 것처럼 해 주었습니다.

     

    fire.transform.rotation = Quaternion.Euler(0, 0, 90f)

    사용된 함수는 Quaternion.Euler이며, 오일러 각을 쿼터니언으로 변경시켜 주는 함수입니다.

     

    주의 까진 아니지만, Event를 해 줄 함수들은 앞에 public을 붙여 주어야 설정을 할 수 있습니다.

    (public을 깜빡하고 왜 안 뜨지? 하는 저 같은 실수는 하지 마시길...)

    마지막으로 각 애니메이션 동작에 맞게 이벤트를 걸어 주시면!

     

    원하는 동작에 Bullet이 생성이 됩니다.

     

    무한 생성되어 있는 상태면 안되니

    time값을 정해 주어 함수를 지연 후 실행시켜주는 Invoke 함수로 Destroy(gameObject)해주는 

    이 스크립트를 bullet에 넣어 주었습니다.

     

     

    00 : 17초

     

    현재 고민거리가 있는데.. 가장 큰 게 플레이어가 앞 발사 모션을 하면서 위 발사 모션을 할 시

    Bullet이 위, 아래 나뉘어 있는 것이 아닌 자연스럽게 총알이 올라가는 것을 구현하고 싶은 점입니다.

     

    모션을 더 추가해도 원하는 동작 연출이 안돼서.. 아직 영상들을 많이 찾아봐야겠습니다.

     

    또한 해야 할 점은 아직 많이 남았지만, 총알을 오브젝트 풀로 관리를 하는 방식, 적 구현과 맵 구현 등등 남은 듯합니다.

     

    감사합니다.

     

     

     

     

    '연습 프로젝트 > 2D.Metal Slug' 카테고리의 다른 글

    2D.MetalSlug 06. Manager  (0) 2022.05.07
    2D.MetalSlug 05. Map 02 / 02  (0) 2022.05.01
    2D.MetalSlug 04. Map 01 / 02  (0) 2022.04.27
    2D.MetalSlug 02. Player 이동 구현  (0) 2022.04.20
    2D.MetalSlug 01. Intro 영상  (0) 2022.04.11

    댓글

김효겸 / Tel. 010-7735-0580 / E-mail. dollzzang2@hanmail.net