AI Character won't move on 2D tilemap or won't register player

I’m pretty stubborn and didn’t want to ask for help until I’ve tried everything I could think of, and now that I have (several times and more than a full day of frustration) here’s the whole story:

I made a reasonably complex PaperCharacter and a very basic behavior tree which sets a location to move to and attempts to move to it. It failed to move, so I dropped in a blank PaperCharacter (the only things set on it are the custom AI controller and its flipbook component) onto the same Navmesh, and it too failed to move. So I disabled the behavior tree and attempted a “simple move to actor” in the PaperCharacter’s blueprint. It failed to move. I switched the AI controller back to the default “AIController” and it still failed to move. I tried “simple move to location”, and it failed to move. I tried dropping in a regular “Character” BP with default Engine asset skeletal mesh and animation (PaperCharacters don’t have an “animation” setting), and it too failed to move.

I also tried with “get AI controller” instead of “Get controller” - all results the same:

As you can see in the .gif, the debug text says that the AI Character is correctly possesed by the AI Controller (and my custom AI controller when it is set to that), and is correctly updating the player’s location, and there’s a .5 second delay so it shouldn’t be flooding the AI Character with the move command faster than it can move - yet it doesn’t move. It’s the same with both the move to actor and move to location.

I decided to start over with the behavior tree to see if I missed anything:

  1. My custom AI Controller (EnemyAIController) runs my Behavior Tree when it possesses something.
  2. My AI Character’s AI controller class is set to the correct AIController (I did also delete the Event Tick event in the Character BP to prevent any conflicts from the ‘Simple move to’).
  3. My Behavior tree sets the actor for my player character and attempts to move to it.
  4. The service that sets the actor object.
  5. Blackboard decorator says the blackboard key failed to get populated.
  6. The decorator’s settings.
  7. The object variable’s base class has been set to both Actor and my specific player character blueprint. (I tried all four Service and Blackboard Key combinations: Actor > get controlled Pawn, Actor > cast to lumberjack, Lumberjack > get controlled pawn, Lumberjack > cast to lumberjack)
  8. & 9. Tried the same thing using the vector location of the player, the decorator again says the variable is never set.

My first iteration of the behavior tree was slightly different, and would flash down to “move to” task over and over without moving on in the sequence, so I wasn’t sure what was causing the move to fail, just that it was failing. Now I’m thinking it’s somehow able to print the player’s location using the exact same nodes I’m using to set these variables, but it won’t set the variables.

Is that even possible? Is it failing to do the “simple move to” because it’s not registering the “goal”, yet it’s able to print that goal?

I thought of this a few minutes ago, and put in the 3 second wait to make sure it had plenty of time for the player to spawn (which takes ~.2 seconds) to set the variable (even though I know that it should fail back to root and start over, then have the variable set the next time around). Every 3 seconds it flashes the red ‘failed’ thing on the blackboard decorator attached to the ‘move to’ task, and restarts.

Additional information: I’m stream-loading levels. The Navmesh and AI Character are both part of the same level as the Tilemap they’re sitting on (the level loads before the player does, hence the ‘Reset’ on ‘Failed to Cast’ in the AI Character’s Simple Move To process). When I gave the AI character an Event Tick → Add Movement Input (same “Add Movement input” the player character uses) it would move, so it’s not somehow stuck in place - they don’t load before the floor then fall an inch and get stuck in it or anything like that (as evidenced in gifs below). I made sure the AI Character is on the same Y value as the Player Character, then realized I never even constrained it to plane, so that doesn’t matter (but they are the same, as it says in the debug text in the first .gif above). I haven’t touched the Project settings AI page. I use the exact same nodes (get player controller/get player character/cast to lumberjack/get world location, etc.) in several places, in menu widgets, in various actors, in my level blueprints, and in the game instance blueprint. There are no errors or warnings in the log. I’m using 4.16.2. I’m not using any C++.

This is extremely frustrating because it doesn’t seem nearly as complex as many of the things I’ve already done, it just seems to not work (especially because it can correctly print-string the player location).


Here’s the PaperCharacter that I was originally working on:
http://i.imgur.com/SN76lUK.gif

http://i.imgur.com/SN76lUK.gif

(As you can see, the ‘shoot arm’ process is correctly retrieving the player location’s Z value, using the same nodes I was using to set the player location vector in the behavior tree’s service).

Here’s the extremely dumb work-around I made before deciding to just ask for help:

http://i.imgur.com/dUDZCXk.gif

http://i.imgur.com/dUDZCXk.gif

I think I could probably make this do exactly what I want for this particular enemy, and it’s kind of funny how unintelligent this pseudo-AI is, but I would really like to use some of the more complex functionality of behavior trees in the future. I’ve watched a few different tutorials on youtube, and I’ve read the docs page (https://docs.unrealengine.com/latest/INT/Engine/AI/BehaviorTrees/index.html) and I’m not finding the error, though I’m sure it’s something simple, some checkbox I’m unaware of or something. Any insight would be greatly appreciated.

(P.S. Extremely minor nit-picky error I want to point out: The “PaperCharacter” comes with a flipbook component labeled “Sprite”, but it’s not a sprite component, it’s a flipbook component.)