Unity OnMouseUp и OnCollisionEnter одновременно - PullRequest
0 голосов
/ 18 мая 2018

У меня есть void OnCollisionEnter(Collision other) и void OnMouseUp(), но я хочу, чтобы это было так, чтобы, если я отпущу свою мышь, тогда была проверена коллизия.Поэтому я хотел бы, чтобы функция была в другой функции.

void OnMouseUp()
{
    void OnCollisionEnter(Collision other)
    {

    }
}

Конечно, это невозможно, поэтому как мне это сделать еще?

Ответы [ 4 ]

0 голосов
/ 18 мая 2018

OnCollisionEnter и OnMouseUp вызываются один раз в кадре и никогда больше, пока вы не повторите событие или не произойдет коллизия.Вам нужен логический флаг, чтобы гарантировать, что вы не пропустите ни OnMouseUp, ни OnCollisionEnter, потому что это происходит очень быстро.

bool collided = false;

void OnMouseUp()
{
    if (collided)
    {
        Debug.Log("Collding while mouse is up");
    }
}

void OnCollisionEnter(Collision other)
{
    collided = true;
}

void OnCollisionExit(Collision collision)
{
    collided = false;
}

Или даже без OnMouseUp

bool collided = false;

void Update()
{
    if ((Input.GetMouseButton(0)) && collided)
    {
        Debug.Log("Collding while mouse is up");
    }
}

void OnCollisionEnter(Collision other)
{
    collided = true;
}

void OnCollisionExit(Collision collision)
{
    collided = false;
}
0 голосов
/ 18 мая 2018

Используйте отдельный дочерний объект для вашего коллайдера и включите, а затем отключите этот объект в обработчике событий OnMouseUp.

0 голосов
/ 18 мая 2018
bool mouseReleased = false;
void OnMouseDown() => mouseReleased = false;
void OnMouseUp() => mouseReleased = true;
void OnCollisionEnter()
{
    if(mouseReleased)
    {
        mouseReleased = false;
        // Do something
    }
}
0 голосов
/ 18 мая 2018

Ваша формулировка немного двусмысленна.Когда вы говорите «отпустите мою мышь», я предполагаю, что вы имеете в виду «больше не удерживать левую кнопку», если это не так, дайте мне знать.

Все, что вам нужно сделать, в OnCollisionStay() просто проверить, еслиКнопка мыши не удерживается нажатой

void OnCollisionStay(Collision other)
{
    //check if left mouse is not being held down
    if(!Input.GetMouseButton(0))
    {
        //write your collision code here
    }
}

РЕДАКТИРОВАТЬ: изменено так, что она работает не только с первым кадром при столкновении / отпускании мыши.

Мне больше нравится @ ответ программиста,и вообще я бы использовал этот метод для столкновений, но я оставлю это на всякий случай, если кто-нибудь найдет его полезным когда-нибудь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...