본문 바로가기

내 공부/Unity_

유니티 2D 플레이어 좌우로 이동하기

반응형

 

화살표 피하기 만들거임

 

1. 게임화면 내 핸드폰 기종에 맞추기 (1440*3200)

가로모드로 게임할거니까 (3200*1440) 으로 설정

2. 플레이어 배치하기 

position (0,- 3.6, 0)

 

 

3. 백그라운드 배치

position (0,0,0)

scale(4.5, 2 1)

- 플레이어가 백그라운드에 가려서 보이지않는다.

 

 

 

4. 플레이어의 인스펙터에서 " Order in Layer"를 1로 변경해주면 

플레이어 등-장

 

 

 

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

public class PlayerController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    // Update is called once per frame
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            transform.Translate(-3, 0, 0);
        }
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            transform.Translate(3, 0, 0);
        }
      
    }
}

 

5. 플레이어 왼/ 오른쪽 입력시 좌 우로 -3, 3 씩 이동하는 스크립트 작성

- 문제점 :  이동범위가 너무큼 , 화면 밖으로 나가버림, 자연스러운 움직임 구현 X

 

 

 

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

public class PlayerController : MonoBehaviour
{
    // Start is called before the first frame update
    void Start()
    {
        
    }

    int speed = 3;
    void Update()
    {
        float playerMove = Input.GetAxis("Horizontal") * speed * Time.deltaTime;
        if (Input.GetKeyDown(KeyCode.LeftArrow))
        {
            playerMove = speed * Time.deltaTime;
        }
        if (Input.GetKeyDown(KeyCode.RightArrow))
        {
            playerMove = -speed * Time.deltaTime;
        }
        
         this.transform.Translate(new Vector3(playerMove,0,0));
       


    }
}

6. 

GetAxis 함수는 서서히 증가한다(?)

- Input.GetAxis() 는 축(Axis)을 기준으로 -1~ 1 까지의 값을 반환한다.

수평을 기준으로 

-1 = 왼쪽 

0 = 중간

1 = 오른쪽 

서서히 증가한다는 특성때문에 잠깐누르면 0.5만큼 움직이고 오래 누르면 속도가 증가한다.

( 사실뭔말인지 모르겠으나 대충 이해한척 넘어가기)

 

 playermove라는 변수는 Horizontal 방향으로 스피드(3)만큼 서서히 증가한다.

왼쪽, 오른쪽 화살표를 눌렀을 경우 스피드를 곱한 값만큼 이동한다.

translate() 함수는 vector3  형식을 매개변수로 받는다. (x,y,z) 값 만큼 이동하는 함수

 

 

= 결과물

같은 방식으로 하늘에서 화살표가 떨어지게 만들어봐야겠다.

반응형