[원하는 기능]
- 농사 가능 구역만 타일을 바꿀 수 있도록 하는 기능
[관련함수]
ScreenToWorldPoint(Vector): 벡터를 받아서 게임상 좌표로 변환하는 함수
WorldToCell(Vector): 벡터를 받아서 타일맵의 셀 좌표로 변환하는 함수
HasTile(Vector): 벡터를 받아서 그 위치에 타일이 존재하는지 확인하는 함수
SetTile(Vector, Tile): 벡터와 타일을 받아서, 그 위치에 타일을 생성하는 함수
[코드]
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 Vector3 mousePos;
public Vector3 clickPos = Vector3.zero;
public Vector3Int tilemapCell = Vector3Int.zero;
public GameObject cat;
[Header("sprite")]
public Sprite newSprite;
[Header("tile")]
public Tilemap borderTilemap;
public Tilemap tilemap;
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);
if (borderTilemap.HasTile(gridPos))
{
tilemap.SetTile(gridPos, changeTile);
}
}
}
}
게임 오브젝트로 타일맵을 두개 만들어 놓았다. 하나는 배경 타일맵이고 하나는 농사가능 구역 타일맵이다.
농사가능 구역의 타일을 클릭했을 때 타일을 바꿀 수 있도록 borderTilemap.HasTile(gridPos) 을 조건문과 함께 사용하였다.
농사 가능한 구역에 타일이 있으면 HasTile 함수가 true를 반환하므로 tilemap(배경 타일) 에서 마우스로 클릭한 위치(+ 농사 가능 구역) 에 새로운 타일을 생성하도록 했다.