유니티 2D 플레이어 이동(좌우 물리이동, 마찰력 적용)

JHO·2022년 9월 8일
1

유니티 2D

목록 보기
3/8

1. 좌우 이동


  • 3D와 거의 같은 방식.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class PlayerMove : MonoBehaviour
{
    public float maxSpeed;
    Rigidbody2D rigid;
    void Awake()
    {
        rigid = GetComponent<Rigidbody2D>();   
    }
    void FixedUpdate()
    {
        float h = Input.GetAxisRaw("Horizontal");
        rigid.AddForce(Vector2.right * h, ForceMode2D.Impulse);
        if(rigid.velocity.x > maxSpeed) // right max speed
        {
            rigid.velocity = new Vector2(maxSpeed, rigid.velocity.y);
        }
        else if (rigid.velocity.x < maxSpeed*(-1))// left max speed
        {
            rigid.velocity = new Vector2(maxSpeed*(-1), rigid.velocity.y);
        }
    }
}
  • 이동시킬 오브젝트에 rigidbody2d를 미리 추가.
  • 미리 Rigidbody 클래스의 rigid라는 변수를 선언한뒤 Awake()에다가 이 스크립트가 포함된 객체의 Rigidbody를 갖고옴.
  • Horizontal 버튼을 사용하여 물리이동함수인 AddForce()함수를 이용해 좌우 이동.
  • 이동 속도를 적절히 하기위해 public으로 maxSpeed라는 변수를 선언하여 속도제한을 설정함.
  • velocity는 속도를 의미.
  • 또한, 물리이동을 하면서 움직이는 object가 넘어지는 현상을 막기위해 Freeze Rotation의 z를 체크해줌.
    (Freeze Rotation을 false한 상태)
    (Freeze Rotation을 true해준 상태)

2. 마찰력 적용


2-1. Physics Material 2D

  • Create - 2D - Physics Material 2D를 생성.
  • Friction 은 마찰력, Bounciness 는 탄성력을 의미.
  • 값이 작을수록 힘의 크기가 작음.
    (바닥 전부를 Friction 0을 준상태, 얼음판처럼 미끄러지고 있는 상태)

2-2. Linear Drag

  • Rigidbody2D 에 있는 기능으로 공기 저항의 수치를 정해줌.
  • Angular Drag는 회전관련 저항 수치.
  • 수치가 클수록 공기 저항이 쎔.
  • 상하좌우 모두 공기저항 적용이 됨.
    (Linear Drag 가 0인 상태)
    (Linear Drag 가 5인 상태)
  • 5를 줬을때 내려오는 속도가 더 느린 모습을 볼 수 있음.

2-3. 움직일때 속도와 별개로 멈출때 속도 정해주기.

void Update()
    {
        //stop speed
        if (Input.GetButtonUp("Horizontal"))
        {
            rigid.velocity = new Vector2(rigid.velocity.normalized.x * 0.5f, rigid.velocity.y);
        }  
    }
  • 좌우방향키를 땟을때,
  • 보통 지속적인키입력은 FixedUpdate()에서 하는게 맞지만, 대부분 단발적인 키입력은 Update()함수에서 하는 것이 양호. update()는 매 프레임마다, FixedUpdate()는 고정프레임마다 호출하므로 FixedUpdate()에 하면 씹힐 수도 있음.
  • normalized는 (단위벡터)벡터크기를 1로 만들어주는 함수로 주로, 방향구할때 사용한다.
  • 키를 땔 때의 속도는 0.5f 로 지정한 상태.
    (방향 키를 땔 때, 속도가 확줄어드는 모습)

<참고>
골드 메탈님 강의 영상:https://www.youtube.com/watch?v=Z4iULRbiSTg&list=PLO-mt5Iu5TeYI4dbYwWP8JqZMC9iuUIW2&index=17
사용한 텍스처 소스 : http://u3d.as/2mvJ (by골드메탈님)

profile
개발노트

0개의 댓글