ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2D.MetalSlug 06. Manager
    연습 프로젝트/2D.Metal Slug

    안녕하세요

    며칠 안됐지만 엄청 오랜만에 찾아오는 듯한 기분이 드는...

     

    현재 c#공부에.. 코딩 테스트 준비에.. 새로운 프로젝트에.. 

     

    이것저것 정신이 없어서 업로드가 늦었는데요 ㅜㅜ

     

    https://userkhk.tistory.com/53

     

    생존형 게임 00 -제작중- (추가8)★★★★★

    안녕하세요. 이번 생존형 게임 카테고리에서는 장르는 정했지만 아직 기획적인 요소가 남아 있어 현재 제작 중인 프로젝트입니다. 현재 제작 중인 단계로 얼추 간추려지면 제작 과정과 함께 업

    userkhk.tistory.com

    ↑↑↑↑↑↑

    (새로운 프로젝트 결과물들 영상 입니다.)

    현재는 부분 동작 완성 영상만 추가적으로 업로드를 하고 있는데요.

     

    어느 정도 간추려지면 초기 과정부터 영상과 코드 설명을 업로드할 예정입니다.

     


    MetalSlug도 빨리 제작을 해야 하는데...!!

     

    우선 지난 시간에 Stage 1이라고 하긴 그렇지만

     

    카메라와 플레이어의 이동 제한을 두어서

     

    특정 조건에 성립하게 되면 다음으로 이동되게끔 구현을 했습니다.

     

     

    현재 진행할 부분은 이 플레이어의 이동 제한 구역을 Stage 1로 설정하고 

     

    각 이벤트들을 구현하여 다음 Stage로 넘어가게 할 예정입니다.

     


     

    우선 플레이어의 등장 씬부터 보시겠습니다.

     

     

    Sprite를 받아와 빨간 선 왼쪽의 부분을 사용했습니다.

    (오른쪽 부분은 물속에 있을 시인 것 같습니다)

     

    이 이미지를 사용하기 위해 당연히?

     

    Sprite Mode는 Multiple로 바꿔 주었습니다.

    Sprite Mode에는 Single, Multiple, Plygon의 세 가지 모드가 존재하는데

    직관적인 모드이지만 한번 살펴보자면

     

    Single : 하나의 슬라이드 Sprite를 갖게 합니다.

    Multiple : 여러 개의 슬라이드 Sprite를 갖게 합니다.

    Plygon : 다양한 모양의 슬라이드 Sprite를 갖게 합니다.

     

    현재 플레이어는 상체와 하체로 나뉘어 있습니다.

     

    이를 쉽게 정리하기 위해 빈 오브젝트인 Player에 담아 두었었는데요.

     

     

    현재 가져온 이미지는 상체와 하체가 붙어 있기에, 이어서 하지 않고

     

    다른 애니메이션을 추가하여 SetActive로 활성화/비활성화를 하게 구현했습니다.

     

    등장 씬의 애니메이션에 Event를 추가하여 코드를 동작하게 해 두었으며,

     

    이어서 바로 이벤트로 추가된 함수가 담긴 PlayerApearance 스크립트를 보겠습니다.

     

    PlayerApearance스크립트입니다.

     

    PlayerContrioller를 받아오기 위한 playerController의 변수를 선언했으며,

     

    Start 함수에서 transform(현재)의 parent(부모)로 접근하여 PlayerController를 받아왔습니다.

     

     

    애니메이션에 이벤트로 추가된 PlayerController_ 함수는 

     

    gameObject(자기 자신 오브젝트)를 비활성화해 주며

     

    playerController(PlayerController)에 있는 PlayerAparanceEnd함수를 실행시켜 줍니다.

    PlayerController의 PlayerAparanceEnd함수입니다.

     

    간단히 GetChild(0)과 (1)을 이용하여 자식 인덱스 0번과 1번을 가져와 활성화시켜주는 모습입니다.

     


    하지만 그냥 이대로 구현한다면, 원하는 동작 구현은 가능 하지만

     

    플레이어가 등장 애니메이션 일 시 움직이는 문제가 발생하는데요

     

    물론 이러한 구현을 원하는 분들도 계시겠지만, 제가 원하는 그림은

     

    등장 씬 애니메이션이 끝난 후 움직임을 원하였습니다.

     


    간단히 플레이어의 상체와 하체가 활성화 일 시 이동을 구현해도 되지만,

     

    플레이어의 전체적인 상태 값을 설정하기 위해 Manager 스크립트에 플레이어의 상태 값을 추가해 주었습니다.

     

    Manager의 전체 스크립트입니다.

     

    PlayerState의 enum(열거형)을 구현하여 Apearace와 Player상태 2가지를 구현했습니다.

     

    PlayerState를 제어하기 위해 playerState 변수를 선언했는데요.

     

     

    여기서 한 가지 알게 돼서 달라진 점이 public변수로 선언하지 않은 것입니다.

     

     

    흔히 쉽게 접근하기 위해 public으로 선언을 했었는데

     

    이는 객체지향의 언어에 맞지 않는다고 하더군요..

     

     

    항상 책을 보면 이 언어는 객체지향 언어이다. 이 언어는 절차 지향 언어이다. 이런 만든 많이 들어 봤지만

     

    실로 그에 맞는 특징들을 정확히 제가 알고 있지 못했습니다.

     

    그래서 한번 검색을 통해 찾아봤는데요.

     

    객체지향의 언어의 특징은 크게 캡슐화 / 추상화 / 상속 성 / 다형성 이 있다고 합니다.

     

    캡슐화에서 가장 중요한 개념인 "정보은닉"이라고 있는데,

    다른 객체에게 자신의 정보를 숨기고 자신의 연산만을 통하여 접근을 허용하는 것이라고 합니다.

     


     public PlayerState playerState_을 통하여 Get/Set프로퍼티를 이용해 접근을 하게 해 주었으며

     

    public static Manager instance_ 로 Manager로 접근하는 Get/Set프로퍼티는 static을 붙여 주었습니다.

     

    (클래스에 접근하기 위해서는 static을 붙여야 된다고 합니다.)

     

    이후 플레이어의 초기 상태 값은

     

    playerState = PlayerState.Apearance; 로 Apearance 상태를 Start함수에서 실행시켜 주었습니다.

     

     


    이후 PlayerController에서 

     

    Update함수에 있는 플레이어 이동 & 점프 관련 부분은

     

    새로운 함수(PlayerStatePlay)를 만들어 관리를 해 주었고

     

    그에 맞는 상태 값을 switch문으로

    PlayerState에 맞는 상태 값에 맞게 동작 실행 되게 해 주었습니다.

     


    마지막으로 등장 씬 플레이어의 애니메이션이 끝난 후 

     

    플레이어 상체/하체 가 활성화되는 시점에서

    Manager의 접근을 하여 PlayerState를 player로 변경을 해 주었습니다.

     

    (이는 Manager스크립트에 있는 set 부분이 실행됩니다)

     

     

    00 : 12초

    get, set 프로퍼티는 c++이나 c#을 책으로 공부할 때 사용해 봤었는데

     

    유니티를 사용하면서는 처음 사용해 보는 것 같습니다.

     

    다양한 접근법과 사용법을 많이 알고 익히고 싶은데,

     

    아직은 기초도 부족하니....

     

    멀고도 먼 길인 것 같지만 포기하지 않고 끝까지 달려가 봐야 할 것 같습니다.


    오늘도 

     

    감사합니다.

     

    좋은 일들 가득하세요

     

     

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

    2D.MetalSlug 08. NPC  (0) 2022.06.13
    2D.MetalSlug 07. UI  (0) 2022.05.14
    2D.MetalSlug 05. Map 02 / 02  (0) 2022.05.01
    2D.MetalSlug 04. Map 01 / 02  (0) 2022.04.27
    2D.MetalSlug 03. Bullet Fire(Animation Event)  (0) 2022.04.25

    댓글

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