Käyttö hiirellä (syöttöjärjestelmän paketin versio)
Varmennusympäristö
- Windows
-
- Windows 11
- Unity-editori
-
- 2020.3.25F1
- Syöttöjärjestelmän paketti
-
- 1.2.0
Tämän vinkin edellytykset
Seuraavat asetukset on tehty etukäteen tämän vinkin kuvauksen lähtökohtana.
Hanki hiiren sijainti
Hiiren sijainti pelinäytöllä voidaan Mouse.position
saada kohdasta .
Tässä haluaisin näyttää sijaintitiedot.
Sijoittaa piirtoalueelle tekstiobjektin, joka näyttää hiiren tiedot.
Hiiren tiedot haetaan komentosarjoilla.
Tässä tapauksessa luomme komentosarjatiedoston nimeltä projekti MouseInfo
.
Kirjoita komentosarja seuraavasti:
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
Saat tietoja tällä hetkellä aktiivisesta hiirestä.
Mouse.position
on hiiren nykyinen sijainti kohdassa , joten ReadValue
saat lomakkeen Vector2
arvon käyttämällä menetelmää.Vector2Control
Hiiren hankittu sijainti asetetaan tekstiobjektiksi.
StringBuilder
Älä huolehdi liikaa , koska se on myöhempää lisäämistä varten.
Kun EventSystem
olet tallentanut komentosarjan, liitä se objektiin.
Tekstiobjekti on määritetty tekstiobjektiksi, jonka tietoja näytetään.
Yritä suorittaa peli ja liikuttaa hiirtä. Uskon, että hiiren sijainti näkyy näytöllä reaaliajassa.
Muuten, hiiren sijainnin koordinaatit ovat (0, 0) pelinäytön vasemmassa alakulmassa. X-akseli (vasen ja oikea) muuttuu positiiviseksi, kun siirryt oikealle, ja negatiiviseksi, kun siirryt vasemmalle. Y-akseli (ylös ja alas) muuttuu positiiviseksi, kun menet ylös, ja negatiiviseksi, kun menet alas. Siksi kunkin akselin enimmäisarvo on pelinäytön oikeassa yläkulmassa.
Huomaa myös, että tämä koordinaatti koskee vain pelin näyttötilaa, joten pelin pikselikoko ja laitteen näytön koordinaattien pikselikoko eivät välttämättä täsmää.
Hanki pyörän vierityksen määrä
Vieritys hiiren rullalla voidaan myös hakea komentosarjasta.
Vierityssumma Mouse.scroll
saadaan .
Toisin kuin hiiren sijainti, voit vierittää summaa vain välittömästi.
Huomaa, että et voi nähdä, kuinka pitkälle olet vierittänyt.
Lisään sen aiemmin luomaani MouseInfo
vieritystoimintoon.
// 省略
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 pidä vieritettyä summaa toistaiseksi, joten
Määritä erillinen kenttä ScrollValue
vieritettävälle summalle.
Mouse.scroll
Sitten voit saada vieritetyn summan sillä hetkellä, joten keräämme tämän arvon.
Jos ScrollValue
esimerkiksi vierität pyörää kahdesti, kahdesti vieritettyjen vieritysten määrä säilyy.
Loput on näyttää tämä arvo tekstinä.
Suorita nyt peli ja pyöritä pyörää. Luulen, että näet vierityksen määrän.
Mouse.scroll
Vector2
on arvo , mutta jos se on pystysuora vierityspyörä, luulen, että vain Y: n arvo asetetaan.
Muuten, jos vierität alaspäin, arvo nousee ja laskee 120 yksikössä. Tämä on Windowsin määrittämä arvo, joten luku voi muuttua muiden ympäristöjen ja hiirityyppien mukaan.
Määritä, milloin hiiren painiketta napsautetaan
Tässä haluaisin siirtää näytteen, joka näyttää tekstin kohdassa, jossa hiiren vasenta painiketta napsautetaan.
Napsautuksen ajoitus voidaan määrittää ominaisuuksien perusteella samalla tavalla kuin wasPressedThisFrame
näppäimistön näppäimet.
Aseta ensin tekstiobjekti siirtämistä varten. Koko ja sijainti ovat sopivat.
Luo komentosarja napsautusprosessia varten. MouseButtonClick
Jätä nimeksi .
Skripti näyttää tältä:
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;
}
}
}
Suoritan tekstiobjektin siirtämisen napsautettuun kohtaan. Käyttöliittymäobjektin paikallinen sijainti on kankaan koordinaatti, joten se eroaa hiiren sijainnista, joka on näytön koordinaatti.
Koska kankaan alkuperä (0, 0) on keskellä,RectTransform.sizeDelta
käytä saadaksesi puolet kankaan koosta.
Hiiren koordinaattien alkuperä siirtyy keskelle.
Voit määrittää, napsautitko vai et mouse.xxxxxxxx.wasPressedThisFrame
, ja palata vain true
heti, kun napsautat.
Jos napsautat ja pidät painiketta painettuna, se palaa edelleen, kunnes napsautat false
sitä uudelleen.
Kun EventSystem
olet tallentanut komentosarjan, liitä se . Tällä kertaa käytämme myös Canvasia, joten aseta Canvas ja tekstiobjekti.
Yritä suorittaa peli ja katso, siirtyykö tekstiobjekti napsautettuun sijaintiin. Koska se käsittelee vain sillä hetkellä, kun sitä napsautetaan, tekstiobjekti ei liiku, vaikka liikutat hiirtä napsauttamisen aikana.
Määritä, milloin vapautat hiiren painikkeen
Vaikka sitä ei ole lueteltu näytteenä, wasPressedThisFrame
voit määrittää vapautuksen ajoituksen käyttämällä wasReleasedThisFrame
.
Tuomari nappia klikkaamalla
mouse.xxxxxxxx.isPressed
jatkaaksesi paluuta niin kauan true
kuin napsautat painiketta.
Tässä haluaisin kiertää tekstiä painamalla oikeaa painiketta.
Komentosarja ohjataan hiiren vasemmalla painikkeella. Muokkaa sitä seuraavasti:
// 省略
public class MouseButtonClick : MonoBehaviour
{
// 省略
// 更新はフレームごとに1回呼び出されます
void Update()
{
// 省略
// 右ボタンを押している間はオブジェクトを回転させる
if (mouse.rightButton.isPressed)
{
transform.Rotate(0, 0, 1);
}
}
}
Kun olet tallentanut komentosarjan, tarkista se suorittamalla se. Objekti pyörii niin kauan kuin oikeaa painiketta painetaan.