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;
}
}
}
'산대특 > 게임 클라이언트 프로그래밍' 카테고리의 다른 글
[Bamsongi] 화면 클릭해서 밤송이 던지기 + 파티클 (0) | 2024.02.02 |
---|---|
Update와 Coroutine (0) | 2024.02.02 |
[CatEscape] CatEscape 만들기 (0) | 2024.01.29 |
[Shuriken Swipe] 수리검 이동 및 회전 + 도착 지점 계산하기 (0) | 2024.01.27 |
[Chapter4] Swipe Car 만들기 (0) | 2024.01.26 |