【问题标题】:How to move a tile (sprite) with drag and drop in Unity 2D?如何在 Unity 2D 中通过拖放移动图块(精灵)?
【发布时间】:2015-09-21 04:21:49
【问题描述】:

我想在 Unity 2D 中通过拖放移动图块。瓦片是一个精灵。场景是“解除阻止我”或“被阻止”之类的游戏。

因为现实生活中的瓷砖对应于物理对象,所以用对撞机和刚体建模似乎是个好主意。桌子的边缘布满了无形的对撞机。我希望当玩家移动它们时,这些会限制瓷砖的移动。

然后我实现了一个简单的(基于鼠标的)拖放行为,除了移动的图块穿透到其他图块和边框,有时会跳过它们之外,它运行良好。然后我知道如果我通过显式设置变换位置(我在拖放实现中完全这样做)来覆盖物理,这将会发生。好的,我接受,我应该只设置力量,等等。在刚体上从不直接定位。

现在的问题:

我被困在这里了。我仍然想像用户体验那样拖放,以及一些逼真的视觉效果。当玩家在现实生活中移动棋子时,它似乎被“粘”在手指上。我怎样才能通过施加力量来实现这一点(至少是类似的)?任何建议或点类似的现有示例/博客代码?

(我知道作为备用计划,我可以省略所有物理并通过代码限制瓷砖位置,并创建一些补间来移动瓷砖。真正的解决方案(我所要求的)是否如此复杂,我应该投票这个备份计划?)

编辑 根据 cmets 我有 added a video:

【问题讨论】:

    标签: unity3d


    【解决方案1】:

    您操纵拖动的方式没有任何问题。发展的美妙之处在于能够以自己的方式做事。如果它适用于您的游戏,请不要担心。

    现在,我建议:

    1. 创建新的物理材料。资产 > 创建 > 物理材质
    2. 将新的物理材料检查器设置都设置为 0
    3. 将物理材质附加到所有墙壁对象碰撞器。这应该允许您被拖动的对象在墙壁上平稳移动而不会被砍断。
    4. 检查您的鼠标是否在另一个碰撞器上。如果是,则停止该方向的移动。
    5. 由于您的运动似乎总是在一个轴上,因此在发生碰撞时,请告诉您的对象捕捉到墙壁对象的边缘。您知道墙的位置和比例,也知道被拖动对象的位置和比例。有了它,您可以编写一个函数,在发生碰撞时将其偏移到正确的位置。

    如果有任何解决方法,请告诉我:P

    【讨论】:

    • 谢谢,我已经尝试过了(创建了 Physics2D 材质,将弹力和摩擦力都设置为 0,但是在我的拖放操作中使用了 transform.position = ... 但不幸的是,拖动的瓷砖正在渗透到其他人身上喜欢黄油...
    • 是的,OnCollisionEnter 正在执行
    • 你是不是用它来设置一个标志,表明你不应该再这样移动了?您可以使用 oncollisionstay 触发标志。
    • 是的,我已经实现了这个标志,我们称之为dragdisabled。根据拖动速度,瓷砖仍然相互穿透,请参见视频:screencast.com/t/xHLzlchn8kC
    • 检查我的答案编辑。实际上,我过去也遇到过同样的问题。您可能需要进行插值以确保它不会导致断断续续
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多