2015-04-27 5 views
0

Я хочу получить позицию щелчка мыши из центра игрового объекта, скажем, сферу шкалы (1, 1, 1). Если я щелкнул по центру сферы, он должен вернуть х-компонент как ноль, щелкнув на крайнем левом краю сферы, он должен вернуться -0.5 в качестве x-составляющей вектора 3 и 0.5 при нажатии на крайний правый край сферы , Ниже код помогает мне достичь этого, когда в начале. Однако для этого есть одно ограничение. Сфера должна располагаться в (0, что угодно, что угодно) (поскольку меня интересует ось x). Любая помощь в том, как я могу достичь этого, независимо от позиции Sphere?Единство - Получите локальную позицию мыши из центра Gameobject, нажав на

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; 
       } 
      } 
     } 
    } 
} 

ответ

0

Ваш код в порядке для этого. Если вам нужна позиция объекта, нужно добавить значение transform.localposition к вашей точкеX.

pointX = transform.localPosition.x + transform.InverseTransformPoint(hit.point).x; 
+0

Мой код не подходит для разного положения сферы. Он работает только тогда, когда сфера находится в начале координат или если значение оси x равно 0. Однако она дает неправильные значения, когда положение оси x сферы отличное от 0. – gameOne

1

Вы используете перспективную камеру или ортографическую? Если вы используете перспективу, и вы перемещаете свой игровой объект вправо, вы не можете нажать на 0,5 правой стороны. Потому что это ваша видимая часть шара. Только это можно сделать с помощью камеры orto

+0

Это имеет смысл. Я использовал камеру Perspective. Как я могу заставить его работать в перспективе? Есть идеи! – gameOne

+0

Хотя это не решило мою проблему .. Это помогло мне решить эту проблему. Вращение связано с переменным результатом, который я получал. – gameOne

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()); 
       } 
      } 
     } 
    } 
}