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 armoredpokey · Mar 21, 2013 at 12:03 PM · collisionignoreignorecollision

Ignore individual collisions between two objects

I want to ignore collisions between an object and a special class of objects only when the collision contact point meets a few criteria. In other words:

 function OnCollisionEnter(other : Collision) {
   if (isSpecial(other.gameObject) && meetsCriteria(other.contacts[0].point)) {
     // Ignore this individual collision
   }
 }


However, I don't want to use Physics.IgnoreCollision(other.collider, collider) because I want future collisions to still happen.

Any thoughts? I will probably have to default to some kind of hackery where I remember what colliders I've ignored and then reenable collisions later, but I'd like to have a cleaner and less hacky solution.

Thanks!

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

1 Reply

· Add your reply
  • Sort: 
avatar image
0

Answer by whydoidoit · Mar 21, 2013 at 01:09 PM

Well you could flag special game objects by giving them a script (with perhaps even nothing in it!)

  if(other.gameObject.GetComponent<IsSpecial>())
  {
  }

Now as for meeting criteria - if these are fixed then you could obviously just code meetsCriteria - otherwise perhaps an event?

 public class ContactPointCriteria
  {
       public ContactPoint point;
       public bool meetsCriteria;
  }
 
  public event Action<ContactPointCriteria> CheckContactPoint = delegate {};

Then

   var cpc = new ContactPointCriteria { point = other.contacts[0] };
   CheckContactPoint(cpc);
  if(other.gameObject.GetComponent<IsSpecial>() && cpc.meetsCriteria)
  {
  }

To wire up the event

   someClassInstance.CheckContactPoint += HandleContact;
 
   void HandleContact(ContactPointCriteria criteria)
   {
      criteria.meetsCriteria = true;//the result of some calculation
   }

Or you could keep that same ContactPointCriteria and send or broadcast a message:

   var cpc = new ContactPointCriteria { point = other.contacts[0] };
   BroadcastMessage("CheckContact", cpc, SendMessageOptions.DontRequireReceiver);
  if(other.gameObject.GetComponent<IsSpecial>() && cpc.meetsCriteria)
  {
  }

Then handling it on a suitable script would be

   void CheckContact(ContactPointCriteria criteria)
   {
      criteria.meetsCriteria = true;//the result of some calculation
   }
Comment
Add comment · Show 2 · 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 armoredpokey · Mar 21, 2013 at 01:10 PM 0
Share

Um, checking whether the contact meets the criteria and whether the object meets certain criteria are both easy -- already implemented. What I don't know how to do is ignore the collision.

avatar image whydoidoit · Mar 21, 2013 at 02:01 PM 0
Share

Oh you mean ignore in the physics? I get your point :)

Too late by the time you get an event I believe. But perhaps you could use IgnoreCollision and then reset it in a coroutine that was doing WaitForFixedUpdate perhaps (calling it again and passing false as the last parameter).

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

12 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 avatar image avatar image

Related Questions

making Navmesh Agents able to walk through each other? 3 Answers

Ignoring collision on a specific parent or a tagged object 1 Answer

Why does my player object decide to ignore colliders whenever he feels like it? c# 1 Answer

How to detect if collisions are being ignored unity 2018 2 Answers

Instantiated Projectile IgnoreCollision Error 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