如何根据鼠标位置正确定位GameObject?

时间:2014-08-08 18:02:28

标签: c# unity3d mouse

我根据鼠标位置点击它时会移动一个GameObject,但它在游戏中的位置与真实屏幕中的位置不同。

需要考虑的事项:

  • 我的屏幕是1920x1080(因此在游戏中,它的尺寸为540的Ortographic相机,是2D)

  • 屏幕最终可移动区域的矩形更可能是屏幕尺寸的四分之一。

这是我的代码:

if (dragging) {
    Vector3 mousePosition = Input.mousePosition;
    float x = mousePosition.x/2>width/2?width/2-mousePosition.x/2:mousePosition.x/2;
    float y = mousePosition.y/2>height/2?height/2-mousePosition.y/2:mousePosition.y/2;
    sendoCarregado.transform.position= new Vector2(x,y);
}

2 个答案:

答案 0 :(得分:0)

以下代码来自自定义编辑器窗口,但我相信这个想法很明确。

var mousePos = new Vector3(
   Event.current.mousePosition.x, 
   Camera.current.pixelHeight-Event.current.mousePosition.y,
   0 
);

var worldPos = Camera.current.ScreenToWorldPoint( mousePos );

答案 1 :(得分:0)

我不知道你是否可以使用它,但这是我用于通过光线投射运行脚本来移动我的对象所遵循的航路点的东西..你可以使用ScreenToWorldPoint在游戏中找到鼠标的点毒药

void Shot()
{
        tid = coolDowntime;
        Debug.Log (Input.mousePosition);
        Vector2 Hitpoint = Input.mousePosition;

        Vector3 vec  = myCamera.ScreenToWorldPoint(Hitpoint);
        Vector3 dir = myCamera.transform.TransformDirection (Vector3.forward);

        Debug.Log ("fire");
        vec = myCamera.ScreenToWorldPoint(Hitpoint);
        Hitpoint = Input.mousePosition;
        myCamera.transform.TransformDirection (Vector3.forward);
        Debug.DrawRay(vec, dir * 1000000, Color.blue);
        audio.Play ();
    if(Physics.Raycast(vec, dir, out hit, 100000))
    {

        Debug.Log("Try to hit somthing");
        if (hit.collider.gameObject.tag == "Target")

        {
                myCamera.audio.Play ();
            Debug.Log("Ramt målet");
                hit.collider.SendMessageUpwards("GotHit", SendMessageOptions.DontRequireReceiver);
        }

    }
}