I’m well aware on how to create a ground NPC, but I really need to create flying ones as fly is a feature of my game. The problem is that I never understood how to make NPCs fly. I tried using BodyPosition, but the speed the NPC flies towards the target changes based on the target’s position and many times it’s inconsistent (I know I can change the MaxForce, Power and Dampering). I could use a BodyVelocity, but I’d like to understand how to do it with a BodyPosition as a lot of people say it works better than a BV. Any tips?
just animate it bro or do mean something else
I mean making it move towards the target with a BodyPosition, not animate it.
What are the current problems you have with BodyPosition? Is it that you want the force to be constant but BodyPosition is applying an unconstant force?
Yeah, I mean look at this gif:
https://gyazo.com/1354a56f8612c8897b9c9b0550160e0c
You can clearly see how inconsistent the speed of the dummy is. The BodyPosition has a MaxForce of 1500,10000,1500, a power of 10000 and a dampering of 1250. Changing the MaxForce will only change the max speed of the dummy, which is useless if I wanna keep a constant speed, not based on the target’s position. If you didn’t understand something ask me, and thanks for the answer
BodyPosition, the dampening property is preventing your NPC to move towards the target at constant speed, hence decelerating it as it approaches the target to prevent inertia. Try this: lower the dampening and increase the power
These images are from roblox’s api reference section
I tried that, and yeah the speed changes but I don’t see anything constant. Look at this:
https://gyazo.com/8fd09aac112ffee7a0360def7c9051d6
See how at the start the NPC was super slow, while the speed changes everytime I move my character? I’m not quite sure if it’s based on the character’s distance from the NPC, but it’s very annoying. I could use them this way but it would’ve been better if they had a constant speed.
I know you are not looking for a bee
But it seems to me that it’s close to the thing you want to do
Sorry if my post is off topic
No no, it’s not off-topic, and actually it’s extremely similar to what I’d like to achieve. Did you make this? If so what method did you use? I don’t want your full script, just the BodyPosition part to understand it, if possible obviously.
In the case of the bee chasing the player
bodyPosition.Position = HumanoidRootPart.Position
That’s it? I use the same method and the speed is inconsistent (as shown in the previous GIFs). Guess I’ll have to play with MaxForce, Power and Dampering more? Thanks anyways for the answer.
I’m sorry, the translation is not clear, I don’t speak English
Use BodyPosition to set the height
Use BodyGyro to adjust its orientation to the body
Use BodyVelocity to adjust body velocity
It looks like you are using another method
Change the height of the bee and set it to the level of the player’s height in case of Follow
bodyPosition.Position = HumanoidRootPart.Position
I would avoid using constraints for this as it might end up wobbling around unnaturally. Imagine you set its position after it gained a lot of momentum. It will end up rubberbanding around the target position until its velocity reaches 0,0,0.
A simple CFrame lerp between the current position and the target position based on a time delta would be much more effective in your situation.
But if you want to avoid writing collision physics, you could go with constraints or a velocity system or with force impulses; however, make sure you apply a lot of limits to avoid the said issue.
If you want to continue with constraints, you should use a single large block for physics and collision and set all other parts’ Massless to true and CanCollide to false. Keep the X and Z rotation at 0 degrees at all times and use VectorForces to move it around. The general formula for the total force should be:
TotalForce = GravityConstant*Mass - Velocity*AirDragConstant/TimeDelta + DesiredDirection*MovementConstant
If you’re looking for consistent speed, set the MaxForce property to inf and play around with the dampening value. Here’s a GIF: https://gyazo.com/eb242ad2e22dfcfa777f7cf791711a95
Set the Value of Dampening close to 0
Since you only want to use Body.Position, Lower dampening will prevent NPC to decelerate depending on its distance from target
The best option would be to manipulate its CFrame while playing an animation to make it fly. This way there would be no errors with miscalculated velocity or any of the glitchy Roblox physics either.
Hello everyone, I managed to find a really easy solution that I didn’t even think about. This doesn’t involve MaxForce, Dampering or any other property of bodyposition. What I’ve done is an actually very simple yet effective solution: in the Humanoid, there’s a property called “WalkToPart”. If you set this to the HumanoidRootPart of a player, the NPC will go towards that point, and the speed is constant. Why? Cause it uses the WalkSpeed property of the Humanoid! So, to clear it up:
- Add a BodyPosition to the NPC’s PrimaryPart to keep it in the air, and set the
BodyPosition.Position
to the current NPC’s PrimaryPart position; - Adjust ONLY the Y axis of the MaxForce property (of the BodyPosition);
- Change the WalkSpeed of the Humanoid based on the speed you want the NPC to have;
- Keep setting the
Humanoid.WalkToPoint
andBodyPosition.Position
to the target’s HumanoidRootPart (or PrimaryPart) position! I also recommend adding aVector3.new(0,3,0)
or higher (based on the NPC’s size), since if you don’t add that the NPC risks glitching under ground.
Result (the Humanoid’s walkspeed is set to 16):
https://gyazo.com/6434446826f82016c6965dee3a8ae9c2
I hope this was and will be helpful for others!
Hi AndroidBoyz,
Could you possibly share the code that you used for this effect? Any screen shots would be helpful.
Thanks,
Leif_aw
This is exactly what I’d like to achieve. Can you share you code please?