Operarea cu mouse-ul (versiunea pachetului sistemului de intrare)
Mediul de verificare
- Windows
-
- Ferestre 11
- Unity Editor
-
- 2020.3.25F1
- Pachet sistem de intrare
-
- 1.2.0
Cerințe preliminare pentru acest sfat
Următoarele setări au fost făcute în avans ca premisă pentru descrierea acestui sfat.
Obțineți poziția mouse-ului
Poziția mouse-ului pe ecranul jocului poate Mouse.position
fi obținută în .
Aici, aș dori să afișez informațiile despre locație.
Plasează un obiect text pe Planșa care afișează informații despre mouse.
Informațiile mouse-ului sunt preluate prin scriptare.
În acest caz, vom crea un fișier script numit în proiect MouseInfo
.
Introduceți scriptul după cum urmează:
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
Puteți obține informații despre mouse-ul activ în prezent.
Mouse.position
are poziția curentă a mouse-ului în , astfel încât ReadValue
să puteți obține valoarea din formular Vector2
utilizând Vector2Control
metoda.
Poziția dobândită a mouse-ului este setată la un obiect text.
StringBuilder
Nu vă faceți griji prea mult cu privire la utilizarea , deoarece este pentru adăugarea ulterioară.
După ce EventSystem
salvați scriptul, atașați-l la obiect.
Obiectul text este setat la un obiect text pentru a afișa informații despre.
Încercați să rulați jocul și să mutați mouse-ul. Cred că poziția mouse-ului va apărea pe ecran în timp real.
Apropo, coordonatele poziției mouse-ului sunt (0, 0) în colțul din stânga jos al ecranului de joc. Axa X (stânga și dreapta) devine pozitivă pe măsură ce mergeți spre dreapta și negativă pe măsură ce mergeți spre stânga. Axa Y (în sus și în jos) devine pozitivă pe măsură ce urci și negativă pe măsură ce cobori. Prin urmare, valoarea maximă a fiecărei axe se află în colțul din dreapta sus al ecranului de joc.
De asemenea, vă rugăm să rețineți că această coordonată este doar pentru spațiul ecranului jocului, astfel încât dimensiunea pixelilor din joc și dimensiunea pixelilor coordonatelor ecranului dispozitivului pot să nu se potrivească.
Obțineți cantitatea de derulare a roții
Defilarea cu rotița mouse-ului poate fi, de asemenea, preluată în script.
Suma Mouse.scroll
de derulare poate fi obținută cu .
Spre deosebire de poziția mouse-ului, puteți obține suma derulată instantaneu.
Rețineți că nu puteți ajunge cât de departe ați derulat.
Îl voi adăuga la operația de derulare pe care am creat-o MouseInfo
mai devreme.
// 省略
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
nu deține suma derulată până acum, deci
Definiți un câmp ScrollValue
dedicat pentru a reține suma de derulare.
Mouse.scroll
Apoi, puteți obține suma derulată în acel moment, așa că vom acumula acea valoare.
De exemplu, dacă ScrollValue
derulați roata de două ori, cantitatea derulată de două ori va fi reținută.
Restul este să afișați această valoare ca text.
Acum rulați jocul și rotiți roata. Cred că veți vedea cantitatea de derulare.
Mouse.scroll
Vector2
are o valoare de , dar dacă este o roată verticală numai cu derulare, cred că va fi setată doar valoarea lui Y.
Apropo, dacă derulați în jos, valoarea va crește și va scădea în 120 de unități. Aceasta este o valoare definită de Windows, astfel încât numărul se poate modifica în funcție de alte medii și tipuri de mouse.
Determinați când se face clic pe un buton al mouse-ului
Aici, aș dori să mut un eșantion care afișează text în poziția în care se face clic pe butonul stâng al mouse-ului.
Momentul clicului poate fi determinat de proprietăți în același mod ca wasPressedThisFrame
și tastele tastaturii.
Mai întâi, plasați un obiect text pentru mutare. Dimensiunea și poziția sunt adecvate.
Creați un script pentru procesul de clic. MouseButtonClick
Lăsați numele ca .
Scenariul arată astfel:
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;
}
}
}
Efectuez procesul de mutare a obiectului text în poziția pe care ați făcut clic. Poziția locală a obiectului UI este coordonata pânzei, deci este diferită de poziția mouse-ului, care este coordonata ecranului.
Deoarece originea pânzei (0, 0) este în centru,RectTransform.sizeDelta
utilizați pentru a obține jumătate din dimensiunea pânzei.
Originea coordonatelor mouse-ului este deplasată spre centru.
Puteți stabili dacă ați făcut clic sau nu mouse.xxxxxxxx.wasPressedThisFrame
și puteți returna numai true
momentul în care faceți clic.
Dacă faceți clic lung pe buton, acesta va continua să revină până când faceți false
clic din nou pe el.
După ce EventSystem
salvați scriptul, atașați-l la . De data aceasta, vom folosi și Canvas, așa că setați Canvas și obiectul text.
Încercați să rulați jocul și vedeți dacă obiectul text se mută în locația pe care ați făcut clic. Deoarece procesează doar în momentul în care se face clic, obiectul text nu se mișcă chiar dacă mutați mouse-ul în timp ce faceți clic.
Determinați când eliberați butonul mouse-ului
Deși nu este listat ca eșantion, wasPressedThisFrame
puteți determina momentul lansării utilizând în loc de wasReleasedThisFrame
.
Judecați în timp ce faceți clic pe buton
mouse.xxxxxxxx.isPressed
pentru a continua să reveniți atât timp cât true
faceți clic pe buton.
Aici, aș dori să rotesc textul în timp ce apăs butonul din dreapta.
Scriptul este deviat de la cel cu clic stânga. Modificați-l după cum urmează:
// 省略
public class MouseButtonClick : MonoBehaviour
{
// 省略
// 更新はフレームごとに1回呼び出されます
void Update()
{
// 省略
// 右ボタンを押している間はオブジェクトを回転させる
if (mouse.rightButton.isPressed)
{
transform.Rotate(0, 0, 1);
}
}
}
După salvarea scriptului, rulați-l pentru a-l verifica. Obiectul continuă să se rotească atâta timp cât este apăsat butonul din dreapta.