• 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 Martinpartin · Sep 07, 2019 at 03:07 PM · c#bounds

Problem selecting units using bounds.contains()

I'm doing an RTS style multi unit selection. I do this by storing when the mouse is clicked and where the mouse is as long as the player holds down the mouse button. Then I draw a rect to visualize this and calculate a bounds to check if the bounds contains the units transform. Pretty standard stuff, and most of my code at this stage is borrowed from others.

But something isn't working when selecting units. All units are selected when dragging over a very small part of the screen (marked below). No units are selected anywhere else on the screen.alt text When logging the bound values along with the start and end of the selection box It seems to line up. When units are selected their position is clearly outside of the bounds. alt text Here's my code:

 public class SelectionHandler : MonoBehaviour
 {
     private Vector2 _box_start;
     private Vector2 _box_end;
 
 
     public Camera Camera;
 
 
     public Color BorderColor;
     public Color BoxColor;
 
     public List<GameObject> SelectedUnits = new List<GameObject>();
 
 
     void Update ()
     {
         if (Input.GetMouseButton(0))
         {
 
             if (Input.GetMouseButtonDown(0))
             {
                 _box_start = Input.mousePosition;
             }
 
             else
             {
                 _box_end = Input.mousePosition;
 
                 SelectedUnits.Clear();  //if not shift...
 
                 //single select
                 if (Vector3.Distance(_box_start, _box_end) < 1)
                 {
                     //raycast to see if something is hit for single select.
                         //select single object, NPC or PC.
                 }
                 //multiselect
                 else
                 {
                     //Debug.Log("selection box goin down");
                     foreach (Character unit in FindObjectsOfType<Character>())
                     {
          
                         if (unit.tag == "PC" && !SelectedUnits.Contains(unit.gameObject))
                         {
                             if (IsInSelectionBox(unit.gameObject))
                             {
                                 SelectedUnits.Add(unit.gameObject);
                                 Debug.Log("Unit " + unit.name + " added at " + Camera.WorldToScreenPoint(unit.gameObject.transform.position));
                             }          
                         }
                         
                     }
 
                 }
                 
             }
         }
         else
         {
 
             _box_start = Vector2.zero;
             _box_end = Vector2.zero;
         }
 
     }
 
     void OnGUI ()
     {
         if (_box_start != Vector2.zero && _box_end != Vector2.zero)
         {
             Rect rect = SelectionBox.GetScreenRect(_box_start, _box_end);
             SelectionBox.DrawScreenRect(rect, BoxColor);
             SelectionBox.DrawScreenRectBorder(rect, 2, BorderColor);
         }
 
     }
 
 
     private bool IsInSelectionBox(GameObject unit)
     {
         var bounds = SelectionBox.GetViewPortBounds(Camera, _box_start, _box_end);
 
         //Debug.Log("Min " + bounds.min + "max " + bounds.max + " center " + bounds.center + " extends " + bounds.extents);
 
         Debug.Log("BoundMin " + Camera.ViewportToScreenPoint(bounds.min) + " start " + _box_start +  " ||  max " + Camera.ViewportToScreenPoint(bounds.max) + " end " + _box_end);
         return bounds.Contains(Camera.WorldToViewportPoint( gameObject.transform.position));
         
     }
 }
 

Screen rect and bounds functions:

     public static Rect GetScreenRect (Vector2 startPos, Vector2 endPos)
     {
         Rect rect = new Rect(
                 startPos.x,
                 Screen.height - startPos.y,
                 endPos.x - startPos.x,
                 -1 * (endPos.y - startPos.y)
                 );
 
         return rect;
     }
 
 
     public static Bounds GetViewPortBounds (Camera camera, Vector3 screenPos1, Vector3 screenPos2)
     {
         var v1 = camera.ScreenToViewportPoint(screenPos1);
         var v2 = camera.ScreenToViewportPoint(screenPos2);
 
         var min = Vector3.Min(v1, v2);
         var max = Vector3.Max(v1, v2);
         min.z = camera.nearClipPlane;
         max.z = camera.farClipPlane;
 
         var bounds = new Bounds();
         bounds.SetMinMax(min, max);
 
 
         return bounds;
         
     }

Canvas is set to screen space.

Any help is appreciated! I've been trying to solve this for a while now.

skarmklipp.jpg (111.7 kB)
bounds.jpg (31.1 kB)
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

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

713 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

Related Questions

results -> dynamics.bounds error 0 Answers

Given volume dimensions and direction, how to determine if Vector3 is contained 2 Answers

Get Owner Of Bounds On Intersect 1 Answer

2D Player bounds problem based on moving camera 0 Answers

Image bounds miscalculated? 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