我一直在Unity的宠物模拟游戏中工作。我正在尝试构建的交互的想法如下:
我有一个带有Panel的UI Canvas,它将包含每个Action可用的Sprite。
预期的行为是如果我将一个项目(精灵)从UI面板拖到“3D世界”,它将在当前鼠标位置实例化该项目的3D版本,它将立即可以用鼠标拖动。
首先,我不知道这是否可行,我也不知道如何做到这一点。
我已经尝试实例化该游戏对象并为其提供允许拖放的脚本。在实例化时已经给它了鼠标位置,但是因为我没有首先点击它所以它不会附加到鼠标上。
我知道如何以单独的方式做事但不能一起做,我甚至不知道是否可能。
有人有建议或以前做过这个吗?
答案 0 :(得分:1)
如果不知道您的确切场景设置,并且知道您是否使用Unity的事件系统,Touch类或任何外部库,则难以提供精确的解决方案。
但是,以下是一些可以帮助您的一般性想法:
您无需检测来自3d对象的触摸。由于您根据选择了2d精灵来实例化3d对象,这意味着2d精灵“知道”了3d对象。因此,在创建之后,2d精灵可以禁用其图像,但仍然检测拖动信息并调用3d对象上的函数以更新其位置
更进一步,您甚至可以从开始实例化所有3d对象,但禁用网格渲染器组件,使它们不可见。 2d精灵只是在正确位置时才能看到它
如果您仍希望3d对象自己检测触摸,请查看Unity的IDragHandler接口。有一个实现它的脚本,您将在对象上接收拖动事件而无需先检测到点击