Wayback Machinekoobas.hobune.stream
May JUN Jul
Previous capture 12 Next capture
2021 2022 2023
1 capture
12 Jun 22 - 12 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 zgould24 · Jun 01, 2020 at 10:58 AM · c#2dcollisionphysics2doncollisionenter

Checking for collision with 2D objects/sprites

I'm very new to Unity and C#, having a background in Java and trying my best to create a game. I currently have 2 sprites as test subjects that spawn in random locations on the screen at the start of the game. I am struggling to figure out how to check for collision in Unity C#. I've researched about Physics2D.Overlap and Physics.Check and OnCollisionEnter2D method and even OnTriggerEnter2D and I just cannot wrap my head around any of the logic. How would I code to check that if one sprite is spawned, the other sprite does not spawn over it by checking if it's collision box is hitting the other sprite's collision box and picks a new place to spawn at the start of the game? Any code examples would help tremendously.

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

3 Replies

· Add your reply
  • Sort: 
avatar image
0

Answer by ShadyProductions · Jun 01, 2020 at 11:10 AM

Colliders have a bounds property that you can use .Intersect(bounds) on of another collider.

ex:

 if (collider1.bounds.Intersect(collider2.bounds)) 
 {
     // Code here
 }

https://docs.unity3d.com/ScriptReference/Collider-bounds.html

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 wewewu · Jun 01, 2020 at 11:10 AM

this should be working:

     private void OnCollisionEnter2D(Collision2D collision)
     {
         while (collision.gameObject.name == "Name of the object you don't want to collide with" && respawning)
         {
             Respawn(); //find a new place
             respawning = false; //we don't want to respawn in game, and don't forget to set respawning to true if you start the respawning process
         }
     }
Comment
Add comment · Show 1 · 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 ShadyProductions · Jun 01, 2020 at 11:12 AM 0
Share

This doesn't work because the object must be physically instantiated first to trigger collision, which is what he is trying to prevent in the first place. And checking for a gameobject with a hardcoded name in a while loop doesn't seem like good practice.

avatar image
0

Answer by tadadosi · Jun 01, 2020 at 01:36 PM

This might do the trick. In this approach I have:

(1) A Factory that spawns gameobjects on random positions and nothing else, it uses its position as center and a public Vector2 to limit the possible positions, and also stores static variables of those vectors to allow other scripts to access them. You can spawn as many objects as you want, just be aware that spawning a lot in small bounds will not yield a good result.

Factory code:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class ObjectFactory : MonoBehaviour
 {
     public int objectAmount;
     public Vector2 spawnBounds;
     public static Vector2 _SpawnBounds;
     public static Vector2 _SpawnCenter;
     public GameObject prefabToSpawn;
 
     private void Awake()
     {
         // store static variables
         _SpawnCenter = transform.position;
         _SpawnBounds = spawnBounds;
     }
 
     private void Update()
     {
         if (Input.GetKeyDown(KeyCode.Space))
             for (int i = 0; i < objectAmount; i++)
             {
                 // spawn the object and forget about it
                 Instantiate(prefabToSpawn, RandomPointOnBox(transform.position, spawnBounds), Quaternion.identity);
             }
     }
 
     // this method should be on its own utility script
     public static Vector2 RandomPointOnBox(Vector2 center, Vector2 size)
     {
         float spawnPosX = Random.Range(center.x - size.x / 2, center.x + size.x / 2);
         float spawnPosY = Random.Range(center.y - size.y / 2, center.y + size.y / 2);
         return new Vector2(spawnPosX, spawnPosY);
     }
 
     // method to get a visual referece in the scene view of the spawn bounds
     // tip: On the game tab, click on the right top corner the button gizmos
     // and you will have the visual reference in the game view too.
     private void OnDrawGizmos()
     {
         Gizmos.color = Color.blue;
         Gizmos.DrawWireCube(transform.position, _SpawnBounds);
     }
 }



(2) The Spawned Object that checks for collision when starting. When an object starts, it immediately check for collisions using Physics2D.OverlapCircle on a while loop. When it finds a collision, a new point is calculated and a new check is made, this last until no collision is found and the object breaks the loop and enables its collider. Make sure that your object has a collider 2D and its layerMask WhatShouldIAvoid set to the same layer as your object.

Object code:

 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine;
 
 public class ObjectThatChecksSpawnPoint : MonoBehaviour
 {
     public float checkRadius;
     public LayerMask WhatShouldIAvoid;
 
     private BoxCollider2D _Collider;
 
     private void Awake()
     {
         TryGetComponent(out _Collider);
     }
 
     private void Start()
     {
         StartCoroutine(Initialize());
     }
 
     private IEnumerator Initialize()
     {
         // disable collider to avoid hitting itself when checking for collisions
         _Collider.enabled = false;
         while (true)
         {
             // check for collisions
             if (Physics2D.OverlapCircle(transform.position, checkRadius, WhatShouldIAvoid))
             {
                 // if found, use RandomPointOnBox and Factory static variables to look for a new position
                 transform.position = ObjectFactory.RandomPointOnBox(ObjectFactory._SpawnCenter, ObjectFactory._SpawnBounds);
             }
             else
             {
                 // else enable collider and break the loop
                 _Collider.enabled = true;
                 yield break;
             }
             yield return new WaitForEndOfFrame();
         }
     }
 }
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

800 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 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 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 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

Object following a path and colliding with other objects with physics. 1 Answer

Collision issue with SetParent (C#) 1 Answer

Is calling OnCollisionEnter2D on allot of GameObjects bad for performance? 2 Answers

make OnCollisionEnter2D ignore collisons of child objects 0 Answers

How to access a prefab's boolean property through collision (with the same Prefab but different Instance)? 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