Töötamine hiirega (sisendsüsteemi paketi versioon)
Kontrollimise keskkond
- Windows
-
- Windows 11
- Ühtsuse toimetaja
-
- 2020.3.25f1
- Sisendsüsteemi pakett
-
- 1.2.0
Selle näpunäite eeltingimused
Selle vihje kirjeldamise eelduseks on eelnevalt tehtud järgmised sätted.
Hankige hiire asukoht
Hiire asukoha mänguekraanil saab Mouse.position
.
Siin tahaksin kuvada asukohateavet.
Paigutab tekstiobjekti lõuendile, kus kuvatakse hiireteave.
Hiireteave tuuakse skriptimise teel.
Sel juhul loome projektis MouseInfo
nimelise skriptifaili .
Sisestage skript järgmiselt:
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
Saate teavet praegu aktiivse hiire kohta.
Mouse.position
on hiire praegune asukoht , nii et ReadValue
saate meetodi abil Vector2Control
vormi väärtuseVector2
.
Omandatud hiire asukoht on seatud tekstiobjektile.
StringBuilder
Ärge muretsege liiga palju kasutamise pärast, kuna see on mõeldud hilisemaks lisamiseks.
Pärast EventSystem
skripti salvestamist lisage see objektile.
Tekstiobjekt on seatud tekstiobjektile, mille kohta teavet kuvada.
Proovige mängu käivitada ja hiirt liigutada. Ma arvan, et hiire asend ilmub ekraanile reaalajas.
Muide, hiire asukoha koordinaadid on (0, 0) mängu ekraani vasakus alanurgas. X-telg (vasak ja parem) muutub positiivseks, kui lähete paremale, ja negatiivseks, kui lähete vasakule. Y-telg (üles ja alla) muutub positiivseks, kui lähete üles, ja negatiivseks, kui lähete alla. Seetõttu on iga telje maksimaalne väärtus mängu ekraani paremas ülanurgas.
Samuti pange tähele, et see koordinaat on mõeldud ainult mängu ekraaniruumi jaoks, nii et mängu pikslite suurus ja seadme ekraani koordinaatide pikslite suurus ei pruugi ühtida.
Hankige ratta kerimise kogus
Hiirerattaga kerimist saab ka skriptist alla laadida.
Kerimissumma Mouse.scroll
saab .
Erinevalt hiire asendist saate summa kerida ainult kohe.
Pange tähele, et te ei saa teada, kui kaugele olete kerinud.
Lisan selle varem loodud MouseInfo
kerimisoperatsioonile.
// 省略
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
ei hoia siiani keritud summat, nii et
Määratlege kerimissumma hoidmiseks spetsiaalne väli ScrollValue
.
Mouse.scroll
Seejärel saate sel hetkel keritud summa, nii et me kogume selle väärtuse.
Näiteks kui ScrollValue
kerite ratast kaks korda, säilitatakse kaks korda keritud kogus.
Ülejäänud on selle väärtuse kuvamine tekstina.
Nüüd käivitage mäng ja keerutage ratast. Ma arvan, et näete kerimise hulka.
Mouse.scroll
Vector2
on väärtus , kuid kui see on vertikaalne ainult keritav ratas, siis ma arvan, et määratakse ainult Y väärtus.
Muide, kui kerite alla, läheb väärtus üles ja alla 120 ühikut. See on Windowsi määratletud väärtus, nii et arv võib muutuda sõltuvalt teistest keskkondadest ja hiiretüüpidest.
Hiirenupu klõpsamise määramine
Siin tahaksin liigutada näidist, mis kuvab teksti kohas, kus hiire vasakut nuppu klõpsatakse.
Klõpsamise ajastust saab määrata omaduste järgi samamoodi nagu wasPressedThisFrame
klaviatuuriklahve.
Esmalt asetage tekstiobjekt teisaldamiseks. Suurus ja asukoht on sobivad.
Looge klõpsamisprotsessi jaoks skript. MouseButtonClick
Jätke nimi nimeks .
Skript näeb välja selline:
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;
}
}
}
Teostan tekstiobjekti teisaldamise klõpsatud asukohta. Kasutajaliidese objekti kohalik asukoht on lõuendi koordinaat, seega erineb see hiire asendist, mis on ekraani koordinaat.
Kuna lõuendi päritolu (0, 0) on keskel,RectTransform.sizeDelta
kasutage poole lõuendi suuruse saamiseks.
Hiire koordinaatide päritolu nihutatakse keskele.
Saate määrata, kas klõpsasite või mitte mouse.xxxxxxxx.wasPressedThisFrame
, ja naasta ainult true
klõpsamise hetkel.
Kui klõpsate nuppu ja hoiate seda all, naaseb see seni, kuni klõpsate false
seda uuesti.
Pärast EventSystem
skripti salvestamist manustage see . Seekord kasutame ka lõuendit, nii et seadke lõuend ja tekstiobjekt.
Proovige mängu käivitada ja vaadake, kas tekstiobjekt liigub klõpsatud asukohta. Kuna see töötleb ainult klõpsamise hetke, ei liigu tekstiobjekt isegi siis, kui liigutate hiirt klõpsamise ajal.
Määrake hiirenupu vabastamise aeg
Kuigi seda pole näidisena loetletud, saate vabastamise ajastuse määrata, wasPressedThisFrame
kasutades selle asemel wasReleasedThisFrame
.
Kohtunik nupul klõpsates
mouse.xxxxxxxx.isPressed
et jätkata naasmist seni, kuni true
klõpsate nuppu.
Siin tahaksin teksti pöörata, vajutades samal ajal paremat nuppu.
Skript suunatakse vasakklõpsult kõrvale. Muutke seda järgmiselt:
// 省略
public class MouseButtonClick : MonoBehaviour
{
// 省略
// 更新はフレームごとに1回呼び出されます
void Update()
{
// 省略
// 右ボタンを押している間はオブジェクトを回転させる
if (mouse.rightButton.isPressed)
{
transform.Rotate(0, 0, 1);
}
}
}
Pärast skripti salvestamist käivitage see selle kontrollimiseks. Objekt jätkab pöörlemist seni, kuni vajutatakse paremat nuppu.