Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 13 Next capture
2021 2022 2023
1 capture
13 Jun 22 - 13 Jun 22
sparklines
Close Help
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
  • Asset Store
  • Get Unity

UNITY ACCOUNT

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account
  • Blog
  • Forums
  • Answers
  • Evangelists
  • User Groups
  • Beta Program
  • Advisory Panel

Navigation

  • Home
  • Products
  • Solutions
  • Made with Unity
  • Learning
  • Support & Services
  • Community
    • Blog
    • Forums
    • Answers
    • Evangelists
    • User Groups
    • Beta Program
    • Advisory Panel

Unity account

You need a Unity Account to shop in the Online and Asset Stores, participate in the Unity Community and manage your license portfolio. Login Create account

Language

  • Chinese
  • Spanish
  • Japanese
  • Korean
  • Portuguese
  • Ask a question
  • Spaces
    • Default
    • Help Room
    • META
    • Moderators
    • Topics
    • Questions
    • Users
    • Badges
  • Home /
avatar image
0
Question by lordmonkey · Dec 26, 2012 at 12:15 PM · c#collisioncolliderpathfindingcheck

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 Nodes 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 Obstacles

  • temporary 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'.

Comment
Add comment
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users

2 Replies

· Add your reply
  • Sort: 
avatar image
0
Best Answer

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 :)

Comment
Add comment · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image
0

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.

Comment
Add comment · Show 4 · Share
10 |3000 characters needed characters left characters exceeded
▼
  • Viewable by all users
  • Viewable by moderators
  • Viewable by moderators and the original poster
  • Advanced visibility
Viewable by all users
avatar image lordmonkey · Dec 26, 2012 at 12:52 PM 0
Share

@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 ?

avatar image homeros · Dec 26, 2012 at 12:59 PM 0
Share

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.

avatar image lordmonkey · Dec 26, 2012 at 03:57 PM 0
Share

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.

avatar image homeros · Dec 26, 2012 at 04:05 PM 0
Share

do you mean the obstacle is "on" the node or it's between nodes and still doesn't get detected?

Your answer

Hint: You can notify a user about this post by typing @username

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this Question

Answers Answers and Comments

10 People are following this question.

avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image avatar image

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


Enterprise
Social Q&A

Social
Subscribe on YouTube social-youtube Follow on LinkedIn social-linkedin Follow on Twitter social-twitter Follow on Facebook social-facebook Follow on Instagram social-instagram

Footer

  • Purchase
    • Products
    • Subscription
    • Asset Store
    • Unity Gear
    • Resellers
  • Education
    • Students
    • Educators
    • Certification
    • Learn
    • Center of Excellence
  • Download
    • Unity
    • Beta Program
  • Unity Labs
    • Labs
    • Publications
  • Resources
    • Learn platform
    • Community
    • Documentation
    • Unity QA
    • FAQ
    • Services Status
    • Connect
  • About Unity
    • About Us
    • Blog
    • Events
    • Careers
    • Contact
    • Press
    • Partners
    • Affiliates
    • Security
Copyright © 2020 Unity Technologies
  • Legal
  • Privacy Policy
  • Cookies
  • Do Not Sell My Personal Information
  • Cookies Settings
"Unity", Unity logos, and other Unity trademarks are trademarks or registered trademarks of Unity Technologies or its affiliates in the U.S. and elsewhere (more info here). Other names or brands are trademarks of their respective owners.
  • Anonymous
  • Sign in
  • Create
  • Ask a question
  • Spaces
  • Default
  • Help Room
  • META
  • Moderators
  • Explore
  • Topics
  • Questions
  • Users
  • Badges