Utilizzo del mouse (versione del pacchetto del sistema di input)

Pagina aggiornata :
Data di creazione della pagina :

Ambiente di verifica

Finestre
  • Windows 11
Unity Editor
  • 2020.3.25F1
Pacchetto del sistema di input
  • 1.2.0

Prerequisiti per questo suggerimento

Le seguenti impostazioni sono state effettuate in anticipo come premessa per la descrizione di questo suggerimento.

Ottieni la posizione del mouse

La posizione del mouse sullo schermo di gioco può Mouse.position essere ottenuta in . Qui, vorrei visualizzare le informazioni sulla posizione.

Inserisce un oggetto di testo nell'area di disegno che visualizza le informazioni del mouse.

Le informazioni sul mouse vengono recuperate tramite script. In questo caso, creeremo un file di script chiamato nel progetto MouseInfo .

Immettere lo script come segue:

using System.Text;              // 追加
using UnityEngine;
using UnityEngine.InputSystem;  // 追加
using UnityEngine.UI;           // 追加

public class MouseInfo : MonoBehaviour
{
  /// <summary>情報を表示するテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;

  private StringBuilder Builder = new StringBuilder();

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    if (TextObject == null)
    {
      Debug.Log($"{nameof(TextObject)} が null です。");
      TextObject.text = "";
      return;
    }

    var mouse = Mouse.current;
    if (mouse == null)
    {
      Debug.Log("マウスがありません。");
      TextObject.text = "";
      return;
    }

    Builder.Clear();

    // マウスの位置を取得する
    Builder.AppendLine($"Mouse.position={mouse.position.ReadValue()}");

    TextObject.text = Builder.ToString();
  }
}

Mouse.currentÈ possibile ottenere informazioni sul mouse attualmente attivo. Mouse.position ha la posizione corrente del mouse in , in modo da ReadValue poter ottenere il valore nel form Vector2 utilizzando il Vector2Control metodo.

La posizione del mouse acquisita è impostata su un oggetto di testo. StringBuilder Non preoccuparti troppo di usare , poiché è per aggiungere in seguito.

Dopo EventSystem aver salvato lo script, allegarlo all'oggetto. L'oggetto di testo è impostato su un oggetto di testo per visualizzare informazioni.

Prova a eseguire il gioco e a muovere il mouse. Penso che la posizione del mouse apparirà sullo schermo in tempo reale.

A proposito, le coordinate della posizione del mouse sono (0, 0) nell'angolo in basso a sinistra della schermata di gioco. L'asse X (sinistra e destra) diventa positivo quando si va a destra e negativo quando si va a sinistra. L'asse Y (su e giù) diventa positivo quando si sale e negativo quando si scende. Pertanto, il valore massimo di ciascun asse si trova nell'angolo in alto a destra della schermata di gioco.

Inoltre, tieni presente che questa coordinata è solo per lo spazio dello schermo di gioco, quindi la dimensione dei pixel nel gioco e la dimensione in pixel delle coordinate dello schermo del dispositivo potrebbero non corrispondere.

Ottieni la quantità di scorrimento della rotellina

Lo scorrimento con la rotellina del mouse può anche essere recuperato nello script. La quantità Mouse.scroll di scorrimento può essere ottenuta con . A differenza della posizione del mouse, è possibile ottenere solo l'importo fatto scorrere istantaneamente. Tieni presente che non puoi ottenere quanto hai fatto scorrere.

Lo aggiungerò all'operazione di scorrimento che ho creato MouseInfo in precedenza.

// 省略

public class MouseInfo : MonoBehaviour
{
  // 省略

  /// <summary>スクロールした量を保持する。</summary>
  private Vector2 ScrollValue = Vector2.zero;

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    // 省略

    // スクロール量を取得し保持する
    ScrollValue += mouse.scroll.ReadValue();

    Builder.Clear();

    // マウスの位置を取得する
    Builder.AppendLine($"Mouse.position={mouse.position.ReadValue()}");
    // スクロール量を表示
    Builder.AppendLine($"ScrollValue={ScrollValue}");

    TextObject.text = Builder.ToString();
  }
}

Mouse.current non contiene l'importo scorrevole fino a quel momento, quindi Definisci un campo ScrollValue dedicato per contenere la quantità di scorrimento.

Mouse.scroll Quindi, puoi ottenere l'importo scorrevole in quel momento, quindi accumuleremo quel valore. Ad esempio, se ScrollValue si scorre la rotellina due volte, la quantità di scorrimento due volte verrà mantenuta.

Il resto è visualizzare questo valore come testo.

Ora esegui il gioco e gira la ruota. Penso che vedrai la quantità di scorrimento.

Mouse.scrollVector2 ha un valore di , ma se si tratta di una rotellina a scorrimento verticale, penso che verrà impostato solo il valore di Y.

A proposito, se scorri verso il basso, il valore andrà su e giù in 120 unità. Si tratta di un valore definito da Windows, pertanto il numero può cambiare a seconda di altri ambienti e tipi di mouse.

Determinare quando si fa clic su un pulsante del mouse

Qui, vorrei spostare un esempio che visualizza il testo nella posizione in cui viene fatto clic con il pulsante sinistro del mouse. La tempistica del clic può essere determinata dalle proprietà allo stesso modo wasPressedThisFrame dei tasti della tastiera.

Innanzitutto, posiziona un oggetto di testo per spostarlo. Le dimensioni e la posizione sono appropriate.

Creare uno script per il processo di clic. MouseButtonClick Lasciare il nome come .

Lo script è simile al seguente:

using UnityEngine;
using UnityEngine.InputSystem;  // 追加
using UnityEngine.UI;           // 追加

public class MouseButtonClick : MonoBehaviour
{
  /// <summary>情報を表示するテキストオブジェクト。</summary>
  [SerializeField] private Text TextObject;
  [SerializeField] private Canvas CanvasObject;

  /// <summary>Canvas の RectTransform の参照です。</summary>
  private RectTransform CanvasRect;

  // 最初のフレーム更新の前に開始が呼び出されます
  void Start()
  {
    if (CanvasObject == null)
    {
      Debug.Log($"{nameof(CanvasObject)} が null です。");
      return;
    }

    // Canvas から RectTransform を取得しておきます。
    CanvasRect = CanvasObject.GetComponent<RectTransform>();
  }

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    if (TextObject == null)
    {
      Debug.Log($"{nameof(TextObject)} が null です。");
      return;
    }
    if (CanvasObject == null)
    {
      Debug.Log($"{nameof(CanvasObject)} が null です。");
      return;
    }

    var mouse = Mouse.current;
    if (mouse == null)
    {
      Debug.Log("マウスがありません。");
      return;
    }

    var transform = TextObject.transform;

    // マウスの位置を取得する
    var mousePosition = mouse.position.ReadValue();

    // マウスの位置を Canvas の座標に変換する
    var mouseOnCanvas = new Vector2(mousePosition.x - CanvasRect.sizeDelta.x / 2, mousePosition.y - CanvasRect.sizeDelta.y / 2);

    // 左ボタンがクリックしたタイミングか判定
    if (mouse.leftButton.wasPressedThisFrame)
    {
      transform.localPosition = mouseOnCanvas;
    }
  }
}

Eseguo il processo di spostamento dell'oggetto di testo nella posizione selezionata. La posizione locale dell'oggetto dell'interfaccia utente è la coordinata del canvas, pertanto è diversa dalla posizione del mouse, che è la coordinata dello schermo.

Poiché l'origine del canvas (0, 0) è al centro,RectTransform.sizeDelta usa per ottenere metà delle dimensioni del canvas. L'origine delle coordinate del mouse viene spostata al centro.

È possibile determinare se si è fatto clic o meno mouse.xxxxxxxx.wasPressedThisFrame e restituire solo true il momento in cui si fa clic. Se si fa clic e si tiene premuto il pulsante, continuerà a tornare finché non si false fa nuovamente clic su di esso.

Dopo EventSystem aver salvato lo script, allegarlo a . Questa volta, useremo anche Canvas, quindi imposta il Canvas e l'oggetto di testo.

Prova a eseguire il gioco e verifica se l'oggetto di testo si sposta nella posizione selezionata. Poiché elabora solo nel momento in cui viene fatto clic, l'oggetto di testo non si muove anche se si sposta il mouse durante il clic.

Determinare quando si rilascia il pulsante del mouse

Sebbene non sia elencato come esempio, wasPressedThisFrame è possibile determinare la tempistica del rilascio utilizzando anziché wasReleasedThisFrame .

Giudica mentre fai clic sul pulsante

mouse.xxxxxxxx.isPressed per continuare a tornare finché true si fa clic sul pulsante. Qui, vorrei ruotare il testo mentre si preme il pulsante destro.

Lo script viene deviato da quello del clic sinistro. Modificarlo come segue:

// 省略

public class MouseButtonClick : MonoBehaviour
{
  // 省略

  // 更新はフレームごとに1回呼び出されます
  void Update()
  {
    // 省略

    // 右ボタンを押している間はオブジェクトを回転させる
    if (mouse.rightButton.isPressed)
    {
      transform.Rotate(0, 0, 1);
    }
  }
}

Dopo aver salvato lo script, eseguirlo per controllarlo. L'oggetto continua a ruotare finché viene premuto il pulsante destro.