what I'm trying to achieve is to have planet always underneath my feet
how to do that? I’m new to Godot.
nor rotating doesn’t work nor the moving as it’s moving x and z axis instead relative to how it’s rotated at:
what I wish to know is how to know relative up / right / forward
in unity it’s transform.up / transform.right / transform.forward but here I can’t find it.
extends CharacterBody3D
@onready var camera3D = $visuals/mixamo_base/Camera3D
@onready var animation_player = $visuals/mixamo_base/AnimationPlayer
@onready var planet = $"../Node3D/Node3D2"
const SPEED = 5.0
const JUMP_VELOCITY = 4.5
# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = ProjectSettings.get_setting("physics/3d/default_gravity")
func _physics_process(delta):
look_at_from_position(position, planet.position, Vector3(planet.position - position).normalized())
# Add the gravity.
#if not is_on_floor():
#velocity.y -= gravity * delta
# Handle jump.
#if Input.is_action_just_pressed("ui_accept") and is_on_floor():
#velocity.y = JUMP_VELOCITY
var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
# need different forward relative not static
var direction = (transform.basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
velocity = direction * SPEED
if animation_player.current_animation != "walking":
animation_player.play("walking")
else:
if animation_player.current_animation != "idle":
animation_player.play("idle")
velocity.x = move_toward(velocity.x, 0, SPEED)
velocity.y = move_toward(velocity.y, 0, SPEED)
velocity.z = move_toward(velocity.z, 0, SPEED)
move_and_slide()
func _input(event):
if event is InputEventMouseMotion:
rotate_y(deg_to_rad(-event.relative.x))# wrong as it's only static axis
#rotate() I need relative y axis not up as sometimes user is up side down
camera3D.rotate_x(deg_to_rad(event.relative.y))
extends CharacterBody3D
@onready var body = $body
@onready var camera = $body/Node3D/Camera3D
@onready var characterBody = $"."
const SPEED = 5.0
const JUMP_VELOCITY = 4.5
const sensitivity = 0.01;
# Get the gravity from the project settings to be synced with RigidBody nodes.
var gravity = 0.98
var gravityDirection;
func _unhandled_input(event):
if event is InputEventMouseMotion:
body.rotate_y(-event.relative.x * sensitivity)
camera.rotate_x(-event.relative.y * sensitivity)
func _physics_process(delta):
gravityDirection = GameManager.planetPosition - position
rotation = (Quaternion(-transform.basis.y, gravityDirection) * transform.basis.get_rotation_quaternion()).normalized().get_euler()
# Add the gravity.
if not characterBody.is_on_floor():
characterBody.velocity += gravityDirection * gravity * delta
print(gravityDirection)
# Handle jump.
if Input.is_action_just_pressed("ui_accept") and characterBody.is_on_floor():
characterBody.velocity = gravityDirection * JUMP_VELOCITY
# Get the input direction and handle the movement/deceleration.
# As good practice, you should replace UI actions with custom gameplay actions.
var input_dir = Input.get_vector("ui_left", "ui_right", "ui_up", "ui_down")
var direction = (body.global_basis * Vector3(input_dir.x, 0, input_dir.y)).normalized()
if direction:
characterBody.velocity = direction * SPEED
else:
characterBody.velocity.x = move_toward(characterBody.velocity.x, 0, SPEED)
characterBody.velocity.z = move_toward(characterBody.velocity.z, 0, SPEED)
characterBody.velocity.y = move_toward(characterBody.velocity.y, 0, SPEED)
characterBody.move_and_slide()
I’m sorry but I couldn’t find the options that were on the video I’m just too noobish in GoDot for now, …