Käyttö hiirellä (syöttöjärjestelmän paketin versio)

Sivu päivitetty :
Sivun luontipäivämäärä :

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.currentSaat 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.scrollVector2 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.