📑

[Godot] CharacterBody3Dで回転方向を向かせるスクリプト

2024/01/25に公開

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