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:41]
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   * Enter Player scene
Line 20: Line 20:
   * Right Click player, attach script, default, template empty   * Right Click player, attach script, default, template empty
 <code python> <code python>
 +extends KinematicBody
 +
 export var speed = 10 export var speed = 10
 export var acceleration = 5 export var acceleration = 5
 export var gravity = 0.98 export var gravity = 0.98
 export var jump_power = 30 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>​ </​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 39: 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.1585590119.txt.gz ยท Last modified: 2020/03/30 18:41 by admin