В настоящее время я использую входы мыши для перемещения игрока (сферы) в трехмерном мире. Я делаю это с помощью 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).
hit.point.y
, вероятно, не возвращает нужное вам значение, потому что raycast попадает в объект игрока. Вы должны использовать маску слоя, чтобы исключить объект игрока из raycast мыши. - person Draco18s no longer trusts SE   schedule 27.12.2017