Hello Everyone
I currently have a player that is using the Kinematic Body for 3D. I'm currently working on a slide system and I want to add force in the direction of they key pressed. I also want to change the scale of the entire player(player is a capsule) to half the size and back to full size once crouch button is released. I have the basics down, I want to know I can use
state.AddForce(forcevector, Vector3(0,0,0)
to add force to the KinematicBody
extends KinematicBody
# Global Variables
export var MouseSensitivity = 0.05
export var MovementSpeed = 7
export var Acceleration = 20
export var GravityForce = 9.8
export var CounterMovement = 0.175
export var MaxSlopeAngle = 35
export var JumpForce = 5.5
export var SlideForce = 4
export var SlideCounterMovement = 0.2
export var CanSlideValue = 5
# Local Variables
var Threshold = 0.01
var Direction = Vector3()
var Velocity = Vector3()
var Fall = Vector3()
var CrouchScale = Vector3(1, 0.5, 1)
var PlayerScale = Vector3()
onready var head = $Head
# Functions
func _ready():
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
PlayerScale = get_scale()
func _input(event):
if event is InputEventMouseMotion:
rotate_y(deg2rad(-event.relative.x * MouseSensitivity))
head.rotate_x(deg2rad(-event.relative.y * MouseSensitivity))
head.rotation.x = clamp(head.rotation.x, deg2rad(-90), deg2rad(90))
func _process(delta):
# Mouse Visblity
if Input.is_action_just_pressed("ui_cancel"):
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
# Movement Input
Direction = Vector3()
if Input.is_action_pressed("MoveForward"):
Direction -= transform.basis.z
elif Input.is_action_pressed("MoveBackward"):
Direction += transform.basis.z
if Input.is_action_pressed("MoveRight"):
Direction += transform.basis.x
elif Input.is_action_pressed("MoveLeft"):
Direction -= transform.basis.x
# Calculate Velocity & Direction
Direction = Direction.normalized()
Velocity = Velocity.linear_interpolate(Direction * MovementSpeed, Acceleration * delta)
Velocity = move_and_slide(Velocity, Vector3.UP)
move_and_slide(Fall, Vector3.UP)
# Jump Input
if not is_on_floor():
Fall.y -= GravityForce * delta
if Input.is_action_just_pressed("Jump"):
Fall.y = JumpForce
# Crocuh Input
if Input.is_action_pressed("Crouch"):
startcrouch()
elif Input.is_action_just_released("Crouch"):
stopcrounch()
func startcrouch():
PlayerScale = set_scale()
if Velocity >= CanSlideValue:
state.addforce(SlideForce, Vector3())
func stopcrouch():