Unity: как центрировать мышь на 3D-плеере с помощью Vector3.MoveTowards()?

В настоящее время я использую входы мыши для перемещения игрока (сферы) в трехмерном мире. Я делаю это с помощью raycast и использую координаты hit.point. Именно так я хочу, чтобы моя игра работала, но это 3D-игра, поэтому всякий раз, когда я перемещаю игрока, используя координаты мыши, он не будет правильно выравниваться. Это связано с тем, что игрок трехмерный, а координаты мыши двухмерные.

Вот мой код:

public float speed;
public GameObject player;

private Ray ray;
private RaycastHit hit;
private Vector3 mousePos;

void Start ()
{

}

void FixedUpdate ()
{
    ray = Camera.main.ScreenPointToRay(Input.mousePosition);

    if(Physics.Raycast(ray, out hit))
    {
        mousePos = new Vector3(hit.point.x, /*Insert Code*/, hit.point.z);

        if(mousePos != player.transform.position)
        {
            player.transform.position = Vector3.MoveTowards(player.transform.position, mousePos, speed * Time.deltaTime); 
        }
    }
}

Мой вопрос таков:

Если у меня есть игрок на высоте 1,3f над землей, как я могу манипулировать Vector3.MoveTowards так, чтобы мышь находилась в центре игрока, не влияя на высоту игрока (1,3f)?

Я пытался использовать player.transform.position.y, но он поместил мышь прямо под игроком (значения x и z работали, а значение y - нет).

Я также попробовал hit.point.y, но он дал мне значения больше, чем рост игрока (1.3f).


person Bradley William Elko    schedule 26.12.2017    source источник
comment
Обычно вопросы по Unity лучше задавать на форуме Unity/Mono. Этот форум по-прежнему более популярен, чем форум MSDN, но не намного.   -  person Christopher    schedule 27.12.2017
comment
@ Кристофер Я обычно захожу сюда по вопросам о единстве. попробую и там.   -  person Bradley William Elko    schedule 27.12.2017
comment
hit.point.y, вероятно, не возвращает нужное вам значение, потому что raycast попадает в объект игрока. Вы должны использовать маску слоя, чтобы исключить объект игрока из raycast мыши.   -  person Draco18s no longer trusts SE    schedule 27.12.2017
comment
@ Draco18s, что такое маска слоя?   -  person Bradley William Elko    schedule 27.12.2017
comment
docs.unity3d.com/Manual/Layers.html   -  person Draco18s no longer trusts SE    schedule 27.12.2017


Ответы (1)


Возможно, это не лучший способ решить мою проблему, но на данный момент он решает ее. Я сделал плоскость со значением y 1.3f и провел ее через объект игрока. Затем я сделал объект невидимым. Теперь raycast будет попадать на этот объект, а не на землю.

person Bradley William Elko    schedule 28.12.2017