Attention | Topic was automatically imported from the old Question2Answer platform. | |
Asked By | Kilner |
func _physics_process(delta):
#if the the enemy has reached the end of the current path create a new path
if counter > path.size()-1:
counter = 0
path = get_parent().get_node("Map").get_simple_path(get_translation(), get_parent().get_node("Player").get_translation())
var enemyPos = get_translation()
var vector = Vector2(path[counter].x - enemyPos.x, path[counter].z - enemyPos.z)
#finds the distance to the goal
var distancesq = vector.length_squared()
vector = vector.normalized()
set_linear_velocity(Vector3(vector.x, 0, vector.y)*speed)
set_translation(Vector3(enemyPos.x, 1, enemyPos.z))
#checks to see if its roughly near the current path point if so advances the path
if((enemyPos.x >= path[counter].x-precision && enemyPos.x <= path[counter].x+precision) && (enemyPos.z >= path[counter].z-precision && enemyPos.z <= path[counter].z+precision)):
counter += 1
The code above is the only code directly manipulating the purple enemy model. I have attempted to use the impulse method rather then the linear movement but i never managed to achieve the needed results(i couldn’t get it to even follow the path). How can i make this movement smoother? I have little experience in this specific engine, any help would be appreciated!
I haven’t played with rigid bodies yet and am more familiar with kinematic ones.
Looking at the code, not sure why you are setting the transform of the physics body. My understanding is that rigid bodies should be moved via force alone.
Regarding the jagged movement, I think you need to call the linear_interpolate function to get the next point to move to rather than the next point in a path.
Baolnar | 2018-06-23 12:13
Why bother use RigidBody
at all when you can just use a KinematicBody
. Unless you are enemy will be affected by Godot’s physics engine. In such a case you could try switching the mode of the RigidBody
from Rigid
to Kinematic
.
SIsilicon | 2018-06-24 15:57