- Home /
Help getting grounded enemy to move with A* pathfinding (based on Brackeys tutorial)
Hello!
So, I have an enemy object. I stumbled with the Brackeys tutorial for enemy pathfinding using A* project (link: https://www.youtube.com/watch?v=jvtFUfJ6CP8&ab_channel=Brackeys), but somehow, I can't get my enemy object to move - I'm using the custom script -. Also, I'm using a little variation in the "AddForce" part of the script that I found in the comments of the video, It is supposed to help to move the enemy just in the horizontal axis, but the original AddForce
Rigidbody2D.AddForce(Force);
doesn't work either. So, here is the script:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Pathfinding;
public class YaoquizquitlCeMovement : MonoBehaviour
{
[Header("Pathfinding")]
public Transform Target;
[Header("Physics")]
public float Speed = 2f;
public float NextWaypointDistance = 3f;
Path Path;
int CurrentWaypoint = 0;
Seeker Seeker;
Rigidbody2D Rigidbody2D;
void Start()
{
Seeker = GetComponent<Seeker>();
Rigidbody2D = GetComponent<Rigidbody2D>();
InvokeRepeating("UpdatePath", 0f, 0.5f);
}
void FixedUpdate()
{
if(Path == null)
{
return;
}
if(CurrentWaypoint >= Path.vectorPath.Count)
{
return;
}
Vector2 Direction = ((Vector2)Path.vectorPath[CurrentWaypoint] - Rigidbody2D.position).normalized;
Vector2 Force = Direction * Speed * Time.deltaTime;
//This is the variation for the ground enemies movement.
Vector2 Velocity = Rigidbody2D.velocity;
Velocity = Force;
Rigidbody2D.velocity = Velocity;
float Distance = Vector2.Distance(Rigidbody2D.position, Path.vectorPath[CurrentWaypoint]);
if(Distance < NextWaypointDistance)
{
CurrentWaypoint++;
}
}
void UpdatePath()
{
if(Seeker.IsDone())
{
Seeker.StartPath(Rigidbody2D.position, Target.position, OnPathComplete);
}
}
void OnPathComplete(Path p)
{
if(!p.error)
{
Path = p;
CurrentWaypoint = 0;
}
}
}
And here is the components setup for the enemy object (It's called Yaoquizquitl).
Some final observations: If I use the built-in AI pathfinder, the enemy object moves (but It flies, and I just want it to move on the ground); the correct target is set, that is, the player object (Nehnemiquiteotl); using the custom script, it uses and traces paths to the target correctly.
Your answer
Follow this Question
Related Questions
How do i get the IsPathPossible() function to ignore some nodes using Astar Pathfinding Project 0 Answers
Yet another 2D pixel perfect movement question 0 Answers
Why doesn't Rigidbody.velocity.x = 0 in a collision? 1 Answer
How to make slider joint immovable by the player 1 Answer
Jump freeze when horizontal movement is being held down 1 Answer