Obsługa za pomocą myszy (wersja pakietu systemu wprowadzania)
Środowisko weryfikacji
- Windows
-
- Okna 11
- Edytor Unity
-
- 2020.3.25f1
- Pakiet systemu wejściowego
-
- 1.2.0
Wymagania wstępne dotyczące tej porady
Poniższe ustawienia zostały wcześniej wprowadzone jako przesłanka do opisu tej wskazówki.
Uzyskiwanie pozycji myszy
Pozycję myszy na ekranie gry można Mouse.position
uzyskać w formacie .
Tutaj chciałbym wyświetlić informacje o lokalizacji.
Umieszcza na kanwie obiekt tekstowy wyświetlający informacje o myszy.
Informacje o myszy są pobierane przez skrypty.
W takim przypadku utworzymy plik skryptu o nazwie w projekcie MouseInfo
.
Wprowadź skrypt w następujący sposób:
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
Możesz uzyskać informacje o aktualnie aktywnej myszy.
Mouse.position
ma bieżące położenie myszy w , dzięki czemu ReadValue
można uzyskać wartość w formularzu za Vector2
pomocą Vector2Control
metody.
Uzyskana pozycja myszy jest ustawiana na obiekt tekstowy.
StringBuilder
Nie przejmuj się zbytnio używaniem , ponieważ jest to dodawanie później.
Po EventSystem
zapisaniu skryptu dołącz go do obiektu.
Obiekt tekstowy jest ustawiony na obiekt tekstowy, o którym mają być wyświetlane informacje.
Spróbuj uruchomić grę i poruszyć myszą. Myślę, że pozycja myszy pojawi się na ekranie w czasie rzeczywistym.
Nawiasem mówiąc, współrzędne pozycji myszy znajdują się (0, 0) w lewym dolnym rogu ekranu gry. Oś X (lewa i prawa) staje się dodatnia, gdy idziesz w prawo, i ujemna, gdy idziesz w lewo. Oś Y (w górę iw dół) staje się dodatnia, gdy idziesz w górę i ujemna, gdy idziesz w dół. Dlatego maksymalna wartość każdej osi znajduje się w prawym górnym rogu ekranu gry.
Należy również pamiętać, że ta współrzędna dotyczy tylko przestrzeni ekranu gry, więc rozmiar pikseli w grze i rozmiar pikseli współrzędnych ekranu urządzenia mogą się nie zgadzać.
Uzyskiwanie ilości przewijania koła
Przewijanie za pomocą kółka myszy można również pobrać w skrypcie.
Przewijaną ilość Mouse.scroll
można uzyskać za pomocą .
W przeciwieństwie do pozycji myszy, możesz tylko natychmiast przewinąć kwotę.
Pamiętaj, że nie możesz sprawdzić odległości przewijania.
Dodam go do operacji przewijania, którą utworzyłem MouseInfo
wcześniej.
// 省略
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
nie trzyma kwoty przewijanej do tej pory, więc
Zdefiniuj dedykowane pole ScrollValue
, w którym będzie przechowywana przewijana ilość.
Mouse.scroll
Następnie możesz uzyskać zwojoną kwotę w tym momencie, więc zgromadzimy tę wartość.
Na przykład, jeśli ScrollValue
przewiniesz kółko dwukrotnie, liczba przewijanych dwukrotnie zostanie zachowana.
Reszta to wyświetlenie tej wartości jako tekstu.
Teraz uruchom grę i zakręć kołem. Myślę, że zobaczysz ilość przewijania.
Mouse.scroll
Vector2
ma wartość , ale jeśli jest to pionowe kółko przewijania, myślę, że tylko wartość Y zostanie ustawiona.
Nawiasem mówiąc, jeśli przewiniesz w dół, wartość wzrośnie iw dół w jednostkach 120. Jest to wartość zdefiniowana przez system Windows, więc liczba może się zmieniać w zależności od innych środowisk i typów myszy.
Określanie, kiedy przycisk myszy został kliknięty
Tutaj chciałbym przenieść próbkę, która wyświetla tekst w miejscu, w którym kliknięto lewym przyciskiem myszy.
Czas kliknięcia może być określony przez właściwości w taki sam sposób, wasPressedThisFrame
jak klawiatury.
Najpierw umieść obiekt tekstowy do przeniesienia. Rozmiar i pozycja są odpowiednie.
Utwórz skrypt dla procesu klikania. MouseButtonClick
Pozostaw nazwę jako .
Skrypt wygląda tak:
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;
}
}
}
Wykonuję proces przesuwania obiektu tekstowego do klikniętej pozycji. Lokalne położenie obiektu interfejsu użytkownika jest współrzędną obszaru roboczego, więc różni się od położenia myszy, które jest współrzędną ekranu.
Ponieważ początek płótna (0, 0) znajduje się w środku, użyj go,RectTransform.sizeDelta
aby uzyskać połowę rozmiaru płótna.
Początek współrzędnych myszy jest przesunięty do środka.
Możesz określić, czy mouse.xxxxxxxx.wasPressedThisFrame
kliknąłeś, i zwrócić tylko true
w momencie kliknięcia.
Jeśli klikniesz i przytrzymasz przycisk, będzie on kontynuowany, dopóki nie klikniesz false
go ponownie.
Po EventSystem
zapisaniu skryptu dołącz go do programu . Tym razem również użyjemy Canvas, więc ustaw Canvas i obiekt tekstowy.
Spróbuj uruchomić grę i sprawdź, czy obiekt tekstowy zostanie przeniesiony do klikniętej lokalizacji. Ponieważ obiekt tekstowy przetwarza tylko moment kliknięcia, nie porusza się, nawet jeśli poruszysz myszą podczas klikania.
Określanie, kiedy zwalniasz przycisk myszy
Chociaż nie jest wymieniony jako przykład, można określić czas wydania, wasPressedThisFrame
używając zamiast wasReleasedThisFrame
.
Sędzia po kliknięciu przycisku
mouse.xxxxxxxx.isPressed
, aby kontynuować powrót, dopóki true
klikniesz przycisk.
Tutaj chciałbym obrócić tekst, naciskając prawy przycisk.
Skrypt zostanie przekierowany z skryptu po kliknięciu lewym przyciskiem myszy. Zmodyfikuj go w następujący sposób:
// 省略
public class MouseButtonClick : MonoBehaviour
{
// 省略
// 更新はフレームごとに1回呼び出されます
void Update()
{
// 省略
// 右ボタンを押している間はオブジェクトを回転させる
if (mouse.rightButton.isPressed)
{
transform.Rotate(0, 0, 1);
}
}
}
Po zapisaniu skryptu uruchom go, aby go sprawdzić. Obiekt będzie się obracał tak długo, jak długo zostanie naciśnięty prawy przycisk.