個人的勉強メモ置き場

プログラミングど素人のメモ置き場

SRPGの移動範囲的なアレを作る

これを作ります

f:id:zykb:20210121220457g:plain

TileTest.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Tilemaps;

public class TileTest : MonoBehaviour
{
    
    public Tilemap tilemap;
    public TileBase possibleTile;
    public Grid grid;
    public Camera camera;

    void ChackMoveRange(Vector3Int unitPos, int maxAmount)
    {
        SearchPossible(unitPos, maxAmount);
    }

    void SearchPossible(Vector3Int pos, int remainAmount)
    {
        if(remainAmount == 0) return;
        tilemap.SetTile(pos, possibleTile);

        remainAmount--; // 移動力を下げる

        // 再帰的に4方向を確認
        SearchPossible(pos + Vector3Int.up, remainAmount);
        SearchPossible(pos + Vector3Int.right, remainAmount);
        SearchPossible(pos + Vector3Int.down, remainAmount);
        SearchPossible(pos + Vector3Int.left, remainAmount);
    }

    void Update() 
    {
        if(Input.GetMouseButtonDown(0))
        {
            Vector3 clickPos = Input.mousePosition;
            Vector3Int gridPos = grid.WorldToCell(camera.ScreenToWorldPoint(clickPos));

            ChackMoveRange(gridPos, 3);
        }
        else if(Input.GetMouseButtonUp(0))
        {
            tilemap.ClearAllTiles(); // タイルを全て外す
        }
    }
}

f:id:zykb:20210121223044p:plain

GroundTilemapの上からPossibleTilemapで範囲だけ青の透明タイルで塗っています。

f:id:zykb:20210121221504p:plain
こんなん

今回はユニットなど作っていないので移動力3として想定しています。そのうちタイルごとに必要移動力を変えたりしたいですね。

参考

作るにあたって以下のサイト様を参考にしました。

itsukinamito.hatenablog.com


mynavi-agent.jp