Я работаю над простым проектом, следуя этому уроку , и одна из первых вещей, которые мне нужны, это заставить игрока указывать на положение мыши.
Для этого я написал этот код, следуя инструкции:
private void Update()
{
Vector3 input = Input.mousePosition;
Vector3 mousePosition = camera.ScreenToWorldPoint(new Vector3(input.x, input.y, camera.transform.position.y));
transform.LookAt(mousePosition + Vector3.up * transform.position.y);
}
Вот проблема: это работает, но я не совсем понимаю , почему это работает. Я прочитал документацию по ScreenToWorldPoint
и все еще немного не уверен.
У меня двоякий вопрос:
Почему я использую camera.transform.position.y
для z
компонента вектора, который я передаю ScreenToWorldPoint
?
Почему добавление Vector3.up * transform.position.y
работает? Без этого, если мышь находится слишком близко к игроку, она будет вращать тело и заставлять его двигаться. При этом игрок строго вращается только в плоскости xz.
Редактировать: Вот демонстрация вращения, чтобы показать, что он работает.