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
Last revision Both sides next revision
events:getting_started_with_godot_in_3d [2020/03/30 18:31]
admin
events:getting_started_with_godot_in_3d [2020/03/31 18:01]
admin
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
 +  * 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   * 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 36: 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.txt ยท Last modified: 2020/03/31 18:04 by admin