Utilisation de la souris (version du package du système d’entrée)
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.current
Vous 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.scroll
Vector2
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.