Spriten siirtäminen, kiertäminen ja skaalaaminen
Varmennusympäristö
- Windows
-
- Windows 11
- Unity-editori
-
- 2020.3.25F1
- Syöttöjärjestelmän paketit
-
- 1.2.0
Tämän vinkin edellytykset
Seuraavat asetukset on määritetty valmiiksi näiden vihjeiden selityksen edellytykseksi.
Spriten siirtäminen
Peleissä käytät usein ohjainta hahmosi siirtämiseen. Tällä kertaa haluaisin käyttää näppäimistöä näytöllä näkyvän spriten siirtämiseen.
Jos muutat komentosarjaa, voit siirtää sitä peliohjaimella näppäimistön lisäksi. Jokaisesta syötteestä on yhteenveto kohdassa Vihjeitä syöttöjärjestelmälle, joten tutustu siihen.
Sprite-sijoitus
Aseta yksi hahmo näkymään. Katso ohjeet spriten sijoittamisesta edellisistä vinkeistä. Toistaiseksi kuvan tyyppi ja koko voivat olla mitä tahansa, kunhan se näkyy näkymässä.
Operaation selityksestä on myös teksti, mutta se ei vaikuta tähän toimintaan.
Luo skripti, jonka avulla voit siirtää spritejä näppäimistöllä
Jotta voit siirtää sprite by input -toimintoa, sinun on luotava komentosarja, joten luo komentosarja projektiisi.
Nimi on mielivaltainen, mutta tässä tapauksessa SpriteMove
se on .
Kun olet luonut ja avannut komentosarjan, kirjoita seuraava: Tämä skripti perustuu oletukseen, että se liitetään siirrettävään spriteen.
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;
}
}
}
Jotta sprite voidaan Update
siirtää säännöllisesti, sinun on kuvattava prosessi menetelmällä.
FixedUpdate
Tässä tapauksessa olemme luoneet ja kuvanneet sen siellä.
Selitän yksityiskohdat yksityiskohtaisesti toisen kerran, muttaUpdate
kuinka monta kertaa menetelmää kutsutaan sekunnissa, riippuu ympäristöstä, jossa se on käynnissä.
Siksi liikkeen nopeus voi muuttua suoritusympäristöstä riippuen.
FixedUpdate
Se, kuinka monta kertaa menetelmää kutsutaan sekunnissa, määräytyy asetusarvon mukaan, joten voit siirtää spritea samalla nopeudella missä tahansa ympäristössä.
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// :
}
}
Koska oletetaan, että sitä käytetään tällä kertaa näppäimistöllä, näppäimistön Keyboard.current
tiedot saadaan .
Jos muutat koodia täällä, voit saada sen myös hiirellä tai peliohjaimella.
Jos haluat muuttaa sitä, tutustu seuraaviin vinkkeihin.
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
SpriteMove
Luokka, josta perit, sisältää tietoja objektista, johon liität MonoBehaviour
.
transform
Kun käytät ominaisuuksia, voit esimerkiksi muokata objektin sijaintia.
Transform.Translate
Voit kutsua menetelmää objektin sijainnin siirtämiseksi nykyisestä sijainnistaan.
X- ja Y-koordinaatteja siirretään kohdistinnäppäinten mukaan.
Space.World
, voit liikkua ilman, että alla kuvattu kierto vaikuttaa sinuun.
// スプライトの移動処理
// 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
Voit kutsua menetelmää objektin kiertämiseksi sen nykyisestä tilasta.
Argumentti on pyörimisen määrä määritettyyn akseliin nähden. X-akseli on vasen ja oikea akseli, Y-akseli on ylös- ja alas-akseli ja Z-akseli on taaksepäin menevä akseli.
Siksi 2D: ssä, jos kerrotaan kierto Z-akseliin nähden, se pyörii myötäpäivään ja vastapäivään.
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
Muuten, määrittelin menetelmässä Space.World
aiemmin Translate
, mutta
Jos tätä ei ole määritetty, liikesuunta pyörii pyörimissuunnan mukaan.
Esimerkiksi alla olevassa kuvassa Space.World
on määritelty, ja oikea liiketoiminto suoritetaan 45° kierrolla.
Seuraavassa kuvassa Space.World
oikea liiketoiminto suoritetaan 45° kierrolla määrittämättä .
Space.World
Jos et määritä tällä tavalla, liikkeen suunta muuttuu kiertosuunnan mukaan.
Tästä on hyötyä 3D- ja radio-ohjattujen toimintojen toteuttamisessa.
Skaalausta varten ei ole menetelmää asteikon nostamiseksi tai pienentämiseksi suhteessa nykyiseen mittakaavaan.
localScale
Suorita laskelmat omaisuudelle.
Jos yksinkertaisesti kerrot nykyisen arvon suurennuksella, voit skaalata sen näppäimen painalluksen mukaan.
Vector2
Jos asetat sen arvolla , voit zoomata vain X-suuntaan, zoomata vain Y-suuntaan jne.
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
Kun olet tallentanut skriptin, liitä se spriteen. Spriten nimi hierarkiassa on sama kuin tiedostonimi, joten muuta sitä tarvittaessa, jotta se on helpompi ymmärtää.
Suorita sen jälkeen peli ja katso, toimiiko se näppäimistön kanssa.
Mielestäni tämä riittää aluksen siirtämiseen pystysuorassa tai vaakasuorassa ammuntapelissä. Tietenkin, jos lasket automaattisesti vihollisen liikkeen, voit siirtää sen samalla koodilla.