Beroperasi dengan mouse (Versi Paket Sistem Input)
Lingkungan verifikasi
- Windows
-
- jendela 11
- Editor Kesatuan
-
- 25f1/3/2020
- Paket Sistem Input
-
- 1.2.0
Prasyarat untuk tip ini
Pengaturan berikut telah dibuat sebelumnya sebagai premis untuk deskripsi tip ini.
Dapatkan posisi mouse
Posisi mouse di layar game dapat Mouse.position
diperoleh di .
Di sini, saya ingin menampilkan informasi lokasi.
Menempatkan objek teks di Canvas yang menampilkan informasi mouse.
Informasi mouse diambil dengan scripting.
Dalam hal ini, kita akan membuat file skrip yang disebut dalam proyek MouseInfo
.
Masukkan skrip sebagai berikut:
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
Anda bisa mendapatkan informasi tentang mouse yang sedang aktif.
Mouse.position
memiliki posisi mouse saat ini di , sehingga ReadValue
Anda bisa mendapatkan nilai dalam bentuk Vector2
dengan menggunakan metode iniVector2Control
.
Posisi mouse yang diperoleh diatur ke objek teks.
StringBuilder
Jangan terlalu khawatir tentang menggunakan , karena ini untuk ditambahkan nanti.
Setelah EventSystem
Anda menyimpan skrip, lampirkan ke objek.
Objek Teks diatur ke objek teks untuk menampilkan informasi tentang.
Coba jalankan game dan gerakkan mouse. Saya pikir posisi mouse akan muncul di layar secara real time.
Omong-omong, koordinat posisi mouse adalah (0, 0) di sudut kiri bawah layar game. Sumbu X (kiri dan kanan) menjadi positif saat Anda pergi ke kanan dan negatif saat Anda pergi ke kiri. Sumbu Y (atas dan bawah) menjadi positif saat Anda naik dan negatif saat Anda turun. Oleh karena itu, nilai maksimum setiap sumbu ada di sudut kanan atas layar game.
Juga, harap dicatat bahwa koordinat ini hanya untuk ruang layar game, sehingga ukuran piksel dalam game dan ukuran piksel koordinat layar perangkat mungkin tidak cocok.
Dapatkan jumlah gulungan roda
Menggulir dengan roda mouse juga dapat diambil dalam skrip.
Jumlah Mouse.scroll
gulir dapat diperoleh dengan .
Berbeda dengan posisi mouse, Anda hanya bisa mendapatkan jumlah yang digulir secara instan.
Perhatikan bahwa Anda tidak bisa mendapatkan seberapa jauh Anda telah menggulir.
Saya akan menambahkannya ke operasi gulir yang saya buat MouseInfo
sebelumnya.
// 省略
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
tidak menyimpan jumlah yang digulir sejauh ini, jadi
Tentukan bidang ScrollValue
khusus untuk menahan jumlah gulir.
Mouse.scroll
Kemudian, Anda bisa mendapatkan jumlah yang digulir pada saat itu, jadi kami akan mengumpulkan nilai itu.
Misalnya, jika ScrollValue
Anda menggulir roda dua kali, jumlah yang digulir dua kali akan dipertahankan.
Sisanya adalah menampilkan nilai ini sebagai teks.
Sekarang jalankan game dan putar roda. Saya pikir Anda akan melihat jumlah pengguliran.
Mouse.scroll
Vector2
memiliki nilai , tetapi jika itu adalah roda khusus gulir vertikal, saya pikir hanya nilai Y yang akan ditetapkan.
Omong-omong, jika Anda menggulir ke bawah, nilainya akan naik dan turun dalam 120 unit. Ini adalah nilai yang ditentukan oleh Windows, sehingga jumlahnya dapat berubah tergantung pada lingkungan dan jenis mouse lainnya.
Menentukan kapan tombol mouse diklik
Di sini, saya ingin memindahkan contoh yang menampilkan teks pada posisi di mana tombol kiri mouse diklik.
Waktu mengklik dapat ditentukan oleh properti dengan cara yang sama seperti wasPressedThisFrame
tombol keyboard.
Pertama, tempatkan objek teks untuk bergerak. Ukuran dan posisinya sesuai.
Buat skrip untuk proses klik. MouseButtonClick
Biarkan nama sebagai .
Skripnya terlihat seperti ini:
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;
}
}
}
Saya melakukan proses memindahkan objek teks ke posisi yang diklik. Posisi lokal objek UI adalah koordinat Canvas, sehingga berbeda dengan posisi mouse, yaitu koordinat layar.
Karena asal Canvas (0, 0) ada di tengah,RectTransform.sizeDelta
gunakan untuk mendapatkan setengah ukuran Canvas.
Asal koordinat mouse digeser ke tengah.
Anda dapat menentukan apakah Anda mengklik atau tidak mouse.xxxxxxxx.wasPressedThisFrame
, dan hanya kembali saat true
Anda mengklik.
Jika Anda mengklik dan menahan tombol, itu akan terus kembali sampai Anda false
mengkliknya lagi.
Setelah EventSystem
Anda menyimpan skrip, lampirkan ke . Kali ini, kita juga akan menggunakan Canvas, jadi atur Canvas dan objek teks.
Coba jalankan game dan lihat apakah objek teks bergerak ke lokasi yang diklik. Karena hanya memproses saat diklik, objek teks tidak bergerak bahkan jika Anda menggerakkan mouse saat mengklik.
Menentukan kapan Anda melepaskan tombol mouse
Meskipun tidak terdaftar sebagai sampel, wasPressedThisFrame
Anda dapat menentukan waktu rilis dengan menggunakan alih-alih wasReleasedThisFrame
.
Menilai sambil mengklik tombol
mouse.xxxxxxxx.isPressed
untuk terus kembali selama true
Anda mengklik tombol.
Di sini, saya ingin memutar teks sambil menekan tombol kanan.
Skrip dialihkan dari yang klik kiri. Ubah sebagai berikut:
// 省略
public class MouseButtonClick : MonoBehaviour
{
// 省略
// 更新はフレームごとに1回呼び出されます
void Update()
{
// 省略
// 右ボタンを押している間はオブジェクトを回転させる
if (mouse.rightButton.isPressed)
{
transform.Rotate(0, 0, 1);
}
}
}
Setelah menyimpan skrip, jalankan untuk memeriksanya. Objek terus berputar selama tombol kanan ditekan.