在Unity中如何进行基本移动

时间:2018-06-25 19:06:35

标签: unity3d base turn

我是Unity的菜鸟。有人可以帮我吗?所以。我在板子9x12单元上有2个或更多字符。如果我触摸角色,他附近的单元(左,右,后,左后,右后,前,左前,右前)必须更改颜色并激活。然后,如果我触摸一些激活的单元格,则角色必须与正在运行的动画一起运行才能触摸到单元格。如果我触摸未激活的单元格,则角色必须保持在其位置上。如果角色2停留在角色1附近的单元格上并且我触摸了角色1,则必须激活角色1附近的单元格并更改颜色,除了巫婆停留在角色2上的单元格。我的英语很差,这必须显示我想要的。 https://youtu.be/FRwIreenNx8

按照我的逻辑: 1.触摸字符 2.检查其他字符是否最近的8个单元忙 2.1不忙则细胞变色 2.2繁忙则细胞不变色 3.仅在不忙的单元格上触摸可用 4.使用移动动画移动到触摸的单元格位置 5.对所有字符使用此逻辑

谢谢

1 个答案:

答案 0 :(得分:1)

您要问的是一个比较广泛的问题。但这是解决方案的一部分。

您可以在其中包含单元格的情况下使用2D阵列。

2D数组有点像坐标系。

它可能看起来像这样

[0,0][1,0][2,0]
[0,1][1,1][2,1]
[0,2][1,2][2,2]

这些单元格中的每一个都可以容纳一个物体。

该对象看起来像这样:

Cell{

public Transform CurrentlyOnCell; //<- this is the player, if null then no one is there.
public int x; //cell x coordinate.
public int y; //cell y coordinate.

}

如果您还有一个管理器类,其中包含所有单元格。然后,当单击一个单元格时,可以将其发送到manager类,获取所有周围单元格的集合并处理是否应激活它们。

如果单元格上当前有一个对象(CurrentlyOnCell不为null),则不应激活该对象。

要坚持逻辑步骤:

  1. 触摸字符应该从被触摸的对象中获取本地单元格脚本(这可以通过Raycasting完成)。
  2. 您可以通过将该单元格脚本发送给知道所有单元格的管理员来检查最近的8个单元格。然后,经理根据给定单元的坐标检查哪些是周围的。
  3. 如果单元格的“ Transform”变量不为null,则可以将其指定为繁忙。然后就不应该激活它。
  4. 运动和动画本身就是主题,可以用不同的方式制作。我建议你用谷歌搜索。但基本上,您的角色只能被允许移动到有空间的地方。
  5. 如果在Unity中将脚本应用于多个字符,则该脚本应可用于多个字符。

进一步阅读:

2D数组:https://www.tutorialspoint.com/csharp/csharp_multi_dimensional_arrays.htm


评论

我上面的建议并不是最终的解决方案,它旨在激发您如何解决您提到的任务的想法。

我建议您分解您想做的事情,以免一次做太多事情。

不要尝试一次对所有单元进行动画处理,移动和激活。当您不熟悉Unity时,尝试一次尝试将变得太大。

这里是一些要考虑的步骤。最好将其分解为简单的动作,而不是想一次做很多复杂的事情。

  1. 了解如何在单击时查找该单元(查找射线广播)。
  2. 了解如何获取该细胞周围的细胞。
  3. 了解如何激活正确的单元格。
  4. 了解如何再次停用周围的细胞。
  5. 了解如何将游戏对象移动到该单元格,然后停用周围的单元格。
  6. 了解如何使用动画。
  7. 了解如何在移动时应用动画以及在停止移动时如何停止动画。

祝您在以后的学习过程中好运。