🧩 코딩/사용한 코드

Unity2D 모바일 조이스틱을 이용한 움직임 코드 🏃‍♀️ Transform.localScale을 이용한 이미지 회전

코스모스몰리 2022. 10. 20. 00:57
728x90

 

 

 

 

 

 


 

 

이 게시글은 다음을 참고하여 작성했습니다. 감사합니다.

 

https://makerejoicegames.tistory.com/107

https://wonsang98.tistory.com/163

https://www.youtube.com/watch?v=GGqwMGZiwCg 

 

 


 

 

 

 

 

우선 이 에셋을 다운로드 해주도록 합니다.

https://assetstore.unity.com/packages/tools/input-management/joystick-pack-107631

 

Joystick Pack | 입출력 관리 | Unity Asset Store

Get the Joystick Pack package from Fenerax Studios and speed up your game development process. Find this & other 입출력 관리 options on the Unity Asset Store.

assetstore.unity.com

 

 

 

 

 


 

 

 

 

 

 

조이스틱의 4가지 타입이 있는데 

에셋 안에 있는 씬으로 들어가서 원하는 타입을 찾으실수 있습니다.

 

 

 

그리고 다시 원래 씬으로 돌아와서

Hierachy에 Canvas를 추가해서 원하는 타입의 조이스틱 프리펩을 추가해줍니다.

 

 

 

 

 


 

 

스크립트 내용 👩

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Player : MonoBehaviour
{
    //조이스틱
    public FixedJoystick joy;

    //컴포넌트
    Animator anim;
    Rigidbody2D rigid;
    BoxCollider2D boxcollider;

    //걷는 스피드
    public int speed;


    //컴포넌트 불러오기
    void Awake()
    {
        rigid = GetComponent<Rigidbody2D>();
        anim = GetComponent<Animator>();
        boxcollider = GetComponent<BoxCollider2D>();
    }

    //Move
    void FixedUpdate()
    {
        float x = joy.Horizontal;
        float y = joy.Vertical;
        Vector3 vec = new Vector3(x,y,0);
        vec.Normalize();

        transform.position += vec * speed * Time.deltaTime;
        
        if(joy.Horizontal > 0)
        {
            anim.Play("Walk");
            transform.localScale = new Vector3(5,5,44f);
           
        }
        if(joy.Horizontal < 0)
        {
            anim.Play("Walk");
            transform.localScale = new Vector3(-5,5,44f);
        }
    }


}

 

큰 틀은 주석을 확인해주세요!

 


세부 코드 내용

 

void FixedUpdate()
    {
        float x = joy.Horizontal;
        float y = joy.Vertical;
        Vector3 vec = new Vector3(x,y,0);
        vec.Normalize();
        
        transform.position += vec * speed * Time.deltaTime;

 

X,Y를 horizontal,vertical로 정해주고,

new Vector3로 (x,y)정해줍니다.

여기서 저는 Z축을 사용하지 않았습니다.

 

Normalize로 정규화 해주지 않으면 아래의 이미지 처럼 1.414로 일정하지 않기 떄문에

그리고 Normalize로 대각선길이까지 1,1,1로 정규화 해줍니다.

 

 

 


 

 if(joy.Horizontal > 0)
        {
            anim.Play("Walk");
            transform.localScale = new Vector3(5,5,44f);
           
        }
        if(joy.Horizontal < 0)
        {
            anim.Play("Walk");
            transform.localScale = new Vector3(-5,5,44f);
        }
    }

 

위의 조건문으로 왼쪽 오른쪽으로 갈때에

anim.Play("애니메이션 이름"); 으로 애니메이션 재생을 시켜주고

transform.localScale = new Vector3(0,0,0);

로 스케일(크기) 조정해주면서 왼쪽 오른쪽으로 갈때 이미지가 회전되도록 합니다.

 

 


 

아래는 플레이 화면입니다.

https://www.youtube.com/shorts/XTzDDR01OmE

 

 

점프는 살짝 허술(?) 해보일 것 같아

로직을 다시 작성해야하나 싶었지만 나름 피하기 게임인데

점프요소는 다른 요소들 보다 중요도가 낮고 계속 플레이해보니 이것도 나쁘지 않아서

이대로 마무리를 하도록 했습니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90