Sprite-ok mozgatása, forgatása és méretezése
Ellenőrzési környezet
- Windows
-
- Windows 11 esetén
- Unity-szerkesztő
-
- 2020.3.25f1
- Bemeneti rendszercsomagok
-
- 1.2.0
A tipp előfeltételei
A következő beállítások előre konfigurálva vannak a tippek magyarázatának előfeltételeként.
A sprite mozgatása
A játékokban gyakran vezérlőt használ a karakter mozgatásához. Ezúttal a billentyűzetet szeretném használni a képernyőn megjelenő sprite mozgatására.
Ha megváltoztatja a szkriptet, akkor a billentyűzet mellett egy játékvezérlővel is mozgathatja. Az egyes bemeneteket a Tippek a beviteli rendszerhez című rész foglalja össze, ezért kérjük, olvassa el.
Sprite elhelyezés
Helyezzen egy sprite-ot a nézetbe. A sprite-ok elhelyezésére vonatkozó utasításokat lásd az előző tippekben. Egyelőre a kép típusa és mérete bármi lehet, amíg látható a nézetben.
A művelet magyarázatának szövege is megtalálható, de ez nem befolyásolja ezt a műveletet.
Hozzon létre egy szkriptet, amely lehetővé teszi a sprite-ok mozgatását a billentyűzettel
A sprite bemeneti művelettel való áthelyezéséhez létre kell hoznia egy szkriptet, ezért hozzon létre egy szkriptet a projektben.
A név önkényes, de ebben az esetben SpriteMove
.
Miután létrehozta és megnyitotta a szkriptet, írja be a következőket: Ez a szkript azon a feltételezésen alapul, hogy az áthelyezendő sprite-hoz lesz csatolva.
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;
}
}
}
Annak érdekében, hogy Update
a sprite-t rendszeresen mozgassa, le kell írnia a folyamatot egy módszerrel.
FixedUpdate
Ebben az esetben ott hoztuk létre és írtuk le.
A részleteket egy másik alkalommal részletesen elmagyarázom, deUpdate
a metódus másodpercenkénti meghívásainak száma attól függ, hogy milyen környezetben fut.
Ezért a mozgás sebessége a végrehajtási környezettől függően változhat.
FixedUpdate
A metódus másodpercenkénti meghívásainak számát a beállítási érték határozza meg, így a sprite-ot bármilyen környezetben azonos sebességgel mozgathatja.
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// :
}
}
Mivel feltételezzük, hogy ezúttal a billentyűzettel fog működni, a Keyboard.current
billentyűzet információit .
Ha itt megváltoztatja a kódot, egérrel vagy játékvezérlővel is megkaphatja.
Ha módosítani szeretné, kérjük, olvassa el az alábbi tippeket.
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
SpriteMove
Az osztály, amelyből örököl, információkat tartalmaz arról az objektumról, MonoBehaviour
amelyhez csatolni kívánja.
transform
A tulajdonságok elérésekor módosíthatja például az objektum helyét.
Transform.Translate
Meghívhat egy metódust, amely áthelyezi az objektum helyzetét az aktuális helyzetéből.
Az X és Y koordináták a kurzorbillentyűknek megfelelően mozognak.
Space.World
, akkor anélkül mozoghat, hogy az alább leírt forgatás befolyásolná.
// スプライトの移動処理
// 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
Meghívhat egy metódust, amellyel elforgathat egy objektumot az aktuális állapotából.
Az argumentum az elforgatás mértéke a megadott tengelyhez képest. Az X tengely a bal és a jobb tengely, az Y tengely a fel és le tengely, a Z tengely pedig a hátrafelé haladó tengely.
Ezért 2D-ben, ha megszorozza a forgást a Z tengelyhez képest, akkor az óramutató járásával megegyező és az óramutató járásával ellentétes irányban forog.
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
Egyébként korábban megadtam a Space.World
módszerben Translate
, de
Ha ez nincs megadva, a mozgás iránya a forgásiránynak megfelelően forog.
Például az alábbi ábrán Space.World
meg van adva, és a megfelelő mozgási műveletet 45°-os elforgatással hajtják végre.
A következő ábrán a megfelelő mozgási műveletet 45°-os elforgatással hajtjuk végre, Space.World
megadás nélkül.
Space.World
Ha nem így adja meg, a mozgás iránya az elforgatás irányával változik.
Ez hasznos a 3D és rádióvezérelt műveletek megvalósításához.
A méretezéshez nincs módszer a skála növelésére vagy csökkentésére az aktuális skálához képest.
localScale
Végezzen számításokat a tulajdonságon.
Ha egyszerűen megszorozza az aktuális értéket nagyítással, akkor a billentyűlenyomásnak megfelelően méretezheti.
Vector2
Ha az -val állítja be, akkor csak az X irányba nagyíthat, csak az Y irányba nagyíthat stb.
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
Miután mentette a szkriptet, csatolja a sprite-hoz. A hierarchiában lévő sprite neve megegyezik a fájlnévvel, ezért szükség esetén módosítsa azt, hogy könnyebben érthető legyen.
Ezután futtassa a játékot, és nézze meg, hogy működik-e a billentyűzettel.
Azt hiszem, ez elég ahhoz, hogy a hajódat függőleges vagy vízszintes lövöldözős játékban mozgasd. Természetesen, ha automatikusan kiszámítja az ellenség mozgását, ugyanazzal a kóddal mozgathatja.