Pārvietot, pagriezt un mērogot sprites
Verifikācijas vide
- Windows
-
- Operētājsistēmā Windows 11
- Vienotības redaktors
-
- 2020.3.25f1
- Ievades sistēmas pakotnes
-
- 1.2.0
Priekšnoteikumi šim padomam
Tālāk norādītie iestatījumi ir iepriekš konfigurēti kā priekšnosacījums šo padomu skaidrojumam.
Sprite pārvietošana
Spēlēs jūs bieži izmantojat kontrolieri, lai pārvietotu savu varoni. Šoreiz es gribētu izmantot tastatūru, lai pārvietotu ekrānā redzamo sprite.
Ja maināt skriptu, varat to pārvietot ar gamepad papildus tastatūrai. Katra ievade ir apkopota ievades sistēmas padomos, tāpēc, lūdzu, skatiet to.
Sprite izvietojums
Novietojiet skatā vienu sprite. Norādījumus par sprites ievietošanu skatiet iepriekšējos padomos. Pagaidām attēla veids un izmērs var būt jebkas, ja vien tas ir redzams skatā.
Ir arī operācijas skaidrojuma teksts, bet tas neietekmē šo darbību.
Izveidojiet skriptu, kas ļauj pārvietot sprites ar tastatūru
Lai pārvietotu sprite ar ievades operāciju, jums jāizveido skripts, tāpēc izveidojiet skriptu savā projektā.
Nosaukums ir patvaļīgs, bet šajā gadījumā SpriteMove
– tas ir .
Kad skripts ir izveidots un atvērts, ievadiet: Šis skripts ir balstīts uz pieņēmumu, ka tas tiks pievienots pārvietojamajam spritei.
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;
}
}
}
Lai Update
regulāri pārvietotu sprite, jums ir jāapraksta process metodē.
FixedUpdate
Šajā gadījumā mēs to esam izveidojuši un aprakstījuši tur.
Es sīkāk paskaidrošu detaļas citu reizi, betUpdate
tas, cik reižu metode tiek izsaukta sekundē, ir atkarīga no vides, kurā tā darbojas.
Tāpēc kustības ātrums var mainīties atkarībā no izpildes vides.
FixedUpdate
To, cik reižu metode tiek izsaukta sekundē, nosaka iestatīšanas vērtība, tāpēc jūs varat pārvietot sprite ar tādu pašu ātrumu jebkurā vidē.
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// :
}
}
Tā kā tiek pieņemts, ka šoreiz tas tiks darbināts ar tastatūru, tastatūras informācija tiek iegūta Keyboard.current
ar .
Ja maināt kodu šeit, varat to iegūt arī ar peli vai gamepad.
Ja vēlaties to mainīt, lūdzu, skatiet tālāk sniegtos padomus.
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
SpriteMove
Mācību priekšmets, no kura mantojat, satur informāciju par objektu, kuram MonoBehaviour
pievienojat.
transform
Piekļūstot rekvizītiem, varat manipulēt, piemēram, ar objekta atrašanās vietu.
Transform.Translate
Jūs varat izsaukt metodi, lai pārvietotu objekta pozīciju no tā pašreizējās pozīcijas.
X un Y koordinātas tiek pārvietotas attiecīgi atbilstoši kursora taustiņiem.
Space.World
, jūs varat pārvietoties, neietekmējot tālāk aprakstīto rotāciju.
// スプライトの移動処理
// 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
Jūs varat izsaukt metodi, lai pagrieztu objektu no tā pašreizējā stāvokļa.
Arguments ir rotācijas apjoms attiecībā pret norādīto asi. X ass ir kreisā un labā ass, Y ass ir augšupvērstā un lejupējā ass, un Z ass ir ass, kas iet atpakaļ.
Tāpēc 2D, ja reizināsiet rotāciju attiecībā pret Z asi, tas pagriezīsies pulksteņrādītāja virzienā un pretēji pulksteņrādītāja virzienam.
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
Starp citu, es iepriekš norādīju metodē Space.World
Translate
, bet
Ja tas nav norādīts, kustības virziens griezīsies atbilstoši rotācijas virzienam.
Piemēram, zemāk redzamajā attēlā Space.World
ir norādīts, un pareizā kustības darbība tiek veikta ar 45° rotāciju.
Nākamajā attēlā labā kustības darbība tiek veikta ar 45° rotāciju, Space.World
nenorādot .
Space.World
Ja jūs nenorādāt šādā veidā, kustības virziens mainās līdz ar virzienu, kurā jūs rotējat.
Tas ir noderīgi 3D un radio vadāmu darbību ieviešanai.
Mērogošanai nav metodes, kā palielināt vai samazināt skalu attiecībā pret pašreizējo skalu.
localScale
Veiciet aprēķinus par īpašumu.
Ja jūs vienkārši reizināt pašreizējo vērtību ar palielinājumu, varat to mērogot atbilstoši taustiņa nospiešanai.
Vector2
Ja to iestatāt ar , varat tuvināt tikai X virzienu, tuvināt tikai Y virzienu utt.
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
Kad esat saglabājis skriptu, pievienojiet to savam sprite. Sprite nosaukums hierarhijā ir tāds pats kā faila nosaukums, tāpēc, ja nepieciešams, mainiet to, lai būtu vieglāk saprast.
Pēc tam palaidiet spēli un pārbaudiet, vai tā darbojas ar tastatūru.
Es domāju, ka tas ir pietiekami, lai pārvietotu savu kuģi vertikālā vai horizontālā šaušanas spēlē. Protams, ja jūs automātiski aprēķināsiet ienaidnieka kustību, varat to pārvietot ar to pašu kodu.