Pindah, putar dan skala sprites
Persekitaran pengesahan
- Windows
-
- Windows 11
- Penyunting Perpaduan
-
- 2020.3.25f1
- Pakej Sistem Input
-
- 1.2.0
Prasyarat untuk petua ini
Tetapan berikut telah diprakonfigurasi sebagai prasyarat untuk penjelasan petua ini.
Menggerakkan sprite
Dalam permainan, anda sering menggunakan pengawal untuk menggerakkan watak anda. Kali ini, saya ingin menggunakan papan kekunci untuk menggerakkan sprite yang dipaparkan pada skrin.
Jika anda menukar skrip, anda boleh mengalihkannya dengan pad permainan sebagai tambahan kepada papan kekunci. Setiap input diringkaskan dalam Petua untuk sistem input, jadi sila rujuk kepadanya.
Penempatan Sprite
Letakkan satu sprite dalam pandangan. Untuk arahan mengenai meletakkan sprites, rujuk petua sebelumnya. Buat masa ini, jenis dan saiz imej boleh menjadi apa-apa selagi ia kelihatan pada pandangan.
Terdapat juga teks penjelasan operasi, tetapi ia tidak menjejaskan operasi ini.
Buat skrip yang membolehkan anda menggerakkan sprites dengan papan kekunci
Untuk menggerakkan sprite dengan operasi input, anda perlu membuat skrip, jadi buat skrip dalam projek anda.
Nama itu sewenang-wenangnya, tetapi dalam kes SpriteMove
ini , ia adalah .
Sebaik sahaja anda telah mencipta dan membuka skrip, masukkan yang berikut: Skrip ini berdasarkan andaian bahawa ia akan dilampirkan pada sprite yang akan dipindahkan.
using UnityEngine;
using UnityEngine.InputSystem; // 追加
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
// スプライトの移動処理
// Translate メソッドでスプライトの位置が移動します
// Space.World を指定すると回転の影響をうけません
if (keyboard.leftArrowKey.isPressed)
{
transform.Translate(-0.1f, 0, 0, Space.World);
}
if (keyboard.rightArrowKey.isPressed)
{
transform.Translate(0.1f, 0, 0, Space.World);
}
if (keyboard.upArrowKey.isPressed)
{
transform.Translate(0, 0.1f, 0, Space.World);
}
if (keyboard.downArrowKey.isPressed)
{
transform.Translate(0, -0.1f, 0, Space.World);
}
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
}
}
Update
Untuk memindahkan sprite secara teratur, anda perlu menerangkan proses dalam kaedah.
FixedUpdate
Dalam kes ini, kami telah mencipta dan menerangkannya di sana.
Saya akan menerangkan butiran secara terperinci pada masa lain, tetapiUpdate
bilangan kali kaedah dipanggil sesaat bergantung kepada persekitaran di mana ia berjalan.
Oleh itu, kelajuan pergerakan mungkin berubah bergantung kepada persekitaran pelaksanaan.
FixedUpdate
Bilangan kali kaedah dipanggil sesaat ditentukan oleh nilai penetapan, jadi anda boleh menggerakkan sprite pada kelajuan yang sama dalam mana-mana persekitaran.
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// :
}
}
Oleh kerana diandaikan bahawa ia akan dikendalikan dengan papan kekunci kali ini, Keyboard.current
maklumat papan kekunci diperoleh dengan .
Jika anda menukar kod di sini, anda juga boleh mendapatkannya dengan tetikus atau pad permainan.
Jika anda ingin mengubahnya, sila rujuk petua berikut.
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
SpriteMove
Kelas yang anda warisi mengandungi maklumat mengenai objek yang anda MonoBehaviour
lampirkan.
transform
Apabila anda mengakses sifat, anda boleh memanipulasi lokasi objek, sebagai contoh.
Transform.Translate
Anda boleh memanggil kaedah untuk memindahkan kedudukan objek dari kedudukan semasanya.
Koordinat X dan Y dipindahkan mengikut kekunci kursor, masing-masing.
Space.World
, anda boleh bergerak tanpa terjejas oleh putaran yang diterangkan di bawah.
// スプライトの移動処理
// Translate メソッドでスプライトの位置が移動します
// Space.World を指定すると回転の影響をうけません
if (keyboard.leftArrowKey.isPressed)
{
transform.Translate(-0.1f, 0, 0, Space.World);
}
if (keyboard.rightArrowKey.isPressed)
{
transform.Translate(0.1f, 0, 0, Space.World);
}
if (keyboard.upArrowKey.isPressed)
{
transform.Translate(0, 0.1f, 0, Space.World);
}
if (keyboard.downArrowKey.isPressed)
{
transform.Translate(0, -0.1f, 0, Space.World);
}
Transform.Rotate
Anda boleh memanggil kaedah untuk memutarkan objek daripada keadaan semasanya.
Hujah adalah jumlah putaran berkenaan dengan paksi yang ditentukan. Paksi X ialah paksi kiri dan kanan, paksi Y ialah paksi atas dan bawah, dan paksi Z ialah paksi yang menghala ke belakang.
Oleh itu, dalam 2D, jika anda mengalikan putaran berkenaan dengan paksi Z, ia akan berputar mengikut arah jam dan lawan jam.
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
Dengan cara ini, saya nyatakan dalam kaedah yang Space.World
lebih awal Translate
, tetapi
Jika ini tidak dinyatakan, arah pergerakan akan berputar mengikut arah putaran.
Sebagai contoh, dalam gambar Space.World
di bawah, ditentukan, dan operasi pergerakan yang betul dilakukan dengan putaran 45°.
Dalam angka berikut, Space.World
operasi pergerakan yang betul dilakukan dengan putaran 45° tanpa menyatakan .
Space.World
Jika anda tidak menentukan dengan cara ini, arah pergerakan berubah dengan arah di mana anda berputar.
Ini berguna untuk melaksanakan operasi 3D dan kawalan radio.
Untuk penskalaan, tidak ada kaedah untuk meningkatkan atau mengurangkan skala berkenaan dengan skala semasa.
localScale
Lakukan pengiraan ke atas hartanah.
Jika anda hanya mengalikan nilai semasa dengan pembesaran, anda boleh menskalakannya mengikut akhbar utama.
Vector2
Jika anda menetapkannya dengan , anda boleh zum masuk hanya arah X, zum masuk hanya arah Y, dsb.
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
Sebaik sahaja anda telah menyimpan skrip anda, lampirkannya pada sprite anda. Nama sprite dalam hierarki adalah sama dengan nama fail, jadi jika perlu, ubahnya untuk menjadikannya lebih mudah difahami.
Selepas itu, jalankan permainan dan lihat sama ada ia berfungsi dengan papan kekunci anda.
Saya rasa ini cukup untuk menggerakkan kapal anda dalam permainan menembak menegak atau mendatar. Sudah tentu, jika anda secara automatik mengira pergerakan musuh, anda boleh memindahkannya dengan kod yang sama.