User Tools

Site Tools


events:getting_started_with_godot_in_3d

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
events:getting_started_with_godot_in_3d [2020/03/30 18:28]
admin
events:getting_started_with_godot_in_3d [2020/03/31 18:04] (current)
admin
Line 1: Line 1:
 +====== Getting Started with Godot in 3D ======
 ==== Notes for everyone ===== ==== Notes for everyone =====
   * Create 3D spatial node, called World   * Create 3D spatial node, called World
Line 12: Line 12:
   * Add new child now to World, MeshInstance,​ CubeMesh   * Add new child now to World, MeshInstance,​ CubeMesh
   * drag below player, then scale to a floor size (20x20 or whatever)   * drag below player, then scale to a floor size (20x20 or whatever)
-  * Click, Mesh, create ​convex ​static body+  * Click, Mesh, create ​Trimesh ​static body
   * Save Player as Scene   * 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 
 +<code python>​ 
 +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) 
 + 
 +</​code>​ 
 +  * Test the above code out, now lets add some camera/head controls 
 +<code python>​ 
 +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) 
 + 
 +</​code>​ 
 +  * Add gravity. ​ Oops. 
 +<code python>​ 
 +velocity.y += gravity 
 +</​code>​ 
 +  * Add jumping 
 +<code python>​ 
 +if Input.is_action_just_pressed("​jump"​):​ 
 + velocity.y += jump_power 
 +</​code>​ 
 +  * Define the floor to fix jumping 
 +<code python>​ 
 + if Input.is_action_just_pressed("​jump"​) and is_on_floor():​ 
 + velocity.y += jump_power 
 +  
 + velocity = move_and_slide(velocity,​ Vector3.UP) 
 +</​code>​ 
 +  * Lock the mouse to the window 
 +<code python>​ 
 +func _ready(): 
 + Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED) 
 + 
 +func _process(delta):​ 
 + if Input.is_action_just_pressed("​ui_cancel"​):​ 
 + Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE) 
 +</​code>​ 
 + 
 +  * I think that's as far as we'll get in the first session, I'll make a start on [[Getting started with Godot in 3D Part 2|part two]] though.
  
 ==== Notes for me ===== ==== Notes for me =====
Line 29: Line 139:
     * F to focus on object, O to focus on origin     * F to focus on object, O to focus on origin
     * right mouse, WASD     * right mouse, WASD
 +  * Ctrl + Left click for inline help
 +
 +==== Further reading/​viewing ====
 +  * This tutorial is based on [[https://​www.youtube.com/​channel/​UCdU9e4eNsJif0rBrBiYRb5g|Code with Tom'​s]] Youtube series [[https://​www.youtube.com/​watch?​v=UV-bhtb3734|Make and FPS in Godot]]. ​ Part two is [[https://​www.youtube.com/​watch?​v=Y_2oiLjOx54|here]].
 +  * [[https://​www.youtube.com/​watch?​v=49awsu1VJbo|Building 3D levels]]
  
events/getting_started_with_godot_in_3d.1585589282.txt.gz · Last modified: 2020/03/30 18:28 by admin