OnMouseDown
вызывается только в том случае, если указатель находится над коллайдером, а GetMouseButtonUp
вызывается глобально независимо от коллайдера.Это означает, что вы можете вызвать LaunchBall()
с неправильными координатами, потому что startpos
может быть установлен неправильно.
Просто подозрение, но у вас может даже не быть коллайдера и OnMouseDown
, вызываемых вообще, но начинающихся с 0,0,0
это значение по умолчанию для startpos
, если оно не установлено на другое значение.
Так что вам кажется, что вам всегда приходилось начинать считывание с первого startpose
, но startpose
может на самом деленикогда не меняются вообще.
Чтобы избежать этого, я бы использовал простой флаг isLaunching
.
Кроме того, я бы не стал использовать Update
, а скорее OnMouseUp
.В отличие от OnMouseDown
, OnMouseUp
вызывается, даже если мышь не находится над коллайдером, поэтому в основном она делает то же самое, но без повторного запуска метода Update
.
bool isLaunching;
// instead of your Update
void OnMouseUp()
{
// makes sure you can only launch after updating startpos
if(!isLaunching) return;
endpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
LaunchBall();
isLaunching = false;
}
void OnMouseDown()
{
startpos = Camera.main.ScreenToWorldPoint(Input.mousePosition);
isLaunching = true;
}
Если сейчас ничего не происходит, чемвы знаете, что OnMouseDown
вообще не вызывается, и вам может не хватать коллайдера.