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 /
  • Help Room /
avatar image
0
Question by ahstein · Aug 25, 2020 at 08:56 PM · physics2dphysics 2d

Change Collider2D size at runtime

I'm trying to create a trigger collider that encapsulates all of its children. I use it to define a room, so the camera is limited to move within the room while the player is inside of it. When the player moves into the next room, I use OnTriggerEnter2D to move the camera into the new room that the player moves into.

Instead of manually sizing the collider for each room, I would like to automatically calculate it based on the colliders of the children.

Here's my code that I think should do that:

 [RequireComponent(typeof(BoxCollider2D))]
 public class CameraZone : MonoBehaviour
 {
     BoxCollider2D m_collider;
 
     // Start is called before the first frame update
     void Start()
     {
         m_collider = GetComponent<BoxCollider2D>();
         m_collider.isTrigger = true;
 
         Collider2D[] childColliders = GetComponentsInChildren<Collider2D>();
         foreach(Collider2D child in childColliders)
         {
             m_collider.bounds.Encapsulate(child.bounds);
         }
     }
 }

However, this code doesn't change the bounds of the parent collider.

This related question suggests that the problem is that Collider2D.bounds is a struct, and I need to make a copy then assign it back to the original collider after encapsulating. However, Collider2D.bounds is read only and there's no way to access the size/extents/etc. of the bounds, so that approach doesn't work. https://answers.unity.com/questions/1234063/collider-bounds-encapsulate-doesnt-seem-to-do-anyt.html

Is there any way to change the size of a Collider2D at runtime?

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
2
Best Answer

Answer by ahstein · Aug 25, 2020 at 09:28 PM

For anyone who comes across this, I figured out my problem.

Collider2D does not have properties for settings its size, but BoxCollider2D does. Here's the modified code to change the size of the BoxCollider2D.

 [RequireComponent(typeof(BoxCollider2D))]
 public class CameraZone : MonoBehaviour
 {
     public Bounds Bounds { get { return m_collider.bounds; } }
     BoxCollider2D m_collider;
 
     // Start is called before the first frame update
     void Start()
     {
         
         m_collider = GetComponent<BoxCollider2D>();
         m_collider.isTrigger = true;
 
         Bounds bounds = m_collider.bounds;
 
         Collider2D[] childColliders = GetComponentsInChildren<Collider2D>();
         foreach(Collider2D child in childColliders)
         {
             bounds.Encapsulate(child.bounds);
         }
 
         m_collider.size = bounds.size;
         m_collider.offset = bounds.center - m_collider.transform.position;
     }
 }
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

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

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

Related Questions

How to make flips, backflips like in game Backflip madness 2 Answers

Ground Check Issue 1 Answer

AddExplosionForce 2d workaround not working 0 Answers

Limiting backwards speed 0 Answers

2D Top-Down Platforming like Mario and Luigi: Super Star Saga 1 Answer


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