通过触摸输入跟踪围绕多个枢轴点的拖动

时间:2019-06-04 01:52:29

标签: algorithm unity3d rotation

假设在2D中我有一个多边形,它由网格上的正方形单元组成,很像tetronimo,但有任意数量的单元构成它。该形状是正交连续的,因为在每个单元中,它们在正交方向上连接到至少一个其他单元。以下是一些示例:

ShapeOverview

在我正在研究的项目中,可以使用箭头键围绕多个枢轴点在多个方向上移动这些块。例如,通过按所示的旋转顺序,按下左,下,右和上箭头键,可以使以下形状围绕4个方向中的任何一个旋转。形状围绕以红色显示的枢轴点旋转。

enter image description here

我想添加“拖动到移动”支持。换句话说,您将手指向下按到形状上的任何点上,并在围绕枢轴点拖动并旋转手指时,形状将随之随之旋转。我的问题是我不知道如何以编程方式找到仅从玩家手指的路径绕其旋转的枢轴点或旋转方向。

在代码中,我将枢轴点列表存储为Vector3s。这些Vector3存储以下信息:

X-component: x-pos of pivot
Y-component: y-pos of pivot
Z-component: -1 or 1, direction of rotation (1 for clockwise, -1 for anti-clockwise)

为清楚起见,如果要旋转形状 ,则Z组件将确定旋转形状的方向。因此,上述GIF可能会包含以下4个条目:

Entry #1: (0, 0, -1)
Entry #2: (0, 0, 1)
Entry #3: (2, 1, -1)
Entry #4: (2, 1, 1)

在这种情况下,请注意每个x-y位置2个条目,因为形状可以在两个方向上旋转。

我熟悉Unity的触摸系统,尽管在这里对我没有太大帮助。我计划使用Transform.RotateAround(Vector3 point, Vector3 axis, float angle)在每一帧中围绕枢轴和轴递增地旋转形状,但是我不知道如何从玩家的触摸输入和触摸位置计算出枢轴以及旋转角度。

我看到过thisthis之类的帖子(使用鼠标输入),虽然如果我只处理一个枢轴,它们会有所帮助,但我可能处理两个甚至三个枢轴点。如果只涉及一个枢轴,我可能会尝试检查每帧的角度差(枢轴,当前位置和最后一帧位置之间的角度)并使用Transform.RotateAround。由于有两个枢轴,因此我首先确定要绕哪个枢轴旋转,然后可能计算角度增量。但是,我不知道找到要旋转的枢轴的最佳方法是什么。有什么想法吗?

很长的帖子表示歉意,感谢您能提供的所有帮助!请我澄清任何事情。

rbjacob

0 个答案:

没有答案