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

public class CatController : MonoBehaviour
{
    private Rigidbody2D rBody2D;
    [SerializeField] private float jumpForce = 10f; //점프하는 힘 
    [SerializeField ]private float moveForce = 30f;  //이동하는 힘 

    private bool isJumping = true;

    void Start()
    {
        this.rBody2D = this.GetComponent<Rigidbody2D>();
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space) && !isJumping) // 지면에 닿아 있을 때만 점프 가능
        {
            //ForceMode2D.Force : 지속적으로 힘을 가할때 
            //ForceMode2D.Impulse : 충격을 줘서 힘을 가할때 
            this.rBody2D.AddForce(Vector2.up * this.jumpForce, ForceMode2D.Impulse); 
            isJumping = true; // 점프 상태인지 확인
        }

        //-1 0 1 (방향)
        int dirX = 0;

        if (Input.GetKey(KeyCode.LeftArrow))
            dirX = -1;

        if (Input.GetKey(KeyCode.RightArrow))
            dirX = 1;

        // 절대값 반환 -> 왼쪽으로 이동하면 속도=음수, 오른쪽으로 이동하면 속도=양수
        float speedX = Mathf.Abs(this.rBody2D.velocity.x); 

        if (speedX < 2f) // 속도가 2f 미만일때에만 방향에 따라 힘을 가함 
        {
            //this.rBody2D.AddForce(new Vector2(dirX, 0) * this.moveForce);  // World
            this.rBody2D.AddForce(this.transform.right * dirX * this.moveForce); // local
        }

        //방향에따라서 반전 
        if (dirX != 0)
        {
            this.transform.localScale = new Vector3(dirX, 1, 1);
        }

        // 왼쪽 끝과 오른쪽의 끝 이동 제한
        transform.position = new Vector3(Mathf.Clamp(transform.position.x, -2.5f, 2.5f), transform.position.y, transform.position.z);

    }


    private void OnCollisionEnter2D(Collision2D collision)
    {
    	// 바닥(tag='ground')과 캐릭터의 콜라이더를 통해 충돌을 검사해 점프 상태 반환
        if (collision.collider.CompareTag("ground"))
        {
            isJumping = false;
        }
    }
}

+ Recent posts