Működtetés az egérrel (Input System Package Version)
Ellenőrzési környezet
- Windows
-
- Windows 11 esetén
- Unity-szerkesztő
-
- 2020.3.25f1
- Bemeneti rendszercsomag
-
- 1.2.0
A tipp előfeltételei
A következő beállításokat előre elvégeztük a tipp leírásának előfeltételeként.
Az egér pozíciójának lekérése
Az egér helyzete a játék képernyőjén Mouse.position
a .
Itt szeretném megjeleníteni a helyinformációkat.
Olyan szöveges objektumot helyez el a vásznon, amely megjeleníti az egér adatait.
Az egér információit parancsfájlok segítségével olvassa be a rendszer.
Ebben az esetben létrehozunk egy szkriptfájlt, amelyet a projektben MouseInfo
hívunk .
Adja meg a szkriptet az alábbiak szerint:
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
Információt kaphat az éppen aktív egérről.
Mouse.position
az egér aktuális pozíciója -ban, így ReadValue
a Vector2Control
metódussal Vector2
megkaphatja az értéket az űrlapon.
A megszerzett egérpozíció szöveges objektumra van állítva.
StringBuilder
Ne aggódjon túl sokat a használata miatt, mivel ez a későbbi hozzáadáshoz szükséges.
A parancsfájl mentése után EventSystem
csatolja az objektumhoz.
A Szövegobjektum egy szöveges objektumra van beállítva, amelyről információkat szeretne megjeleníteni.
Próbálja meg futtatni a játékot és mozgatni az egeret. Azt hiszem, az egér pozíciója valós időben jelenik meg a képernyőn.
Egyébként az egér pozíciójának koordinátái (0, 0) a játék képernyőjének bal alsó sarkában. Az X tengely (bal és jobb) pozitívvá válik, amikor jobbra megy, és negatívvá, amikor balra megy. Az Y tengely (felfelé és lefelé) pozitívvá válik, amikor felfelé haladsz, és negatívvá, amikor lefelé haladsz. Ezért az egyes tengelyek maximális értéke a játékképernyő jobb felső sarkában található.
Kérjük, vegye figyelembe, hogy ez a koordináta csak a játék képernyőterületére vonatkozik, így előfordulhat, hogy a játékban lévő képpontméret és az eszköz képernyőkoordinátáinak képpontmérete nem egyezik.
Szerezd meg a görgetés mennyiségét
Az egérgörgővel való görgetés a szkriptben is lekérhető.
A görgetési összeg Mouse.scroll
a következővel érhető el: .
Az egér pozíciójával ellentétben csak azonnal görgetheti az összeget.
Ne feledje, hogy nem tudja elérni, hogy milyen messzire görgetett.
Hozzáadom a korábban létrehozott MouseInfo
görgetési művelethez.
// 省略
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
nem tartja az eddig görgetett összeget, így
Határozzon meg egy dedikált mezőt ScrollValue
a görgetési összeg tárolására.
Mouse.scroll
Ezután abban a pillanatban megkaphatja a görgetett összeget, így felhalmozzuk ezt az értéket.
Ha például ScrollValue
kétszer görgeti a kereket, a kétszer görgetett mennyiség megmarad.
A többi az, hogy ezt az értéket szövegként jelenítse meg.
Most futtassa a játékot, és forgassa meg a kereket. Azt hiszem, látni fogja a görgetés mennyiségét.
Mouse.scroll
Vector2
értéke , de ha csak függőleges görgethető kerék, akkor szerintem csak az Y értéke lesz beállítva.
Egyébként, ha lefelé görget, az érték 120 egységben felfelé és lefelé megy. Ezt az értéket a Windows határozza meg, így a szám más környezetektől és egértípusoktól függően változhat.
Annak meghatározása, hogy mikor kell kattintani egy egérgombbal
Itt szeretnék áthelyezni egy mintát, amely szöveget jelenít meg azon a helyen, ahol a bal egérgombbal kattintanak.
A kattintás időzítése ugyanúgy meghatározható a tulajdonságok alapján, mint wasPressedThisFrame
a billentyűzet billentyűi.
Először helyezzen el egy szöveges objektumot a mozgatáshoz. A méret és a pozíció megfelelő.
Hozzon létre egy szkriptet a kattintási folyamathoz. MouseButtonClick
Hagyja meg a nevet .
A szkript így néz ki:
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;
}
}
}
Végrehajtom a szövegobjektum kattintásos pozícióba mozgatásának folyamatát A felhasználói felület objektum helyi pozíciója a vászon koordinátája, így eltér az egér helyzetétől, amely a képernyő koordinátája.
Mivel a vászon eredete (0, 0) középen van,RectTransform.sizeDelta
használja a vászon méretének felét.
Az egér koordinátáinak origója a középpontba kerül.
Meghatározhatja, hogy kattintott-e vagy sem mouse.xxxxxxxx.wasPressedThisFrame
, és csak true
a kattintás pillanatában térhet vissza.
Ha rákattint és lenyomva tartja a gombot, az mindaddig visszatér, amíg újra rá nem false
kattint.
A szkript mentése után EventSystem
csatolja a . Ezúttal a Canvas-t is használni fogjuk, ezért állítsa be a Canvas-t és a szöveges objektumot.
Próbálja meg futtatni a játékot, és nézze meg, hogy a szöveges objektum a kattintott helyre kerül-e. Mivel csak a kattintás pillanatát dolgozza fel, a szövegobjektum akkor sem mozdul el, ha kattintás közben mozgatja az egeret.
Az egérgomb felengedési idejének meghatározása
Bár nem szerepel mintaként, wasPressedThisFrame
a helyett a használatával meghatározhatja a kiadás wasReleasedThisFrame
időzítését.
Ítélkezzen a gombra kattintás közben
mouse.xxxxxxxx.isPressed
gombra a visszatéréshez, amíg true
a gombra kattint.
Itt szeretném elforgatni a szöveget, miközben megnyomom a jobb gombot.
A szkript átirányításra kerül a bal egérgombbal. Módosítsa a következőképpen:
// 省略
public class MouseButtonClick : MonoBehaviour
{
// 省略
// 更新はフレームごとに1回呼び出されます
void Update()
{
// 省略
// 右ボタンを押している間はオブジェクトを回転させる
if (mouse.rightButton.isPressed)
{
transform.Rotate(0, 0, 1);
}
}
}
A szkript mentése után futtassa az ellenőrzéshez. Az objektum addig forog, amíg a jobb gombot megnyomja.