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 diliupg · May 28, 2019 at 05:10 PM · c#unity 5tilemap

Finding the position of a tile on a tilemap using Physics.Raycast2D.

What I want to do is to do a Ray cast from a position above a tile and see if a tile is within the raycast distance. If there is a tile want to get it's POSITION ON THE GRID as a co-ordinate. (eg: 14, 5 - row 14 column 5) My code is below. I have spent about two days trying various methods. Nothing has worked.

 private void Update ( )
     {
         Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
 
         Vector3Int cO = foreground.WorldToCell(mouseWorldPos);
 
         RaycastHit2D rayInfo;
         rayInfo = Physics2D.Raycast ( new Vector2 ( mouseWorldPos.x, mouseWorldPos.y ), transform.up, -3f, LayerMask.GetMask ( "Ground" ) );
 
         if ( rayInfo.collider == null && Input.GetMouseButtonDown(0) )
         {
             foreground.SetTile ( cO , waterTile );
             Debug.Log ( "No col" + cO );
         }
         else if( rayInfo.collider != null && Input.GetMouseButtonDown ( 0 ) )
         {
             
 
             Vector3 cellHitByRay =(foreground.WorldToCell(rayInfo.transform.position));
             //Vector3Int newYpos = foreground.WorldToCell(belowTP);
 
             Debug.Log ( "COLLISION :" + cellHitByRay );
 
             Vector3 diff = mouseWorldPos - cellHitByRay;
             //Vector3 newYPos = mouseWorldPos + (new Vector3 (0, 6, 0) -diff);
 
             
             
         }
             
     }
Comment
Add comment · Show 3
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 highpockets · May 28, 2019 at 06:09 PM 1
Share

Is the raycast returning anything??

avatar image Nikola7007 · May 28, 2019 at 06:15 PM 0
Share

In addition to what highpockets already said, some more information would be useful, what is happening when you try to run the project? What gets printed by Debug.Log, how does this differ from what you WANT it to do?

avatar image diliupg · May 28, 2019 at 06:30 PM 0
Share

Debug.Log ( "COLLISION :" + cellHitByRay ); returns 0.0, 0.0, 0. I suspect this is the transform of the entire tilemap named foreground. When I moved it to a different position and tried my guess wad proved. The result gives the transform position of the tile map and NOT the specific tile. I want the position of the exact tile that I am hitting with my raycast.

1 Reply

· Add your reply
  • Sort: 
avatar image
1
Best Answer

Answer by Nikola7007 · May 28, 2019 at 06:45 PM

If the tilemap is directly perpendicular to the camera, then what you are already doing:

      Vector3 mouseWorldPos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
      Vector3Int cO = foreground.WorldToCell(mouseWorldPos);

should be sufficient to find the tile coordinate which the mouse was pointing to. Alternatively, you might want to use RaycastHit2D.point and then convert that point to tilemap coordinates using foreground.WorldToCell(rayInfo.point) or something along those lines.

Comment
Add comment · Show 8 · 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 highpockets · May 29, 2019 at 05:46 AM 0
Share

I would use this solution. Though you will likely need to test the raycast hit.point against your tile map array of positions by looping through the cell positions and finding which cell is closest to the hit.point.

avatar image Nikola7007 highpockets · May 29, 2019 at 05:52 AM 0
Share

Thing is, tilemap.WorldToCell() should already do exactly that, right? Convert a world point to a tilemap cell. I can't figure out what's the problem with OP's approach

avatar image highpockets Nikola7007 · May 29, 2019 at 07:28 AM 1
Share

I’ve never used the tile map or WorldToCell(), but the API says it converts a world position to a cell position. So I guess that this just finds the closest cell position to the world coordinates which are passed. That should be kind of what he is looking for, but it looks like he only wants this to happen if the mousePosition is within a certain range, hence the 3 unit distance on his raycast, but this would still work if you just check the magnitude from the world position to the cell position

Show more comments
avatar image diliupg · May 29, 2019 at 07:35 AM 0
Share

@ Nikola7007, The code below worked correct but I have to subtract 1 from the answer to get the correct tile. $$anonymous$$y need is fulfilled but why do I have to subtract 1?

        else if( rayInfo.collider != null && Input.Get$$anonymous$$ouseButtonDown ( 0 ) )
         {
             
 
             Vector3 cellHitByRay =(Camera.main.ScreenToWorldPoint(rayInfo.transform.position));
             Vector3Int newYpos = foreground.WorldToCell(rayInfo.point);
 
             Debug.Log ( "COLLISION :" + newYpos);


When I click below the tile in question the answer was "No col" (11, 6, 0) but when I clicked 3 tiles above it the answer was COLLISION(11,8,0). So obviously the tile position is (11,7,0). I can always subtract 1 but why is this?

avatar image Nikola7007 diliupg · May 29, 2019 at 07:51 AM 0
Share

This is just a guess but I would think that the ray intersection point is right on the border between the two tiles; maybe by default, if you're right on the border, the point is considered part of the upper tile. You could test this by adding, say, 0.1 unit downwards to rayInfo.point before passing it to WorldToCell(). Also, I should mention, discussion or clarification on an answer should generally be done in comments, not as separate Answers, AFAI$$anonymous$$.

avatar image diliupg Nikola7007 · May 29, 2019 at 09:19 AM 1
Share

Your suggestions work as stated. oops! Sorry, I missed the correct thread.

Show more comments

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

654 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

Related Questions

Multiple Cars not working 1 Answer

Distribute terrain in zones 3 Answers

Painting Prefabs with Tile Palette (Inefficiency && Offset Problem) 0 Answers

How to use tilemaps? 0 Answers

tilemap problem with colour? explain why 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