Unity_Game #3

haechi·2021년 8월 24일
0

unity

목록 보기
35/39
post-thumbnail

210824
Unity_Game #3


  • 플레이어 무한 점프 수정

바닥에 닿은 경우에만 점프를 할 수 있도록 설정
isGrounded가 true라면 점프 가능 false는 불가

수정
-Movement2D.cs

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

public class Movement2D : MonoBehaviour
{
    [SerializeField]
    private float speed = 5.0f; // 속도   
    [SerializeField]
    private float jumpForce = 8.0f; // 점프 힘 (클수록 높이 점프한다)
    [SerializeField]
    private float gs = 1.5f;
    private Rigidbody2D rigid2D;

    [SerializeField]
    private LayerMask groundLayer;  // 바닥 체크를 위한 충돌 레이어
    private CapsuleCollider2D capsuleCollider2D; // 오브젝트의 충돌 범위 컴포넌트
    private bool isGrounded;    // 바닥에 닿아있을 때 true이다
    private Vector3 footPosition;   // 발의 위치


    private void Awake()
    {
        rigid2D = GetComponent<Rigidbody2D>();  // Rigidbody2D의 컴포넌트를 가진다.
        capsuleCollider2D = GetComponent<CapsuleCollider2D>();  // CapsuleCollider2D의 컴포넌트를 가진다.
    }
    private void FixedUpdate()
    {
        // 플레이어 오브젝트의 Collider2D min, center, max 위치 정보
        Bounds bounds = capsuleCollider2D.bounds;
        // 플레이어 발 위치 설정
        footPosition = new Vector2(bounds.center.x, bounds.min.y);
        // 발 위치에 원 생성, 원이 바닥과 닿아있으면 true
        isGrounded = Physics2D.OverlapCircle(footPosition, 0.1f, groundLayer);


        rigid2D.gravityScale = gs;    // 점프 높이 조절
    }

    public void Move(float x)   // 좌우 이동
    {
        // x 축 이동은  x * speed, y 축은 기존의 속력 값
        rigid2D.velocity = new Vector2(x * speed, rigid2D.velocity.y);
    }
    public void Jump()  // 점프
    {
        if(isGrounded == true)
        {
            // fumpForce의 크기만큼 위 방향으로 속력 설정
            rigid2D.velocity = Vector2.up * jumpForce;
        }
    }
}


Ground layer를 추가 후 ground 타일맵에 레이어 설정


player 오브젝트에서 Ground 레이어로 지정


바닥을 밟게되면 다시 점프를 할 수 있다.

참고
https://velog.io/@kimhaech/Unity2DBasic-6

profile
공부중인 것들 기록

0개의 댓글