Pawn issues

Hi everyone!
I’m a beginner working with Unreal Engine 5, and I decided to create a small training project. In this project, I created a Blueprint Pawn and added a Static Mesh to it (a flying drone). Everything worked fine until I tried to create my own custom object channel.

I added rockets that the drone can fire, and I decided to create separate object types for the rocket and for my drone. When I created the “Drone“ object type, I set default response to “Block” by default and applied it to the drone (even before creating any collision presets). After that, everything broke — the Pawn didn’t spawn properly, the player appeared at coordinates (0, 0, 0), and only the camera rotation worked. At the same time, the output log continuously displayed the following error:

Blueprint Runtime Error: “Accessed None trying to read property BP_Drone”. Node: Set World Rotation Graph: EventGraph Function: Execute Ubergraph BP Drone Controller Blueprint: BP_DroneController

At that moment, I simply changed “Block” to “Overlap”, and everything started working again. However, I don’t really like this solution, because now the drone overlaps everything by default, and I always have to manually change collision settings everywhere.

During experimentation with custom collision settings, I also discovered that the same issue occurs when the object type is set to “WorldStatic”, while “WorldDynamic” works perfectly fine. This confused me even more, because everywhere I read about collisions in Unreal Engine, it says that “WorldStatic” and “WorldDynamic” are essentially the same — yet in this case, there’s a difference.

So my question is: could someone please explain why my Pawn stops working correctly when I set its object’s channel to WorldStatic, or to any custom object type that has default response “Block”? Meanwhile, everything works fine with other collision configurations.

One more important detail: the Pawn’s structure is as follows — in the Blueprint class, the root component is the Static Mesh. A Spring Arm is attached to it, then the Camera, and I also use a FloatingPawnMovement component. All collision experiments described above were performed specifically on the Static Mesh. I used UE 5.4.4.

Thanks in advance to anyone who can help! :folded_hands:

Hey @MishOvch!

So there is one basic reason why WorldStatic and WorldDynamic would be used differently: WorldStatic is for things that do not, will not, ever move. Things like a building, or a piece of the landscape.

WorldDynamic is used for things that are part of the environment, and are static meshes, but do move in the world, but don’t have physics (usually). Something like an elevator or a door would be good examples of this.

The reason for this isn’t the collision reactions of this object going out, it’s usually the difference coming IN. For example, you want your pawn to be blocked by all WorldStatic and WorldDynamic, but you would want a bomb or gun or something to destroy any WorldDynamic objects, because a candy bar would be blown up but if you blow a hole in the WorldStatic you destroy the floor and therefore the level has a hole in it. Does that make sense?

Also pay attention to the setting below your position XYZ on your components: Static, Dynamic, Moveable. This is important for lighting and will cause errors and game crashes if, for instance, an object marked Static is told to move. On the other hand, if EVERYTHING is labeled moveable, the lighting would make the game really resource intensive.

I hope with this information you’re able to see things a little more clearly! :slight_smile:

1 Like

Hеy @Mind-Brain!

Thank you so much for your reply! I’ve understood the conceptual difference between WorldStatic and WorldDynamic. But there’s still something I don’t quite get.

Initially, I created a separate Object Channel that had a default response set to Block. And using that Object Channel in the collision settings of a Static Mesh inside my Pawn caused problems. Eventually, I tried a different approach — I used the “No Collision” preset first, and then, after the drone spawned in the world, I applied “Set Collision” to assign the required preset. And it turns out that once the object has already spawned, I can assign any collision preset to, even preset that uses my custom Object Channel, World Dynamic, and even World Static works — the drone spawns, flies, shoots, collision behaves correctly, and there are no errors.

So the problem appears specifically at the moment of spawning. If we ignore the World Static vs World Dynamic thing — why can’t I spawn my drone using a collision preset that includes my new Object Channel with the default response set to Block? (Overlap and Ignore do NOT cause any issues.) But once the object is already spawned — I can freely assign the collision preset I want, including the one that cannot be used during the level spawn.

In other words, I want my Pawn to spawn in the level with my very own collision preset that uses the Object Channel I created with the default response set to Block.

Weird question but before we continue on… Have you restarted the UE5 client? When you add any collision channel, in my experience you will have tons of glitches with it until the entire client is restarted, it’s just always been a thing for me. I hate to be the “have you tried turning it off and back on” person but seriously give it a shot if you haven’t.

Yes, I tried it. To be 100% sure I created new object channel (also with default response Block) and restarted UE5 client. After it used this new object channel on drone mesh and got the same problem(

Hi guys, hope you are well.

This sounds like a timing issue during spawn. When you set your pawn’s root Static Mesh to use a collision channel that blocks by default, Unreal runs a collision check during the spawn process, before BeginPlay. If it detects a blocking hit (e.g., against the ground or even itself), the pawn’s root component can fail to initialize, causing the Accessed None errors and the controller to spawn at 0,0,0. This would match what you observed.

Everything works fine if you use “Overlap” or “Ignore” — those skip that spawn-time check — and also why you can safely switch to “Block” after the pawn has spawned.

The cleanest fix is to give your pawn a CapsuleComponent as root and let the StaticMesh have “No Collision.” Alternatively, spawn with “Ignore Collisions” and enable your custom collision preset in BeginPlay.