Dustin
Dustin

Reputation: 31

How do i get the the tile in front of the player in unity 2d

I'm trying to get all tiles around the player in unity 2d tileset.

What I would like to happen when player presses U I Would like to get all tiles surrounding the player including the one underneath the player or simply the one 1 tile in front of them.

I'm trying to make a farming Game where when the player pulls out an item it will highlight on the tilemap where they are about to place it.

Please note I'm not asking for full code, I just want what ever solution allows me to get tiles near the players position

Edit, found a solution by editing someone elses code but im not sure if there's a better way, if not I would also like this to work based on player rotation currently it places a tile above the player. Code Source https://lukashermann.dev/writing/unity-highlight-tile-in-tilemap-on-mousever/

using System.Collections;
using System.Collections.Generic;
using Unity.Mathematics;
using UnityEngine;
using UnityEngine.Tilemaps;
public class PlayerGrid : MonoBehaviour
{

    private Grid grid;
    [SerializeField] private Tilemap interactiveMap = null;
    [SerializeField] private Tilemap pathMap = null;
    [SerializeField] private Tile hoverTile = null;
    [SerializeField] private Tile pathTile = null;

    public GameObject player;
    private Vector3Int previousMousePos = new Vector3Int();

    // Start is called before the first frame update
    void Start()
    {
        grid = gameObject.GetComponent<Grid>();
    }

    // Update is called once per frame
    void Update()
    {   
        var px = Mathf.RoundToInt(player.transform.position.x);
        var py = Mathf.RoundToInt(player.transform.position.y);
        var tilePos = new Vector3Int(px, py, 0);
       
        
        if (!tilePos.Equals(previousMousePos))
        {
            interactiveMap.SetTile(previousMousePos, null); // Remove old hoverTile
            interactiveMap.SetTile(tilePos, hoverTile);
            previousMousePos = tilePos;
        }

        // Left mouse click -> add path tile
        if (Input.GetMouseButton(0))
        {
            pathMap.SetTile(tilePos, pathTile);
        }

        // Right mouse click -> remove path tile
        if (Input.GetMouseButton(1))
        {
            pathMap.SetTile(tilePos, null);
        }
    }
}

Upvotes: 1

Views: 1049

Answers (1)

Somewhat32
Somewhat32

Reputation: 58

try to use the layer field inside the inspector, you can create new Layers inside the Project Manager and there you can easily create Layers like "Background" "Scenery" "Player" "Foreground".. after this you can assign them individually to your Tiles also its important to have different grids otherwise you will not be able to assign different layers to it i hope it worked already

Upvotes: 0

Related Questions