unity3d 拖动时游戏对象旋转-180°

wnavrhmk  于 2023-03-13  发布在  其他
关注(0)|答案(1)|浏览(179)

对于2D游戏,我有这样一段代码:

Vector3 mousePos2 = Camera.main.ScreenToWorldPoint(Input.mousePosition);
mousePos2.z = Camera.main.nearClipPlane;
Vector3 cardPos = transform.position;
Vector2 direction = mousePos2 - cardPos;
Quaternion targetRotation = Quaternion.LookRotation(direction);
float degreesPerSecond = 90.0f * Time.deltaTime;
transform.rotation = Quaternion.RotateTowards(transform.rotation, targetRotation, degreesPerSecond);

当我拖动卡片时,它会将卡片向鼠标方向旋转。就像this一样。我有一个带有boxcollider 2d的CardHolder,如果我将它们悬停在上面,它会工作得很好。
然而,一旦我悬停在右边的背景(没有碰撞器),卡片在Y轴上旋转+180°(如果我在左边,则为-180°),就好像鼠标在Z平面上很远。
它只会发生,如果我不是在一个碰撞器和游戏板上,如果我把它拖到背景之外(游戏的限制)卡旋转如预期。
我试过了

  • 将mousePos2.z更改为正值和零。
  • 在背景上加一个对撞机,它“"“工作”"”但是很多事情都搞砸了。
  • 将所有Vector 3更改为Vector 2,问题仍然相同。
    问题从何而来,我该怎么办?
tsm1rwdh

tsm1rwdh1#

找到解决方案;
我有这个:

private void OnMouseOver()
{
    if (!isOverCardHolder)
    {
        transform.position = new Vector2(target, transform.position.y);
    }
}

如果卡不在卡架上,我设置一个新的X位置(从卡片组中“弹出”)。
这就是为什么在背景上拖动时,卡X的位置是由OnMouseOver()强制设置的。
我将其替换为:

private void OnMouseEnter()
{
    if (!isOverCardHolder)
    {
        transform.position = new Vector2(target, transform.position.y);
    }
}

这样,它只发射一次,而不是如果卡是放置或拖过什么。

相关问题