저번 포스트에 이어서 이번에는 Player의 점프를 구현해 보도록 하겠다.
1. 플레이어에 Character Controller 컴포넌트를 추가한다.
2. 점프 코드
public class Player : MonoBehaviour
{
public float jumpPower = 10;
public float gravity = -9.81f;
float yVelocity;
void Update()
{
// y속도는 중력을 계속 받아야 함.
yVelocity += gravity * Time.deltaTime;
// 만약 점프키를 누르면 y속도를 jumpPower로 함
if (Input.GetButtonDown("Jump"))
{
yVelocity += jumpPower;
}
dir = Camera.main.transform.TransformDirection(dir); // 카메라가 바라보는 쪽으로 이동
dir.y = 0;
dir.Normalize();
Vector3 velocity = dir * speed;
// 이동방향의 y속성에 y속도를 대입
velocity.y = yVelocity;
}
}
jumpPower는 점프의 힘 gravity는 중력 / 1초에 -9.81만큼 y의 값을 감소시킬 예정 / yVelocity는 실제로 적용될 y의 속력이다.
public class Player : MonoBehaviour
{
public float speed = 5;
public float jumpPower = 10;
public float gravity = -9.81f;
float yVelocity;
void Update()
{
// y속도는 중력을 계속 받아야 함.
yVelocity += gravity * Time.deltaTime;
// 만약 점프키를 누르면 y속도를 jumpPower로 함
if (Input.GetButtonDown("Jump"))
{
yVelocity += jumpPower;
}
// 사용자의 입력에 따라
float h = Input.GetAxis("Horizontal");
float v = Input.GetAxis("Vertical");
// 앞뒤좌우 방향을 만들고
Vector3 dir = new Vector3(h, 0, v);
// 방향(dir)을 카메라를 기준으로 변경
dir = Camera.main.transform.TransformDirection(dir);
dir.y = 0;
dir.Normalize();
Vector3 velocity = dir * speed;
// 이동방향의 y속성에 y속도를 대입
velocity.y = yVelocity;
// 그 방향으로 이동
transform.position += dir * speed * Time.deltaTime;
}
}
플레이어 스크립트에 넣어주고 제대로 되는지 플레이를 해보자.
점프는 제대로 되지만 플레이어가 땅을 뚫고 떨어진다. 이유는 yVelocity에 gravicty의 값을 계속 더해서 (-9.81) transform.position 으로 아래로 계속 움직이기 때문이다. 이때 Charater Controller에 Collider가 있는데 왜 아래로 떨어지냐고 할 수 있는데, transform.position 은 물리법칙을 무시하고 이동하기 때문이다.
transform.position += dir * speed * Time.deltaTime;
cc.Move(dir * speed * Time.deltaTime);
이동하는 코드를 transform.position에서 cc.Move로 수정한다. 이후 실행해보면 떨어지지 않는 걸 확인할 수 있다.
'Unity > Small Project 따라하기' 카테고리의 다른 글
5-2. Enemy Path Finding_2 NavMesh Agent를 이용해서 target 따라다니기 (0) | 2022.03.27 |
---|---|
5-1. Enemy Path Finding_1 길 만들기 (0) | 2022.03.27 |
4. 총알 발사 (0) | 2022.03.26 |
3. Player Jump 2 (0) | 2022.03.26 |
1. Player 이동 및 카메라 회전 (0) | 2022.03.26 |