Unity - получить локальную позицию мыши из центра игрового объекта
Я хочу, чтобы позиция мыши была нажата в центре игрового объекта, например, "Сфера масштаба" (1, 1, 1). Если я щелкну по центру сферы, он должен вернуть компонент x как ноль, при щелчке в крайнем левом углу сферы он должен вернуть -0.5 как компонент x вектора3 и 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;
}
}
}
}
}
3 ответа
Вы используете перспективную камеру или ортографическую? Если вы используете перспективу и перемещаете игровой объект вправо, вы не можете попасть на 0,5 с правой стороны. Потому что вот ваша видимая часть шара. Только может сделать это с камерой Orto
Ваш код подходит для этого. Если вам нужна позиция объекта, нужно всего лишь добавить transform.localposition в ваш pointX.
pointX = transform.localPosition.x + transform.InverseTransformPoint(hit.point).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());
}
}
}
}
}