ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 02. dropper 로직
    newGame/Dropper

    안녕하세요.

     

    오늘은 dropper에 대해 가장 큰 틀인 드롭 하는 부분을 살펴 보겠습니다.

     

    1. 판넬을 터치 & 클릭 하면 점프를 뛴다.

    2. 낙하를 한다.

     

    의 추가적인 부분은, 애니메이션 재생과 더불어 속도선을 추가하여 속도감을 좀 더 주려고 했습니다.

     

    간단한 코드부터 바로 살펴 보겠습니다.

     


    player를 컨트롤 해주기 위해 "PlayerController"의 스크립트를 만들고

     

    _maxVelocity : max 중력 값.

    _isJumpBoxCollision : 점프박스에 닿아있는지 체크할 불 변수

     

    그리고 player의 Animator를 받아올 _playerAnimator를 선언해 주었습니다.

     


    여기서 코드리뷰를 받기 전 스크립트에는 public변수와 getcomponent 가 상당히 많았었는데요,

     

    이 public을 대체해 인스펙터창에 노출을 시켜 주며 private의 보안성 즉 다른 스크립트에서의 접근은 막는 대체 코드로

     

    "SerializeField"를 알게 되었습니다.

     

     

    우선 GetComponent를 보자면

     

    Start, Update와 같이 MonoBehaviour에서 호출되어지는 함수들의 경우 빈 함수를 아예 선언하지 말도록 하며,

     

    아무일도 하지 않음에도 cpu를 소모한다고 들었습니다.

     

    또한 GetComponent()보다는 GetComponent<t>() 나 GetComponent<typeof(t)>를 사용하도록 하는것이

     

    좋다고 들었습니다.

     

     

    비용과 오버헤드 발생 가능성이 있다고 들었는데,

     

    자세한건 메모리적으로 조금 더 알아 보아야겠습니다.

     


    두번째로

     

    "SerializeField"

     

     

    private 이지만 [SerializeField]이 붙으면 private 하더라도 유니티 엔진의 Inspector 창에서 슬롯이 열려 이를 수정 할 수 있다고 나와 있으며

     

    유니티 Inspactor 창에서 이제 보고 직접 값도 할당할 수 있지만 private 보호 수준은 유지 된다고 나와있습니다.

     

    이렇게 대체용 품으로 이 SerializeField를 사용 할 수 있고 public과 같은 성능? 비슷한 성능 이지만

     

    private로 선언 해 주어 다른 코드 상에서 접근을 못하게 하는 방법이 있다.. 라는 정도만 들었습니다.

     

     

    어떻게? 무엇 때문에 대체가 가능한지 조금 더 살펴 보았습니다.

     

    우선 SerializeField를 선언해 주면 직렬화를 시킬 수 있다고 합니다.

     

    직렬화는 '오브젝트'를 연속된 데이터로 바꾸는 것이라고 하는데요..

     

    직렬화는 데이터 구조나 오브젝트 상태를 Unity 에디터가 저장하고 나중에 재구성할 수 있는 포맷으로 자동으로 변환하는 프로세스를 말한다고 하며

     

    unity 에디터에서는 저장 및 로딩, 인스펙터 창, 인스턴스화, 프리팹과 같은 일부 내장 기능에 직렬화가 사용된다고 합니다.


    private의 장점과 인스펙터 창 에서 다루는 편리함을 둘 다 취하는 방식으로 SerializeField를 사용하는게 더 좋을것 같은데,

     

    유니티는 특별한 경우가 아니라면 public을 추천 한다고 합니다.

     

    https://docs.unity3d.com/kr/2018.1/Manual/script-Serialization.html

     

    스크립트 직렬화 - Unity 매뉴얼

    직렬화는 데이터 구조나 오브젝트 상태를 Unity 에디터가 저장하고 나중에 재구성할 수 있는 포맷으로 자동으로 변환하는 프로세스를 말합니다. Unity 에디터에서는 저장 및 로딩, 인스펙터 창, 인

    docs.unity3d.com

    알아야 하는 부분이 엄청 많은것 같습니다.

     


    다시 돌아와서..

     

    _isJumpBoxCollision : 점프박스에 닿아있는지 체크할 불 변수를 true로 바꿔주는 것은

     

    _clickImgJump 함수에서 실행 시켜 주었으며

     

    이 함수는 판넬을 터치할때 OnClickEvent에서 실행 됩니다.

     

    Update함수 입니다.

     

    우슨 플레이어의 리지드바디의 velocity의 y축 아래방향 (중력) 의 값이 _maxVelocity보다 낮거나 같다면

     

    _playerRigidbody의 velocity.y는 maxVelocity 값으로 제한을 두었습니다.

     

     

    또한 isJumpBoxCollision이 ture가 되었을시 실행되며 

     

    AddForce를 이용해 vector3.up 방향으로 ForceMode.Impulse를 이용해 역동적인 점프 연출을 주었습니다.

     

     

    그리고 switch 문으로 playerAnimationIndex를 랜덤값으로 받아

     

    Animator의 SetTrigger를 실행 시켜 주는 코드를 작성 하였습니다.

     

     

    (매 점프시 같은 동작이 연출되지 않고 3가지? 의 무작위 동작이 연출 됩니다.)

     

    속도선 같은 경우는 Particle을 이용해서 간단히 만들어 보았습니다.


    플레이어 아래에는 "SlowBox" trigger 를 설치해 두어 플레이어의 에니메이터의 상태값인 "JumpBool"을 true로 바꿔 주었으며 이후 drop 중인지 확인을 이 SlowBox를 지나면 상태를 체크해 줄 것 입니다.

     

    또한 _speedParticle이란 좀 전에 만든 파티클을 SetActive를 이용해 true로 바꿔 주어서 활성화 시켜 주었습니다.

     

    다음 글에선 플레이어가 충돌 시 일어나는 일과 더불어 ui를 살펴 보겠습니다.

     

    감사합니다.

     

    'newGame > Dropper' 카테고리의 다른 글

    06. dropper Player Move & 1Level  (0) 2022.11.16
    05. dropper NextStage Button  (0) 2022.11.04
    04. dropper ReTryAgain Button  (0) 2022.11.04
    03. dropper Ragdoll & ui  (0) 2022.11.04
    01. dropper 기획 (재)  (0) 2022.11.02

    댓글

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