[원하는 기능]
- 마우스로 클릭한 곳에 새 타일이 생성되는 기능
[관련함수]
- tileMap 의 SetTile 함수 (타일이 생성될 위치와 타일을 매개변수로 넘겨주면 된다.)
- 타일이 생성될 위치는 마우스 입력을 게임 월드 위치로 바꾼 값을 다시 최종적으로 타일맵의 셀 위치로 바꾼 값이다.
- ScreenToWorldPoint 함수 -> WorldToCell 함수를 써서 위치를 변환하는 과정이 필요하다.
[코드]
using System.Collections;
using System.Collections.Generic;
using Unity.VisualScripting;
using UnityEditor.U2D.Aseprite;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Tilemaps;
public class farmColtroller : MonoBehaviour
{
public Camera mainCamera;
public Tilemap tilemap;
public Vector3 mousePos;
public Vector3 clickPos = Vector3.zero;
public Vector3Int tilemapCell = Vector3Int.zero;
public GameObject cat;
[Header("sprite")]
public Sprite newSprite;
[Header("tile")]
public Tilemap farmTilemap;
public TileBase changeTile;
public TileBase selectTile;
public void Awake()
{
mainCamera = GetComponent<Camera>();
}
public void Update()
{
if (Input.GetMouseButtonDown(0))
{
Vector2 mousePos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
Vector3Int gridPos = tilemap.WorldToCell(mousePos);
farmTilemap.SetTile(farmTilemap.WorldToCell(mousePos), changeTile);
if (tilemap.HasTile(gridPos))
{
Debug.Log("Hello World from " + gridPos);
HandleTileClick(gridPos);
tilemap.SetTile(gridPos, changeTile);
cat.transform.position = mousePos;
}
}
}
void HandleTileClick(Vector3Int cellPosition)
{
TileBase clickedTile = tilemap.GetTile(cellPosition);
if (clickedTile != null)
{
Debug.Log("Tile at Position: " + cellPosition + " is " + clickedTile.name);
} else
{
Debug.Log("No tile at Position: " + cellPosition);
}
}
}
[참고자료]
https://www.youtube.com/watch?v=UXSzKmus3ZM