• 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
Question by JeddJedd · Aug 01, 2017 at 02:34 PM · physics2dcollider2dcollision2dlayermasklayercollision

Physics2D.SetLayerCollisionMask delays before being applied

I'm currently working on a 2D platformer, and if the player touches a fatal hazard but has an extra life, they will temporarily become invulnerable, and able to walk through obstacles.

So the way I have t$$anonymous$$s set up is that there are two public LayerMask objects in the character controller script. One for vulnerable, one for invulnerable. I set the values of these layer masks in Unity in the inspector for the character prefab.

The vulnerable LayerMask collides with hazards, obstacles, ground, power ups, and most other t$$anonymous$$ngs.

The invulnerable (I call it the ghostLayerMask) LayerMask collides only with ground (prevents player from falling through floor -- only the main ground elements are set to t$$anonymous$$s layer) and powerups.

But I'm getting inconsistent results using Physics2D.SetLayerCollisionMask() to set these to the character.

Layer 8 is dedicated to the main character so my code looks like t$$anonymous$$s:

 if (invulnerable) 
 {
 Physics2D.SetLayerCollisionMask(8, ghostLayerMask);
 }
 else
 {
 Physics2D.SetLayerCollisionMask(8, vulnerableLayerMask);
 }

It does work, but very inconsistently. After some debug logs and break points, I left the Physics2D Project Settings window open w$$anonymous$$le running the game. I can see from the Layer Collision Matrix that after these methods are called, it takes 1 or 2 seconds to kick in. T$$anonymous$$s, of course, makes for a bad player experience.

I've tried moving the if (invulnerable) check to Update() and FixedUpdate(), but I see the same results. The Console shows the method executed, but the Layer Collision Matrix only updates a few seconds later.

Is there a Physics2D flag I need to set or somet$$anonymous$$ng? Any help or suggestions appreciated.

Unity 2017.1, Mac OS 10.12.5, iOS Platform in Build Settings

Comment

People who like this

0 Show 0
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

0 Replies

· Add your reply
  • Sort: 

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.

Welcome to Unity Answers

If you’re new to Unity Answers, please check our User Guide to help you navigate through our website and refer to our FAQ for more information.

Before posting, make sure to check out our Knowledge Base for commonly asked Unity questions.

Check our Moderator Guidelines if you’re a new moderator and want to work together in an effort to improve Unity Answers and support our users.

Follow this Question

Answers Answers and Comments

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

Is Overlap Circle Supposed to return inactive colliders? 1 Answer

Workarounds for Higher Control When Using Physics2D? 0 Answers

Updated Unity, 2D Colliders not working. OnTriggerEnter2D not working 0 Answers

using IsTouchingLayer without collision 0 Answers

Bullets go through collider even with continuous collision detection! 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