Привет! Дебютирую со своим вопросом и прошу разъяснить знающих принцип поведения объекта в моем кейсе.
И так - воплощаю прототип из книги "Unity and C#. Геймдев от идеи до реализации" под названием Mission Demolition (игра по типу Angry Birds).
Опишу суть:
- Мне необходимо, чтобы при наведении мыши в зону "пуска снаряда" и нажатии мыши появлялся снаряд и перемещался за мышью (так будет регулироваться направление и сила выстрела).
- Перемещение снаряда должно ограничиваться радиусов коллайдера зоны пуска
В процессе изучения столкнулся с непониманием...
Есть код:
private void Update()
{
Vector3 mouse2D = Input.mousePosition;
mouse2D.z = -Camera.main.transform.position.z;
Vector3 mouse3D = Camera.main.ScreenToWorldPoint(mouse2D); //чекаем координаты
//мыши
mouse3D -= lounchPos; //корень моей головной боли !!!
float maxMagnitude = GetComponent<SphereCollider>().radius;
//ограничиваем перемещение в радиусе "зоны пуска" lounchPoint
if (mouse3D.magnitude > maxMagnitude)
{
mouse3D.Normalize();
mouse3D *= maxMagnitude;
}
projectile.transform.position = projPos; //переменная чтоб дебаг проще делать
projPos = mouse3D + lounchPos; //перемещаем объект в новую точку
}
private void OnMouseDown()
{
projectile = Instantiate<GameObject>(projectile);
projectile.transform.position = lounchPos;
}
Весь код выше, взят из книги и мной осознан вдоль и поперек, кроме строки
mouse3D -= lounchPos;
Решив писать самостоятельно, я просто определял позицию мыши, ограничивал вектор мыши радиусом коллайдера и перемещал туда объект.
НО, в этом случае объект перемещался только на половину сферы коллайдера. На картинке зеленым отмечена полусфера где объект мог перемещаться за мышкой, а красным отмечена зоны куда объект за мышью уже не следовал.
Если же я добавлял в код
mouse3D -= lounchPos;
то объект вел себя так как нужно.
Я пытаюсь осознать все части кода из книги, чтобы мочь спокойно решать другие задачи похожего формата в будущем (в общем, хочется именно научиться, а не просто копипастить). Я прочел, что вычитание позиции пуска из точки мыши дает мне направление вектора перемещения между мышью и точкой пуска и дает мне расстояние между этими точками. Но вот ОСОЗНАТЬ как/зачем это происходит сил мне не хватает. Повтор линейной алгебры только запутал сильнее, потому что по правилу параллелограмма при вычитании
mouse3D-lounnchPos
получается вектор вообще другого направления и почему это вычитание работает в коде мне не ясно.
За любые ресурсы или простые разъяснения буду крайне признателен. 3 дня самопыток пока не увенчались успехом. Спасибо!