- Home /
How to perform one pass collision detection on many objects?
I am implementing A* algorithm with obstacles tagged as Obstacle
. I have a Board
class that holds a grid of Nodes
- discretized Plane 'tiles' with its coordinates.
I need create a map of walkable/unwalkable Node
s with collsion detection. What I came up with is :
Create a temporary GameObject
with BoxCollider
and keep translating it from one Node
in the Board
to another and check everytime if it collides with anything with Obstacle
tag.
Now how can I do it if I do not have a single OnCollisionEnter()
(or other function for collisions) but I have :
a plane with pathfinding script attached
many
Obstacle
stemporary
BoxCollider
which I do not know where to create (in which script)
How should I do this ? Where to perform this collision checking ? I think I can create a flag that would indicate whether the walkable/unwalkable map needs 'rebuilding'.
Answer by lordmonkey · Dec 26, 2012 at 05:51 PM
Ok so the way I have completed this is to iterate over each Node
in Board
and SphereCast
it from above e.g. node (0,0,0)
from (0,100,0)
(assuming Plane on which characters walk is horizontal).
This works perfectly :)
Answer by homeros · Dec 26, 2012 at 12:27 PM
You can use raycasting for what you want to achieve and it should give you better results. If you have the list of Nodes on your pathfinding script. All you have to do is use Physics.Raycast from one node to another and check if it hits an obstacle.
@Speed Using this method I have few problems: 1. What if an obstacle is big (for few nodes) and when I raycast from one node to another I will raycast inside it? 2. As I know I raycast from point (center of Node) to point (center of other Node) - what if there is an obstacle that covers 1/3 of Node but is not 'touching' the center ?
good points, I would do it like this: 1) if the obstacle is big enough to cover both nodes, there won't be any collision anyway even if you used the collider method. 2) If you want to add a width to your paths you can use Physics.SphereCast . You can specificy the radius to control.
So I have tried the approach with SphereCast but there is a small problem with that : when I iterate over all Nodes in my Board
there is a place in time when I am SphereCasting from inside of the obstacle and then I am not getting the true value from the cast.
do you mean the obstacle is "on" the node or it's between nodes and still doesn't get detected?
Your answer
Follow this Question
Related Questions
Trouble with Physics.IgnoreCollision 0 Answers
Unity Colliders are Overlapping/Intersecting 2 Answers
Why the npc character walking strange when using a Rigidbody and Is Kinematic on enabled ? 1 Answer
If statement null check not working as expected 1 Answer
draw canvas/2D space Box Colliders on top of 3D objects that are located in world space? 0 Answers