プログラミング

Github
https://github.com/morino5555/GodotExample/tree/main/3d-player-2

アセット
https://kaylousberg.itch.io/kaykit-adventurers

参考
https://www.youtube.com/watch?v=JlgZtOFMdfc

■AnimationTree3Dで躓いた箇所

Treeを設定して矢印でつないだ時に右側の「Condition」に何も入れないとエラーになる
参考動画では何もしていないので未入力だと以下エラー

https://zenn.dev/lettucefry/articles/aec3af281b83b5

もしかすると必須になったのかもしれない。

それと、参考動画のキャラローテーションはrotation.yだがglobal_rotation.yにしないとキャラが回り続ける。動画のコメント参照

_skin.global_rotation.y = lerp_angle(_skin.rotation.y, target_angle, rotation_speed * delta)
↓
_skin.global_rotation.y = lerp_angle(_skin.global_rotation.y, target_angle, rotation_speed * delta)

プログラミング

Github:https://github.com/morino5555/GodotExample/tree/main/3d-player

Assets:https://kaylousberg.itch.io/kay-kit-mini-game-variety-pack

FPS視点キャラクター

キーボードのみ、キーボードとマウスの2種類

TPS視点キャラクター

SpringArm3Dを使用して左クリックでズームイン、右クリックでズームアウト

チュートリアル(2D)


Remaking Tetris In Godot: The Setup

メモ

extends CharacterBody3D
@export var speed = 14.0
@export var rotation_speed = 4.0
var cam_spring_arm # Reference to your SpringArm node
func _ready():
    cam_spring_arm = get_node("SpringArm3D") # Or however you access it
    Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) # Optional: Capture mouse for FPS-like controls
func _physics_process(delta):
    # Movement
    var input_vector = Input.get_vector("move_left", "move_right", "move_backward", "move_forward")
    var velocity = Vector3.ZERO
    if input_vector != Vector2.ZERO:
        velocity = (transform.basis * Vector3(input_vector.x, 0, input_vector.y)).normalized() * speed
    
    #Rotation
    var aim_vector = Input.get_vector("aim_left", "aim_right", "aim_down", "aim_up")
    if aim_vector != Vector2.ZERO:
         rotation.y -= aim_vector.x * rotation_speed * delta
         cam_spring_arm.rotation.x -= aim_vector.y * rotation_speed * delta
         cam_spring_arm.rotation.x = clamp(cam_spring_arm.rotation.x, deg_to_rad(-75), deg_to_rad(75))
    velocity.y -= 9.81 * delta # Gravity
    # Apply movement
    move_and_slide()
func _input(event):
    if event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.is_pressed():
        Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
    elif event is InputEventKey and event.keycode == KEY_ESCAPE and event.is_pressed():
        Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)