0

例如,我想从游戏对象的中心获取鼠标单击的位置,例如 Sphere of Scale(1, 1, 1)。如果我单击球体的中心,它应该将 x 分量返回为零,在单击球体的最左侧时,它应该返回 -0.5 作为 vector3 的 x 分量,在单击球体的最右侧时返回 0.5 . 下面的代码帮助我在起源时实现这一点。但是,它有一个限制条件。球体必须定位在(0,任何东西,任何东西)(因为我关心的是 x 轴)。无论球体位置如何,我如何才能实现这一目标的任何帮助?

bool isGameOver = false;
float pointX;

// Update is called once per frame
void Update () {
    if(!isGameOver){
        RaycastHit hit;
        if(Input.GetMouseButtonDown(0)){
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if(Physics.Raycast(ray, out hit)){
                if(hit.transform.tag =="Ball"){
                    pointX = transform.InverseTransformPoint(hit.point).x;
                }
            }
        }
    }
}
4

3 回答 3

1

您使用的是透视相机还是正交相机?如果您使用透视并将游戏对象向右移动,则无法击中右侧的 0,5。因为在你可见的球的部分后面。只有orto相机才能做到

于 2015-04-27T15:10:32.687 回答
0

使用此代码旋转您的游戏对象以寻找相机,您现在可以获得所需的正确 x 坐标。

void Update () {
    if(!isGameOver)
    {
        Vector3 offset =  transform.position - Camera.main.transform.position;
        transform.LookAt(transform.position + offset);
        RaycastHit hit;
        if(Input.GetMouseButtonUp(0)){
            Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            if(Physics.Raycast(ray, out hit)){
                if(hit.transform.tag =="Ball")
                {

                    pointX = hit.transform.InverseTransformPoint(hit.point);
                    Debug.Log ("X:" + pointX.ToString());
                }
            }
        }
    }
}
于 2015-04-28T07:09:21.563 回答
0

您的代码对此没问题。如果您需要对象位置,只需将 transform.localposition 添加到您的 pointX。

pointX = transform.localPosition.x + transform.InverseTransformPoint(hit.point).x;
于 2015-04-27T14:47:04.190 回答