Я делаю 2-ю игру в единстве, и мне нужна ваша помощь.
Пример .
Игра состоит в том, что случайным образом создается 9 цветных точек, как показано на картинке. Игрок должен соединить точки соответствующего цвета. Все это я сделал.
Проблема: Как только я нажимаю на одну точку и сразу перехожу к другой для подключения, она подключается не сразу, а примерно через 1 секунду. Если я нажимаю на одну точку и удерживаю около 1 секунды, а затем быстро перехожу к следующей точке, она соединяется.
То есть мне нужно дождаться либо первой точки, либо второй.
Как выясняется, все это из-за коллайдеров и Raycast. У него нет времени на проверку.
Пример моего кода (очень сокращенно):
Vector3 startPos;
Vector3 endPos;
Vector3 mousePos;
Vector2 mousePos2D;
RaycastHit2D hit;
void Update() {
mousePos = Camera.main.ScreenToWorldPoint (Input.mousePosition);
mousePos2D = new Vector2 (mousePos.x, mousePos.y);
hit = Physics2D.Raycast (mousePos2D, Vector2.zero);
// Here comes the creation of the first point and the connection
if (Input.GetMouseDown(0)) {
if (hit.collider != null) {
color = hit.collider.tag;
startPos = hit.collider.transform.position;
endPos = mousePos2D;
}
}
// Here comes the creation line between dots
if (Input.GetMouse(0)) {
if (hit.collider != null) {
if (hit.collider.tag == color) {
endPos = hit.collider.transform.position;
// Here is instantiated new line and with startPos and endPos and I set
startPos = endPos;
endPos = mousePos2D;
}
}
}
// Here points are deleted if connected
if (Input.GetMouseUp(0)) {
// Nothing important
}
}
Проблема в том, что: в «Input.GetMouseDown (0)», даже если мышь проходит через объект «hit.collider is equal null», и примерно через 1 секунду hit.collider не равен нулю и задает тег цвета.
Пример видео: https://thewikihow.com/video_8x6TSBfBIzc
Весь код скрипта: https://drive.google.com/open?id=1QKRInr26acu-E4zXPUf-DbW0h9zbsnUr
Как решить эту проблему с ожиданием? Почему не подключается сразу?
Не помогает ;(
Я обнаружил, что происходит, В обновлении консоли: когда я нажимаю точку>, к точке (0) добавляется 1, и если я держу кнопку нажатой, точка (1) добавляется случайным образом (+7 ... +15) , первый щелчок - объяснение задержки.
Обнаружил ошибку, оказывается отключил в другом скрипте на 0,5 коллайдера объекта, извините
Физические операции не рекомендуются в методе обновления (в частности, в каждом кадре без условий, как в вашем коде), а в методе FixedUpdate. Это может (но вряд ли) объяснить задержку.