Почему объект не обнаруживается physics2d raycast в unity?

Я делаю 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://www.youtube.com/watch?v=8x6TSBfBIzc

Весь код скрипта: https://drive.google.com/open?id=1QKRInr26acu-E4zXPUf-DbW0h9zbsnUr

Как решить эту проблему с ожиданием? Почему не подключается сразу?

Физические операции не рекомендуются в методе обновления (в частности, в каждом кадре без условий, как в вашем коде), а в методе FixedUpdate. Это может (но вряд ли) объяснить задержку.

Kamalen 10.08.2018 15:45

Не помогает ;(

John Smith 10.08.2018 15:48

Я обнаружил, что происходит, В обновлении консоли: когда я нажимаю точку>, к точке (0) добавляется 1, и если я держу кнопку нажатой, точка (1) добавляется случайным образом (+7 ... +15) , первый щелчок - объяснение задержки.

John Smith 10.08.2018 15:55

Обнаружил ошибку, оказывается отключил в другом скрипте на 0,5 коллайдера объекта, извините

John Smith 10.08.2018 16:40
0
4
280
0

Другие вопросы по теме