📑
[Godot] CharacterBody3Dで回転方向を向かせるスクリプト
CharacterBody3Dはテンプレートスクリプトがついており、前後左右の移動がデフォルトでできますが、FPSコントローラーやrotation+movementのような視点の回転移動のスクリプトはありません。
FPSコントローラーのスクリプトの解説動画はたくさんありますが、rotation+movementのスクリプトは見当たらなかったので公開します。
Input.get_vectorではなくInput.get_axisを使います。それに合わせて変数も変更しました。
player.gd
extends CharacterBody3D
@export var speed = 8
@export var rotation_speed = 1.5
var rotation_direction = 0
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _physics_process(delta):
# Input.get_vectorではなくInput.get_axisを使います
# ***** 元のコード *****
#var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
#var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
#if direction:
#velocity.x = direction.x * SPEED
#velocity.z = direction.z * SPEED
#else:
#velocity.x = move_toward(velocity.x, 0, SPEED)
#velocity.z = move_toward(velocity.z, 0, SPEED)
# ***** 元のコード *****
# ***** 追加コード *****
rotation_direction = Input.get_axis("ui_right", "ui_left")
velocity.x = transform.basis.z.x * Input.get_axis("ui_up", "ui_down") * speed
velocity.z = transform.basis.z.z * Input.get_axis("ui_up", "ui_down") * speed
# ***** 追加コード *****
if not is_on_floor():
velocity.y -= gravity * delta * 2.0
if Input.is_action_just_pressed("ui_accept") and is_on_floor():
#print("on floor")
velocity.y = 6.0
rotation.y += rotation_direction * rotation_speed * delta
move_and_slide()
こちらを参照しました。
Discussion