User Tools

Site Tools


events:getting_started_with_godot_in_3d

This is an old revision of the document!


Notes for everyone

  • Create 3D spatial node, called World
  • Add child node, create KinematicBody, called Player
  • Add child node to player, type Collision Shape, type capsule
  • Make vertical. Transform x by 90 degrees.
  • Click capsule shape dropdown, Set radius to 0.75, height to 1.25.
  • To player, add child node, type spatial, name it head
  • Add child node to head, type camera, move it to around 0.9 on the Y axis
  • Add a child to the player node, add meshinstance with shapre capsule
  • Size the capsule to the collision mesh - click on capusulemesh then 0.75 radius, height 1.25 and transform rotate 90 on x
  • Add new child now to World, MeshInstance, CubeMesh
  • drag below player, then scale to a floor size (20×20 or whatever)
  • Click, Mesh, create convex static body
  • Save Player as Scene
  • Enter Player scene
  • edit input map (Project → Project Settings → Input Map)
  • add move_forward, move_backward, move_left, move_right and jump
  • assign keys (WASD, space)
  • Right Click player, attach script, default, template empty
extends KinematicBody
 
export var speed = 10
export var acceleration = 5
export var gravity = 0.98
export var jump_power = 30
 
onready var head = $Head
onready var camera = $Head/Camera
 
var velocity = Vector3()
 
func _physics_process(delta):
 
	var head_basis = head.get_global_transform().basis
 
	var direction = Vector3()
	if Input.is_action_pressed("move_forward"):
		direction -= head_basis.z
	elif Input.is_action_pressed("move_backward"):
		direction += head_basis.z
 
	if Input.is_action_pressed("move_left"):
		direction -= head_basis.x
	elif Input.is_action_pressed("move_right"):
		direction += head_basis.x
 
	direction = direction.normalized()
	velocity = velocity.linear_interpolate(direction * speed, acceleration * delta)
 
	velocity = move_and_slide(velocity)
  • Test the above code out, now lets add some camera/head controls
extends KinematicBody
 
export var speed = 10
export var acceleration = 5
export var gravity = 0.98
export var jump_power = 30
export var mouse_sensitivity = 0.3
 
onready var head = $Head
onready var camera = $Head/Camera
 
var velocity = Vector3()
var camera_x_rotation = 0
 
func _input(event):
	if event is InputEventMouseMotion:
		head.rotate_y(deg2rad(-event.relative.x * mouse_sensitivity))
		var x_delta = event.relative.y * mouse_sensitivity
		if camera_x_rotation + x_delta > -90 and camera_x_rotation + x_delta < 90:
			camera.rotate_x(deg2rad(-x_delta))
			camera_x_rotation += x_delta
 
func _physics_process(delta):
 
	var head_basis = head.get_global_transform().basis
 
	var direction = Vector3()
	if Input.is_action_pressed("move_forward"):
		direction -= head_basis.z
	elif Input.is_action_pressed("move_backward"):
		direction += head_basis.z
 
	if Input.is_action_pressed("move_left"):
		direction -= head_basis.x
	elif Input.is_action_pressed("move_right"):
		direction += head_basis.x
 
	direction = direction.normalized()
	velocity = velocity.linear_interpolate(direction * speed, acceleration * delta)
 
	velocity = move_and_slide(velocity)

Notes for me

  • Axis, blue is Z (left to right generally), green is Y (up and down), X is red, back and forward (depth)
  • Explain viewports:
    • move mode:
      • middle mouse - change position
      • shift middle, move around in 3d space
      • right mouse - change angle
    • rotate mode:
      • middle rotate around object
    • mouse wheel zoom
    • F to focus on object, O to focus on origin
    • right mouse, WASD
events/getting_started_with_godot_in_3d.1585590837.txt.gz · Last modified: 2020/03/30 18:53 by admin