이제 이동도 만들었으니 캐릭터 점프를 만들 차례다.
그런데 addForce로 하면 쉽게 만들 수 있을줄 알았는데...
문제가 발생했다.
addForce로 Vector2.up 방향으로 힘을 줘도 점프를 하지 않는다..
이유는 내가 velocity로 매 프레임마다 속도를 직접 조절하기 때문이다.
velocity와 addForce의 차이를 잘 이해하지 못했는데...
velocity는 rigidbody의 velocity 값에 직접 접근해서 속도를 조절하고
addForce는 원하는 방향대로 직접 속도값을 계산해서 rigidbody의 속도값을 조절해주는 메서드라고 이해했다.
나는 이동을 구현할때 매 프레임마다 velocity를 조절하기 때문에
addForce를 해도 묻히는 것 같았다.
아마 내가 점프를 구현하기 위해선 addForce가 아니라 점프 시간동안 velocity에 Vector2.up을 더해줘야 한다고 생각했다.
private void jump()
{
if (isJump == true)
{
t += Time.deltaTime;
if (t < GoalTime) //GoalTime=1
{
rigid.velocity = new Vector2(0, 0.1f * jumpForce);
}
else
{
t = 0;
isJump = false;
}
}
}
1초동안 Vector2.up방향으로 velocity를 조절해서 1초동안 위로 이동하는 모습을 볼 수 있다.
하지만 지금은 일정하게 velocity 값을 주기때문에 점프라기 보단 공중부양처럼 보인다.
그래서 좀 고민하다 animation curve를 사용하게 되었다.
public AnimationCurve jumpAnimation;
public float GoalTime;
float t;
bool isJump;
private void jump()
{
if (isJump == true)
{
t += Time.deltaTime;
if (t < GoalTime)
{
rigid.velocity = new Vector2(0, 0.1f*jumpAnimation.Evaluate(t) *jumpForce);
}
else
{
t = 0;
isJump = false;
}
}
}
원래는 매 프레임마다 일정하게 velocity에 Vector2(0,0.1*jumpForce) 값을 주었는데
이젠 애니메이션 커브에서 매개변수 t에 관한 값을 곱해준다..
처음과 다르게 좀 느낌있게 움직인다.
애니메이션 커브를 어떻게 주는지에 따라 다양한 점프 연출이 가능하다.
유니티 공식문서에선 최대한 velocity를 건들지 말라하는데
이유를 좀 알것같다
velocity를 직접 조절하면 계산을 할게 많아진다..
하지만 그런만큼 addForce와는 다르게 더 섬세하게 조정할 수 있는 것 같다.
'odyssey' 카테고리의 다른 글
#5 odyssey 개발일지 : 베지어 곡선으로 곡선 지형 생성 (0) | 2023.03.17 |
---|---|
#4 odyssey 개발일지 : 상태 패턴으로 리팩토링 하기 (0) | 2023.03.13 |
#2 odyssey 개발일지: 지형 외각선 만들기 (0) | 2022.11.08 |
#1 odyssey 개발일지 : 지형 생성, 캐릭터 움직임 구현 (0) | 2022.11.07 |
#0 odyssey 개발일지 : 개요 (0) | 2022.11.07 |