[Godot] CharacterBody2D Inertial Motion 캐릭터 관성 운동
Godot 2024. 2. 15. 12:35 |반응형
캐릭터에 이동에 관성을 적용해 보자.
1
2
3
4
5
6
7
8
9
10
11
|
// Get the input direction and handle the movement/deceleration.
// As good practice, you should replace UI actions with custom gameplay actions.
Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down");
if (direction != Vector2.Zero)
{
velocity.X = direction.X * Speed;
}
else
{
velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed);
}
|
CharacterBody2D를 상속한 스크립트의 _PhysicsProcess()에는 위와 같은 키 입력 처리 코드가 있다.
1
2
3
4
5
6
7
8
9
10
11
|
// Get the input direction and handle the movement/deceleration.
// As good practice, you should replace UI actions with custom gameplay actions.
Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down");
if (direction != Vector2.Zero)
{
velocity.X = direction.X * Speed;
}
else
{
velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed * (float)delta);
}
|
위와 같이 수정한다.
하지만 위 코드는 빠르게 방향을 바꾸는 경우엔 관성이 적용되지 않는다.
1
2
3
4
5
6
7
8
9
10
11
12
|
// Get the input direction and handle the movement/deceleration.
// As good practice, you should replace UI actions with custom gameplay actions.
Vector2 direction = Input.GetVector("ui_left", "ui_right", "ui_up", "ui_down");
if (direction != Vector2.Zero)
{
//velocity.X = direction.X * Speed;
velocity.X = Mathf.MoveToward(Velocity.X, direction.X * Speed, Speed * (float)delta);
}
else
{
velocity.X = Mathf.MoveToward(Velocity.X, 0, Speed * (float)delta);
}
|
위와 같이 수정한다.
좀 더 빠른(느린) 방향 전환이 필요하다면 MoveToward()의 Speed * (float)delta에 적당한 수치를 곱한다.
※ 참고
반응형
'Godot' 카테고리의 다른 글
[Godot] Sprite2D Simple Animation 스프라이트 간단한 애니메이션 (0) | 2024.02.17 |
---|---|
[Godot] AnimationPlayer 애니메이션 플레이어 (0) | 2024.02.16 |
[Godot] 2D Splash Dynamic Wave 자연스러운 물결 파동 3. 응용 (0) | 2024.02.11 |
[Godot] Show Collision Shapes at Debug Runtime (0) | 2024.02.10 |
[Godot] Crashes/Freezes When Opening Project Settings (1) | 2023.12.03 |