Muzzle Flash включается, но не выключается оператором else? - PullRequest
0 голосов
/ 10 сентября 2018

так что это работает

if (Input.GetMouseButtonDown(0))
{
    _muzzleflash.SetActive(true);
    Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
    RaycastHit Hitinfo;
    // cast ray
    if (Physics.Raycast(rayOrigin, out Hitinfo))
    {            
        Debug.Log("hit" + Hitinfo.transform.name);
    }
}

а это не работает?

if (Input.GetMouseButtonDown(0))
{
    _muzzleflash.SetActive(true);
    Ray rayOrigin = Camera.main.ViewportPointToRay(new Vector3(0.5f, 0.5f, 0f));
    RaycastHit Hitinfo;
    // cast ray
    if (Physics.Raycast(rayOrigin, out Hitinfo))
    {            
        Debug.Log("hit" + Hitinfo.transform.name);
    }
}
else
{
    _muzzleflash.SetActive(false);
}

почему это?

Мой мыслительный процесс был GetMouseButtonDown(0), он работал бы, когда его нажимали, затем вызывали мой _muzzleflash игровой объект.

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

Итак, нажатие вниз вызывает этот объект в первом примере. Но разве освобождение не удаляет объект, но объект даже не отображается при нажатии мыши?

Является ли этот объект, но освобождение не удаляет объект?

Кстати, это мой проект единства.

image screenshot

Ответы [ 3 ]

0 голосов
/ 10 сентября 2018

Что происходит, так это то, что дульная вспышка активна только в течение одного кадра, когда GetMouseButtonDown возвращает true, а затем она устанавливается в false с помощью оператора else.

Я бы фактически предложил, возможно, пропустить оператор else и вместо этого добавить логику, в которой muzzleflash отключается после того, как он активен, может быть, в течение 100 мс или как бы быстро он ни длился.

0 голосов
/ 11 сентября 2018

Вы можете использовать input.getmousebuttonup (), чтобы разделить false ... Другое мудрое использование invoke метод для setactive false

0 голосов
/ 10 сентября 2018

Проблема в том, что вы используете GetMouseButtonDown вместо GetMouseButton

Согласно документу GetMouseButtonDown , функция

Возвращает true в течение кадра, когда пользователь нажал указанную кнопку мыши.

В то время как документ GetMouseButton говорит, что функция

Возвращает, удерживается ли нажатой указанная кнопка мыши.

Это означает, что в вашем коде, если вызывается только один кадр, то через несколько миллисекунд вы находитесь в новом кадре. Поскольку в новом кадре кнопка мыши не была нажата (она все еще удерживается, но момент, когда она была нажата, уже пройдена), вместо этого вызывается оператор else, который останавливает все.

Чтобы иметь желаемое поведение (функция должна оставаться истинной, когда мышь удерживается нажатой), используйте GetMouseButton

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