怎么让角色按照格子走(标签-c#|关键词-Tilemap)

问题遇到的现象和发生背景

img


img

问题相关代码,请勿粘贴截图
//棋子脚本的代码
private Vector2 velocity;//移动速度
private Vector3 direction;//方向
private bool hasMoved;//是否移动
private void Update()
{
    if (velocity.x==0)
    {
        hasMoved = false;
    }else if(velocity.x!=0&&!hasMoved)
    {           
        hasMoved =true;
        MoveByDirection();
    }
    velocity = new Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));        
  }
//移动方法
private void MoveByDirection()
{       
    if (velocity.x<0)//向左移动
    {           
        if (velocity.y>0)
        {          
            direction = new Vector3(-0.5f, 0.5f);
        }else if (velocity.y < 0)
        {          
            direction = new Vector3(-0.5f, -0.5f);
        }
        else
        {          
            direction = new Vector3(-0.5f, 0);
        }
    }else if (velocity.x > 0)
    {
        if (velocity.y > 0)
        {        
            direction = new Vector3(0.5f, 0.5f);

        }else if (velocity.y<0)
        {

            direction = new Vector3(0.5f, -0.5f);
        }
        else
        {
         
            direction = new Vector3(0.5f, 0);
        }          
    }
    transform.position += direction;
}
我的解答思路和尝试过的方法

用的Tilemap做的六边形格子,想让棋子按照格子走 ,但是怎么调整数值都不对总是有偏差,
有人提供给我思路说是在绘制地图之前计算出每个"瓦片"之间的距离然后再走,可是我不知道怎么实现

我想要达到的结果

想让棋子按照瓦片的格子走,没有偏差

计算坐标就是个几何问题,你会算一个就都会算了
无非就是走之前必须知道当前坐标和目标坐标,然后让它沿着线走,不要乱走

【Unity教程】如何让角色在地图上按格子移动_哔哩哔哩_bilibili 视频搬运自:https://www.youtube.com/watch?v=mbzXIOKZurA&t=64s学习的时候发现的视频感觉挺有参考价值就搬运过来了有这个需求的可以参考一下~PS:1.本视频已有英文字幕和机翻中文字幕2.如视频禁止搬运,请告知UP。3.Unity学习交流群【Ivory tower】239065829,欢迎加入交流。, 视频播放量 11675、弹幕量 9、点赞数 275、投硬币枚数 84、收藏人数 963、转发人数 26, 视频作者 Johnny小七, 作者简介 独立游戏开发者,随缘更视频,不定期直播街霸5,相关视频:【战棋类游戏】地图的创建和角色的可移动范围(含范围检测,OnMouseEnter、OnMouseDown、OnMouseExit等方法),【Unity教程】如何在Tilemap上随机生成资源,【波仔羔训练营-03】Unity的9种移动方式,看似简单实则...,[Unity编程]这大概是最好理解的UI框架了吧,Unity教程:制作Roguelike随机地下城01.Introduction 系列教程简介!,【Lee哥】真能少走弯路? 自学一年半up的建议 | 学习方法 | 个人经验 | Unity | 新手,[Unity 2D横版游戏教学] 第一期 -横版角色的移动(强烈建议看简介),[Unity 教程]-如何在unity中使用2D等距瓦片地图(Isometric Tilemaps),【零基础】如何制作精美的像素游戏角色,使用Photoshop绘制像素画,Unity物体移动常用的7种方法 https://www.bilibili.com/video/av328151274/

就当作一个方方正正的矩形格子,只不过计算偶数行x坐标时,统一往右偏移半格。

不知道为什么是direction = new Vector3(-0.5f, -0.5f)
等边三角形的边长与高的比例是二分之根号3,您不打算接受吗

1.格子需要是均匀的
2.找到左上和右下的格子坐标(x1,y1),(x2,y2)
3.看一下从上到下,从左到右需要几步n1,n2
4.最后是计算6个向量,(0|±(x2-x1)/n2 , 0|±(y2-y1)/n1)

https://www.redblobgames.com/grids/hexagons/ 计算公式可以从这里找,封装好来用

如果格子是你运行时动态绘制的,可以使用绘制时的计算公式计算每个格子的中心位置,用于移动定位;如果格子是事先固定的,可以事先找出各个格子的中心位置并记录成数组,后续用这个数组定位

可以将想象将整张地图后台分割成格子(参考围棋棋盘,这个六边形无非就是中心点每一行有半个格子的偏差 计算时补齐就行了)然后记录下每个格子的中心点,当人物移动时计算当前移动方向最近的一个格子中心点就行了

这个是不是可以使用三角坐标系