Есть ли код C # в единстве, чтобы определить, когда кнопка нажата и когда она отпущена? - PullRequest
1 голос
/ 29 мая 2019

В настоящее время я пытаюсь настроить код на C #, который определяет, когда нажимается определенная кнопка и когда она отпускается

Я пытаюсь уменьшить эту определенную кнопку при нажатии и увеличить при отпускании

public class clickshake : MonoBehaviour
{
    public GameObject click;
    public void Update()
    {    
        if (Input.GetMouseButtonDown(0))
        {
           transform.localScale += new Vector3(-0.1F, -0.1f, 0);
        }
        if (Input.GetMouseButtonUp(0))
        {
           transform.localScale += new Vector3(0.1F, 0.1f, 0);
        }
    }
}

, сделав этот скрипт эксклюзивным для кнопки в команде «При нажатии» он только увеличивал размер кнопки и не уменьшал ее

Ответы [ 2 ]

3 голосов
/ 29 мая 2019

делает этот скрипт эксклюзивным для кнопки в команде On Click

это имеет мало смысла. Тем более что метод Update вызывается все время каждый кадр. Таким образом, вызов этого параметра из onClick вызовет его дважды в этом кадре. Также от Button.onClick

Обратите внимание, что EventType.MouseDown и EventType.MouseUp вызываются до onClick.


Вы можете, например, используйте интерфейсы IPointerDownHandler и IPointerUpHandler для реализации этого

public class clickshake : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
{
    //Detect current clicks on the GameObject (the one with the script attached)
    public void OnPointerDown(PointerEventData pointerEventData)
    {
        transform.localScale -= new Vector3(0.1F, 0.1f, 0);
    }

    //Detect if clicks are no longer registering
    public void OnPointerUp(PointerEventData pointerEventData)
    {
        transform.localScale += new Vector3(0.1F, 0.1f, 0);
    }
}

Примечание

Убедитесь, что в сцене есть EventSystem, чтобы разрешить обнаружение щелчков. Для обнаружения щелчков на не-UI GameObjects убедитесь, что PhysicsRaycaster подключен к камере.

и объекты, не относящиеся к пользовательскому интерфейсу, также нуждаются в Collider.

1 голос
/ 29 мая 2019

Input.GetMouseButtonDown(0) срабатывает, когда кнопка нажата , так как вы вызываете ее, когда кнопка уже нажата, она не срабатывает.

Ввод.GetMouseButtonDown

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

https://docs.unity3d.com/ScriptReference/Input.GetMouseButtonDown.html

попытаться использовать Input.GetMouseButton(0) вместо.

Или позвоните в другое место, чем в OnClick().

Но учтите, что Input.GetMouseButton(0) в цикле сработает несколько раз, так как обнаруживает, когда кнопка удерживается нажатой.

РЕДАКТИРОВАТЬ Под триггером я имею в виду, что он возвращает True, поэтому он запускает ваш if

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