//棋子脚本的代码
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做的六边形格子,想让棋子按照格子走 ,但是怎么调整数值都不对总是有偏差,
有人提供给我思路说是在绘制地图之前计算出每个"瓦片"之间的距离然后再走,可是我不知道怎么实现
想让棋子按照瓦片的格子走,没有偏差
计算坐标就是个几何问题,你会算一个就都会算了
无非就是走之前必须知道当前坐标和目标坐标,然后让它沿着线走,不要乱走
就当作一个方方正正的矩形格子,只不过计算偶数行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/ 计算公式可以从这里找,封装好来用
如果格子是你运行时动态绘制的,可以使用绘制时的计算公式计算每个格子的中心位置,用于移动定位;如果格子是事先固定的,可以事先找出各个格子的中心位置并记录成数组,后续用这个数组定位
可以将想象将整张地图后台分割成格子(参考围棋棋盘,这个六边形无非就是中心点每一行有半个格子的偏差 计算时补齐就行了)然后记录下每个格子的中心点,当人物移动时计算当前移动方向最近的一个格子中心点就行了
这个是不是可以使用三角坐标系