将玩家移动到精确的触摸/鼠标点击位置

3

在我的2D Unity游戏中,我想让我的精灵移动到触摸/光标的位置(现在是鼠标单击)。

我的精灵位于位置(173,48,-52.1)。 然而,当我点击一个可能相距几个像素的位置时,我的位置会改变为(399,129,0),我的精灵显然被抛入了广阔无垠的未知领域。

if (Input.GetMouseButtonDown(0))
{

    //fingerPos =  Input.GetTouch(0).position;
    fingerPos = Input.mousePosition;
    transform.position = fingerPos;
    Debug.Log(transform.position);
}

编辑

当前代码

if (Input.GetMouseButtonDown (0)) {
        fingerPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); //Desktop
        transform.position = fingerPos;
        Debug.Log (transform.position);
    }   

更新。显然,当我点击记录的位置(以及精灵移到该位置)时,其实是直接在相机上。请参考以下图片: 点击

1个回答

4

transform.position 是世界坐标系下的位置。 Input.mousePosition 返回的是像素坐标值。你需要将其转换为世界坐标系下的值。

fingerPos = Camera.main.ScreenToWorldPoint(Input.GetTouch(0).position); //Mobile
fingerPos = Camera.main.ScreenToWorldPoint(Input.mousePosition); //Desktop

然后,您可以将其分配给您的位置。
transform.position = fingerPos;

编辑:

if (Input.GetMouseButtonDown(0))
{
    fingerPos = Input.mousePosition;
    fingerPos.z = 10;
    fingerPos = Camera.main.ScreenToWorldPoint(fingerPos);

    transform.position = fingerPos;
    Debug.Log(transform.position);
}

实际上,经过审查,这并不完全正确。字符移动到屏幕上的特定位置,而不是我触摸的位置。 - Niana
你的问题是“我的精灵显然被投入到了未知的广阔世界中”。这是因为你正在使用 fingerPos = Input.mousePosition 将像素坐标分配给世界坐标。你必须像我在答案中所做的那样将其转换为世界坐标。这就是你代码的问题所在。“这并不完全正确”你甚至没有具体说明哪里出了问题。这应该解决你的精灵消失的问题。 - Programmer
无论我在屏幕上点击哪里,调试日志返回给我的坐标都是完全相同的。请查看我的代码编辑。 - Niana
精灵是否会移动到您在屏幕上单击的位置? - Programmer
问题出在你的相机模式上。我对其进行了修改,使其可以在正交和透视两种模式下工作。请检查编辑。 - Programmer
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接