Darbojas ar peli (ievades sistēmas pakotnes versija)
Verifikācijas vide
- Windows
-
- Operētājsistēmā Windows 11
- Vienotības redaktors
-
- 2020.3.25f1
- Ievades sistēmas pakete
-
- 1.2.0
Priekšnoteikumi šim padomam
Tālāk norādītie iestatījumi ir veikti iepriekš kā priekšnoteikums šī padoma aprakstam.
Iegūt peles pozīciju
Peles pozīciju spēles ekrānā var Mouse.position
iegūt .
Šeit es vēlētos parādīt atrašanās vietas informāciju.
Novieto uz audekla teksta objektu, kas parāda peles informāciju.
Peles informācija tiek izgūta, izmantojot skriptus.
Šajā gadījumā mēs izveidosim skripta failu, ko sauc par projektu MouseInfo
.
Ievadiet skriptu šādi:
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
Jūs varat iegūt informāciju par pašlaik aktīvo peli.
Mouse.position
ir pašreizējā peles pozīcija , lai ReadValue
jūs varētu iegūt vērtību formāVector2
, izmantojot šo Vector2Control
metodi.
Iegūtā peles pozīcija ir iestatīta uz teksta objektu.
StringBuilder
Neuztraucieties pārāk daudz par lietošanu , jo tas ir paredzēts pievienošanai vēlāk.
Pēc EventSystem
skripta saglabāšanas pievienojiet to objektam.
Teksta objekts ir iestatīts uz teksta objektu, lai parādītu informāciju par.
Mēģiniet palaist spēli un pārvietot peli. Es domāju, ka peles pozīcija parādīsies ekrānā reāllaikā.
Starp citu, peles pozīcijas koordinātas ir (0, 0) spēles ekrāna apakšējā kreisajā stūrī. X ass (pa kreisi un pa labi) kļūst pozitīva, kad dodaties pa labi, un negatīva, kad dodaties pa kreisi. Y ass (uz augšu un uz leju) kļūst pozitīva, kad jūs ejat uz augšu, un negatīva, kad jūs ejat uz leju. Tāpēc katras ass maksimālā vērtība atrodas spēles ekrāna augšējā labajā stūrī.
Lūdzu, ņemiet vērā arī to, ka šī koordināta ir paredzēta tikai spēles ekrāna telpai, tāpēc pikseļu izmērs spēlē un ierīces ekrāna koordinātu pikseļu izmērs var nesakrist.
Iegūstiet riteņa ritināšanas daudzumu
Ritināšanu ar peles ritenīti var iegūt arī skriptā.
Ritināšanas summu Mouse.scroll
var iegūt ar .
Atšķirībā no peles pozīcijas, summu var ritināt tikai uzreiz.
Ņemiet vērā, ka jūs nevarat nokļūt, cik tālu esat ritinājis.
Es to pievienošu iepriekš izveidotajai MouseInfo
ritināšanas operācijai.
// 省略
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
netur līdz šim ritināto summu, tāpēc
Definējiet īpašu lauku ScrollValue
, kurā turēt ritināšanas summu.
Mouse.scroll
Pēc tam jūs varat saņemt ritināto summu tajā brīdī, tāpēc mēs uzkrāsim šo vērtību.
Piemēram, ja ScrollValue
ritiniet riteni divas reizes, divreiz ritinātā summa tiks saglabāta.
Pārējais ir parādīt šo vērtību kā tekstu.
Tagad palaidiet spēli un grieziet riteni. Es domāju, ka jūs redzēsiet ritināšanas apjomu.
Mouse.scroll
Vector2
ir vērtība , bet, ja tas ir tikai vertikāls ritināšanas ritenis, es domāju, ka tiks iestatīta tikai Y vērtība.
Starp citu, ja ritiniet uz leju, vērtība iet uz augšu un uz leju 120 vienībās. Šī ir Windows definēta vērtība, tāpēc skaitlis var mainīties atkarībā no citām vidēm un peles tipiem.
Nosakiet, kad tiek noklikšķināts uz peles pogas
Šeit es gribētu pārvietot paraugu, kas parāda tekstu pozīcijā, kur tiek noklikšķināts uz peles kreisās pogas.
Noklikšķināšanas laiku var noteikt pēc īpašībām tāpat kā wasPressedThisFrame
tastatūras taustiņus.
Vispirms novietojiet teksta objektu pārvietošanai. Izmērs un novietojums ir piemēroti.
Izveidojiet skriptu klikšķa procesam. MouseButtonClick
Atstājiet vārdu kā .
Skripts izskatās šādi:
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;
}
}
}
Es veicu teksta objekta pārvietošanas procesu uz noklikšķināto pozīciju. UI objekta vietējā pozīcija ir audekla koordināta, tāpēc tā atšķiras no peles pozīcijas, kas ir ekrāna koordināta.
Tā kā audekla izcelsme (0, 0) atrodas centrā, izmantojiet,RectTransform.sizeDelta
lai iegūtu pusi no audekla izmēra.
Peles koordinātu izcelsme tiek pārvietota uz centru.
Varat noteikt, vai mouse.xxxxxxxx.wasPressedThisFrame
noklikšķinājāt, un atgriezt tikai true
to brīdi, kad noklikšķinājāt.
Ja noklikšķināsit un turēsit pogu, tā turpinās atgriezties, līdz noklikšķināsit false
uz tās vēlreiz.
Pēc EventSystem
skripta saglabāšanas pievienojiet to . Šoreiz mēs izmantosim arī Canvas, tāpēc iestatiet audeklu un teksta objektu.
Mēģiniet palaist spēli un pārbaudiet, vai teksta objekts pārvietojas uz vietu, uz kuras noklikšķināts. Tā kā tas apstrādā tikai brīdi, kad uz tā tiek noklikšķināts, teksta objekts nepārvietojas pat tad, ja noklikšķinot pārvietojat peli.
Nosakiet, kad atlaižat peles pogu
Lai gan tas nav norādīts kā paraugs, izlaišanas laiku var noteikt, wasPressedThisFrame
izmantojot wasReleasedThisFrame
.
Tiesnesis, noklikšķinot uz pogas
mouse.xxxxxxxx.isPressed
lai turpinātu atgriezties, kamēr true
noklikšķināt uz pogas.
Šeit es vēlētos pagriezt tekstu, vienlaikus nospiežot labo pogu.
Skripts tiek novirzīts no kreisā klikšķa. Modificējiet to šādi:
// 省略
public class MouseButtonClick : MonoBehaviour
{
// 省略
// 更新はフレームごとに1回呼び出されます
void Update()
{
// 省略
// 右ボタンを押している間はオブジェクトを回転させる
if (mouse.rightButton.isPressed)
{
transform.Rotate(0, 0, 1);
}
}
}
Pēc skripta saglabāšanas palaidiet to, lai to pārbaudītu. Objekts turpina griezties tik ilgi, kamēr tiek nospiesta labā poga.