Utilisation de la souris (version du package du système d’entrée)

Page mise à jour :
Date de création de la page :

Environnement de vérification

Windows
  • Fenêtres 11
Éditeur Unity
  • 2020.3.25f1
Package système d’entrée
  • 1.2.0

Conditions préalables à cette astuce

Les paramètres suivants ont été définis à l’avance comme prémisse pour la description de cette astuce.

Obtenir la position de la souris

La position de la souris sur l’écran de jeu peut Mouse.position être obtenue dans . Ici, je voudrais afficher les informations de localisation.

Place un objet texte sur le canevas qui affiche les informations de la souris.

Les informations de la souris sont récupérées par script. Dans ce cas, nous allons créer un fichier de script appelé dans le projet MouseInfo .

Entrez le script comme suit :

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.currentVous pouvez obtenir des informations sur la souris actuellement active. Mouse.position a la position actuelle de la souris dans , de sorte que ReadValue vous pouvez obtenir la valeur dans le formulaire à l’aide Vector2 de la Vector2Control méthode.

La position acquise de la souris est définie sur un objet texte. StringBuilder Ne vous inquiétez pas trop de l’utilisation de , car c’est pour ajouter plus tard.

Après EventSystem avoir enregistré le script, attachez-le à l’objet. L’objet texte est défini sur un objet texte sur lequel afficher des informations.

Essayez d’exécuter le jeu et de déplacer la souris. Je pense que la position de la souris apparaîtra à l’écran en temps réel.

Soit dit en passant, les coordonnées de la position de la souris sont (0, 0) dans le coin inférieur gauche de l’écran de jeu. L’axe X (gauche et droite) devient positif lorsque vous allez vers la droite et négatif lorsque vous allez vers la gauche. L’axe des Y (haut et bas) devient positif lorsque vous montez et négatif lorsque vous descendez. Par conséquent, la valeur maximale de chaque axe se trouve dans le coin supérieur droit de l’écran de jeu.

Veuillez également noter que cette coordonnée ne concerne que l’espace de l’écran de jeu, de sorte que la taille des pixels dans le jeu et la taille en pixels des coordonnées de l’écran de l’appareil peuvent ne pas correspondre.

Obtenir la quantité de défilement de la molette

Le défilement avec la molette de la souris peut également être récupéré dans le script. Le montant Mouse.scroll de défilement peut être obtenu avec . Contrairement à la position de la souris, vous ne pouvez faire défiler que la quantité instantanément. Notez que vous ne pouvez pas savoir jusqu’où vous avez fait défiler.

Je vais l’ajouter à l’opération de défilement que j’ai créée MouseInfo plus tôt.

// 省略

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 ne détient pas le montant défilé jusqu’à présent, donc Définissez un champ ScrollValue dédié pour contenir la quantité de défilement.

Mouse.scroll Ensuite, vous pouvez obtenir le montant défilé à ce moment-là, nous allons donc accumuler cette valeur. Par exemple, si ScrollValue vous faites défiler la molette deux fois, la quantité de défilement deux fois sera conservée.

Le reste consiste à afficher cette valeur sous forme de texte.

Maintenant, lancez le jeu et faites tourner la roue. Je pense que vous verrez la quantité de défilement.

Mouse.scrollVector2 a une valeur de , mais s’il s’agit d’une molette de défilement verticale, je pense que seule la valeur de Y sera définie.

Soit dit en passant, si vous faites défiler vers le bas, la valeur montera et descendra en 120 unités. Il s’agit d’une valeur définie par Windows, de sorte que le nombre peut changer en fonction d’autres environnements et types de souris.

Déterminer quand un bouton de la souris est cliqué

Ici, je voudrais déplacer un exemple qui affiche du texte à l’endroit où le bouton gauche de la souris est cliqué. Le moment du clic peut être déterminé par les propriétés de la même manière que wasPressedThisFrame les touches du clavier.

Tout d’abord, placez un objet texte à déplacer. La taille et la position sont appropriées.

Créez un script pour le processus de clic. MouseButtonClick Conservez le nom .

Le script ressemble à ceci :

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;
    }
  }
}

J’effectue le processus de déplacement de l’objet texte vers la position cliquée. La position locale de l’objet d’interface utilisateur est la coordonnée du canevas, elle est donc différente de la position de la souris, qui est la coordonnée de l’écran.

Puisque l’origine de la zone de dessin (0, 0) est au centre,RectTransform.sizeDelta utilisez pour obtenir la moitié de la taille de la zone de travail. L’origine des coordonnées de la souris est décalée vers le centre.

Vous pouvez déterminer si vous avez cliqué ou non mouse.xxxxxxxx.wasPressedThisFrame et ne renvoyer que true le moment où vous cliquez. Si vous cliquez et maintenez le bouton enfoncé, il continuera à revenir jusqu’à ce que vous false cliquiez à nouveau dessus.

Après EventSystem avoir enregistré le script, joignez-le à . Cette fois, nous utiliserons également Canvas, alors définissez le Canvas et l’objet texte.

Essayez d’exécuter le jeu et voyez si l’objet texte se déplace vers l’emplacement cliqué. Comme il ne traite que le moment où il est cliqué, l’objet texte ne se déplace pas même si vous déplacez la souris en cliquant.

Déterminer quand relâcher le bouton de la souris

Bien qu’il ne soit pas répertorié en tant qu’exemple, wasPressedThisFrame vous pouvez déterminer le moment de la libération en utilisant au lieu de wasReleasedThisFrame .

Jugez en cliquant sur le bouton

mouse.xxxxxxxx.isPressed pour continuer à revenir tant true que vous cliquez sur le bouton. Ici, je voudrais faire pivoter le texte tout en appuyant sur le bouton droit.

Le script est détourné du clic gauche. Modifiez-le comme suit :

// 省略

public class MouseButtonClick : MonoBehaviour
{
  // 省略

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

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

Après avoir enregistré le script, exécutez-le pour le vérifier. L’objet continue de tourner tant que vous appuyez sur le bouton droit.