ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 01 깃허브 - Player Move
    팀업 프로젝트/-Git Hub (임시)

    안녕하세요!

    하던 교육 과정도 끝 마쳤고

    (싱숭생숭...)

     

    프로그래머스 문제를 풀면서 알고리즘 공부를 하고 있습니다.

     

    병행하여 프로젝트도 따로 준비를 해보려고 했는데,

     

    마침 지인 분이랑 마음이 맞아

     

    깃허브를 이용해 프로젝트를 제작하고

     

    구글 플레이의 출시를 목표로 잡고

    (작은 게임이지만 도전..!)

     

    SDK 연동과 더불어 광고를 추가를 해보려고 합니다.

     

     

     

    00분 25초

    결과가 더 궁금하신 분들을 위해!

     

    영상부터 첨부를 하겠습니다.

     

     

    간단한 플레이어의 이동 동작이며

     

    터치 백그라운드와 터치 패드를 이용해 플레이어의 이동 구현을 구현했습니다.

     

     

    그럼.. 코드 내용부터 함께 보겠습니다!

    PlayerMovement입니다.

     

    선언된 변수로는 플레이어의 이동 속도인 moveSpeed와 

     

    리지드 바디와 애니메이터를 받아올 변수들입니다.

     

    moveSpeed = 현재 4로 지정되어 있지만,

     

    public으로 선언해 주었기에 인스펙터 창에서 조정한 값으로 정해지며

     

    인스펙터 창에서 보며 조정을 해줄 예정입니다.

     

     

    현재는 플레이어 밖에 없기에 

     

    따로 테스트는 아직 못했습니다

     

    이후 리지드 바디와 애니메이터의 컴포넌트를 받아와 주는 모습입니다.

     

    Horizontal의 h / Vertical의 v의 약자를 삼아 변수를 선언했으며

     

    stickPos의 x와 y를 대입시켜 주었습니다.

     

    stickPos는 조이스틱 패드의 좌표를 전달받습니다.

     

    플레이어의 이동은 Rigidbody의 velocity로 구현해 주었습니다.

     

    새로운 백터 dir을 생성해 주어 x와 z에 

     

    받아온 좌표값 h, v * moveSpeed를 곱해 주고

     

    velocity를 dir의 방향으로 속력을 주었습니다.

     

    y축은 구현하지 않을 예정입니다.

     

    또한 h와 v가 &&연산자로 둘 다 0이 아닌 게 참이라면

     

    방향을 Quaternion.LookRotation으로 회전을 시켜주는 모습입니다.

     

    TouchPad 스크립트입니다.

     

    dragRadius : 조이스틱 패드가 가운데 기준점으로부터 움직일 최대 반지름입니다.

     

    buttonPressed : 버튼이 눌렸는지 안 눌렸는지 체크할 불 변수입니다.

    버튼이 눌리지 않았다면 조이스틱 패드는 시작점으로 되돌아가게 하기 위함입니다.

     

    player : PlayerMovement스크립트를 받아올 player 변수입니다.

     

    touchPad : 터치 패드의 위치를 받아오기 위해 선언해 주었습니다.

     

    orizinPos = 시작 지점 값을 저장할 변수입니다.

     

    우선 물리에 관련해서 일정한 주기를 담고 있는 FixedUpdate에서 

     

    HandleInput 함수에 마우스의 위치 값을 인자로 전달해 주었습니다.

     

     

    위 OnEnable 함수는 터치패드의 RectTransform을 받아 오며

     

    orizinPos의 시작 위치를 지정해 주었습니다.

     

    여기서 시작 시 최초 1회 실행하는 Start함수가 아닌

     

    매 활성화 시 실행되는 OnEnable 함수에 적어준 이유는

     

    TouchPad가 초기 상태엔 비활성화되어 있다가

     

    설정한 위치 패널 및 특정 이벤트가 작동하면

     

    그 위치에 터치패드를 활성화시켜주기 위함입니다.

     

    (아직 구현은 안(못...)됐지만, 무조건 해낼 것입니다)

     

    버튼의 OnClickEvent에서 호출될 함수들입니다.

     

    public으로 선언해 주어 호출될 수 있게 해 주었으며

     

    버튼이 눌렸는지 안 눌렸는지 판단할 불 변수의 true / false를 맡고 있습니다.

     

    또한 HandleInput 함수에 orizinPos(시작 위치) 값을 인자로 전달해 줍니다.

     

    HandleInput 함수입니다.

     

    우선 if(조건문)으로 버튼이 눌렸는지 체크를 해 줍니다.

     

    버튼이 눌렸으면 dir에 input - orizinPos를 해 주어

     

    orizinPos에서 input으로 향하는 거리 벡터 

     

    즉, 얼마나 떨어져 있는지를 정해 주었으며

     

     

    dir의 방향이 현재 최대치보다 크다면

     

    dir은 Nomalize() 함수로 방향 백터로 변환시켜 주었습니다.

     

    또한 터치패드의 위치를 최대치만큼 이동시켜 주는 코드입니다.

     

     

    반대로 dir의 거리가 최대 거리보다 크지 않다면

     

    터치 패드의 위치는 input(마우스 포지션)으로 이동시켜 주었습니다.

     

    마지막으로

     

    버튼이 눌리지 않았다면,

     

    터치패드의 위치는 orizinPos(시작 위치)로 이동을 시켜 주었습니다.

    이후 diff에 방향키와 기준 지점의 차이를 구해

     

    거리를 나누어 방향만 구한 값을 

     

    player(PlayerMovement) 스크립트의 OnStickChanged의 인자로 변경된 좌표를 전달해 주었습니다.

     

     

    터치 패드가 눌렸는지 안 눌렸는지 체크는 EventTrigger에서 해 주었습니다.

     

    Pointer Down과 Pointer Up 버튼이 눌렸을 때 / 떼어졌을 때입니다.

     

    카메라 스크립트인 FollowCamera입니다.

     

    단순히 카메라를 담고 있는 GameObject의 위치를 player의 위치로 옮겨 주는 코드입니다.

     

    다만 LateUpdate를 사용한 이유는

     

    같은 Update 문을 사용할 때 호출 순서가 정해져 있는 것이 아니기에

     

    순서가 맞지 않으면 떨리는 현상이 생길 수 있으며 (Update에서 하면 생깁니다)

     

    카메라 로직은 LateUpdate에서 해 주어야 한다고 배웠습니다.

     


    현재 프로젝트는 계속 진행중인데

     

    뭔가 이렇다 할 결과물이 아직 없어서 오늘은 여기서 마쳐야 될것 같습니다.

     

    감사합니다.

     

     

    (아참 영상은 맨 위에 있습니다.)

     

    댓글

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