Přesouvání, otáčení a změna velikosti sprajtů
Ověřovací prostředí
- Windows
-
- Systém Windows 11
- Unity Editor
-
- 2020.3.25f1
- Balíčky vstupního systému
-
- 1.2.0
Předpoklady pro tento tip
Následující nastavení jsou předem nakonfigurovaná jako předpoklad pro vysvětlení těchto tipů.
Přesunutí sprajtu
Ve hrách často používáte ovladač k pohybu své postavy. Tentokrát bych chtěl použít klávesnici k pohybu sprajtu zobrazeného na obrazovce.
Pokud skript změníte, můžete jej kromě klávesnice přesouvat také pomocí gamepadu. Každý vstup je shrnut v Tipy pro vstupní systém, proto se na něj prosím podívejte.
Umístění sprajtů
Umístěte jeden pohyblivý symbol do pohledu. Pokyny pro umisťování sprajtů najdete v předchozích tipech. Prozatím může být typ a velikost obrázku libovolná, pokud je viditelná na pohledu.
K dispozici je také text vysvětlení operace, ale to nemá vliv na tuto operaci.
Vytvořte skript, který vám umožní přesouvat sprajty pomocí klávesnice
Aby bylo možné přesunout sprajt vstupní operací, musíte vytvořit skript, takže vytvořte skript ve svém projektu.
Název je libovolný, ale v tomto případě SpriteMove
je .
Po vytvoření a otevření skriptu zadejte následující: Tento skript je založen na předpokladu, že bude připojen ke sprajtu, který má být přesunut.
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;
}
}
}
Aby bylo možné Update
pohyblivý prvek pravidelně přesouvat, je třeba popsat proces metodou.
FixedUpdate
V tomto případě jsme to tam vytvořili a popsali.
Podrobnosti podrobně vysvětlím jindy, aleUpdate
počet volání metody za sekundu závisí na prostředí, ve kterém běží.
Rychlost pohybu se proto může měnit v závislosti na prostředí provádění.
FixedUpdate
Počet volání metody za sekundu je určen hodnotou nastavení, takže pohyblivý symbol můžete pohybovat stejnou rychlostí v jakémkoli prostředí.
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// :
}
}
Vzhledem k tomu, že se předpokládá, že tentokrát bude ovládán klávesnicí, informace o Keyboard.current
klávesnici se získávají pomocí .
Pokud zde změníte kód, můžete jej získat také pomocí myši nebo gamepadu.
Pokud jej chcete změnit, postupujte podle následujících tipů.
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
SpriteMove
Třída, ze které dědíte, obsahuje informace o objektu, ke kterému se připojujete MonoBehaviour
.
transform
Při přístupu k vlastnostem můžete například manipulovat s umístěním objektu.
Transform.Translate
Můžete zavolat metodu pro přesunutí polohy objektu z jeho aktuální pozice.
Souřadnice X a Y se posouvají podle kurzorových kláves.
Space.World
, můžete se pohybovat, aniž byste byli ovlivněni rotací popsanou níže.
// スプライトの移動処理
// 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
Můžete zavolat metodu pro otočení objektu z jeho aktuálního stavu.
Argumentem je velikost otočení vzhledem k zadané ose. Osa X je levá a pravá osa, osa Y je osa nahoru a dolů a osa Z je osa, která jde dozadu.
Pokud tedy ve 2D vynásobíte rotaci vzhledem k ose Z, bude se otáčet ve směru a proti směru hodinových ručiček.
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
Mimochodem, specifikoval jsem v metodě Space.World
dříve Translate
, ale
Pokud toto není zadáno, směr pohybu se bude otáčet podle směru otáčení.
Například na obrázku Space.World
níže je specifikován a operace správného pohybu se provádí s otočením o 45°.
Na následujícím obrázku Space.World
je operace správného pohybu provedena s otočením o 45° bez zadání .
Space.World
Pokud to neurčíte tímto způsobem, směr pohybu se změní se směrem, ve kterém otáčíte.
To je užitečné pro implementaci 3D a rádiem řízených operací.
Pro změnu měřítka neexistuje žádná metoda, jak zvětšit nebo zmenšit měřítko vzhledem k aktuálnímu měřítku.
localScale
Proveďte výpočty na nemovitosti.
Pokud aktuální hodnotu jednoduše vynásobíte zvětšením, můžete ji škálovat podle stisknutí klávesy.
Vector2
Pokud jej nastavíte pomocí , můžete přiblížit pouze směr X, přiblížit pouze směr Y atd.
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
Jakmile skript uložíte, připojte ho ke svému sprajtu. Název sprajtu v hierarchii je stejný jako název souboru, takže v případě potřeby jej změňte, aby byl srozumitelnější.
Poté spusťte hru a zjistěte, zda funguje s vaší klávesnicí.
Myslím, že to stačí pro pohyb vaší lodi ve vertikální nebo horizontální střílečce. Samozřejmě, pokud automaticky vypočítáte pohyb nepřítele, můžete jej přesunout se stejným kódem.