在Unity2D

时间:2019-05-12 17:46:22

标签: user-interface unity3d input transform

我一直在关注Kryzarel的Unity清单教程,并且遇到了一个奇怪的问题,我认为这可能是与无关的东西有关。

大量的Google搜索没有结果。似乎是一个晦涩的问题。

https://www.youtube.com/channel/UCOM0GGMEcu-gyf4F1mT7A8Q/videos供渠道参考。

但是我遇到的问题是我要执行以下操作:

draggableItem.transform.position = Input.mousePosition;

因此,基本上可拖动的物品是对GameObject上的Image组件的引用。我先记录了Input.mousePosition,并且值有意义(在数百个范围内,例如(563,262,0))。但是,转换位置离记录的数字不远。例如,我看到的是(48660.31、23917.95,-7889.887)。在提供Input.mousePosition的debug.log语句与将其分配给转换的代码之间没有逻辑。任何人都知道我可能配置错误,或者可能是错误的吗?

我希望该职位为(563,262,0),而不是最终的荒谬数字。我尝试使用localPosition而不是transform.position,它有点有效。由于它相对于我要相对于鼠标移动的位置右上角偏移了约500或700,因此我想避免使用一些棘手的解决方案,例如尽可能减去一些幻数。

编辑:进一步的背景,其他鼠标单击和鼠标相关的内容似乎正常工作。这是正交摄影机,或者是unity2D项目的默认摄影机

解决方案:就我而言,我能够根据接受的答案进行设置,然后我不得不修改position而不是localPosition,还必须将世界点的z值清零。

1 个答案:

答案 0 :(得分:0)

鼠标位置是相对于屏幕而不是您的世界的。您需要使用以下方法将屏幕空间转换为世界空间:

 var pos = Camera.ScreenToWorldPoint(Input.mousePosition);