鼠标输入和z轴

时间:2016-04-21 09:54:53

标签: c# unity3d

void OnMouseDrag() {
        float distance = transform.position.z - Camera.main.transform.position.z;
        Vector3 pos = Input.mousePosition;
        pos.z = distance;

        Vector3 mousePosition = new Vector3(pos.x, pos.y, pos.z);
        Vector3 objPosition = Camera.main.ScreenToWorldPoint(mousePosition);
        transform.position = objPosition;

    }

这是代码片段,帮助我在鼠标拖动时移动对象。它是鼠标在x轴上拖动时的移动对象,而z轴移动使用鼠标无法正常工作。我基本上想要使用鼠标输入在x和 z-Axis 上移动对象。 有什么问题h ow我可以从鼠标输入获得z位置,以便正确移动z轴上的对象

3 个答案:

答案 0 :(得分:0)

我建议在这里阅读Unity教程:

http://unity3d.com/learn/tutorials/projects/survival-shooter-project

它可能会给你一些关于如何用鼠标解决x / z平面运动问题的想法。

答案 1 :(得分:0)

当你将光线投射到你的物体时,它会被多次计算,所以它会在你没有移动时返回你的球位置,你可以试试这样的事情

void OnMouseDrag() {

    Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    Debug.DrawRay(ray.origin, ray.direction * 10, Color.yellow);
    Debug.Log(ray);

    RaycastHit hit;

    if (Physics.Raycast(ray, out hit, Camera.main.farClipPlane))
    {

        if (hit.transform.gameObject.name == "CameraElasticPoint")
        {
            return;
        }
        else{
            transform.position = new Vector3(hit.point.x,hit.transform.position.y+1, hit.point.z);
            hitPoint = Input.mousePosition;
        }

    }
}

它会做什么会忽略你的对象并且仅对你的地板或你试图拖动你的物体的任何其他表面的其他命中信息起作用,它将在X和Z轴上拖动你的对象取Y地板的位置,因此它将始终保持在地板的顶部或任何其他表面对撞机上 让我知道它是否有效 美好的一天

答案 2 :(得分:0)

不。 screenpointtoray在这里非常不必要,您只需要说pos.z等于pos.x ...即可。

像这样...

Vector3 pos = Camera.main.ScreenToViewportPoint(Input.mousePosition - dragOrigin);
        pos.z = pos.x;
        Vector3 move = new Vector3(0, pos.y * dragSpeed, pos.z * -dragSpeed);

总是快乐x