Spraidide liigutamine, pööramine ja skaleerimine
Kontrollimise keskkond
- Windows
-
- Windows 11
- Ühtsuse toimetaja
-
- 2020.3.25f1
- Sisendsüsteemi paketid
-
- 1.2.0
Selle näpunäite eeltingimused
Järgmised sätted on eelkonfigureeritud nende näpunäidete selgitamise eeltingimusena.
Spraidi liigutamine
Mängudes kasutate oma tegelase liigutamiseks sageli kontrollerit. Seekord tahaksin klaviatuuri abil ekraanil kuvatavat spraiti liigutada.
Kui muudate skripti, saate seda lisaks klaviatuurile ka mängupuldiga teisaldada. Iga sisend on kokku võetud sisendsüsteemi näpunäidetes, nii et palun vaadake seda.
Sprite paigutus
Asetage vaatesse üks sprait. Spraidide paigutamise juhised leiate eelmistest näpunäidetest. Praegu võib pildi tüüp ja suurus olla ükskõik milline, kui see on vaates nähtav.
Samuti on olemas operatsiooni selgituse tekst, kuid see ei mõjuta seda toimingut.
Looge skript, mis võimaldab teil klaviatuuriga spraite liigutada
Spraidi liigutamiseks sisendoperatsiooni abil peate looma skripti, nii et looge oma projektis skript.
Nimi on meelevaldne, kuid antud juhul SpriteMove
, see on .
Kui olete skripti loonud ja avanud, sisestage järgmine teave. See skript põhineb eeldusel, et see kinnitatakse liigutatava spraidi külge.
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;
}
}
}
Spraidi regulaarseks liigutamiseks Update
peate protsessi kirjeldama meetodil.
FixedUpdate
Sel juhul oleme selle seal loonud ja kirjeldanud.
Ma selgitan üksikasju üksikasjalikult veel üks kord, kuidUpdate
meetodi kutsumise kordade arv sekundis sõltub keskkonnast, kus see töötab.
Seetõttu võib liikumise kiirus muutuda sõltuvalt täitmiskeskkonnast.
FixedUpdate
Meetodi sekundis kutsumise kordade arvu määrab seadistusväärtus, nii et saate spraiti liigutada sama kiirusega igas keskkonnas.
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// :
}
}
Kuna eeldatakse, et seda kasutatakse seekord klaviatuuriga, Keyboard.current
saadakse klaviatuuri teave .
Kui muudate koodi siin, saate selle ka hiire või mängupuldiga.
Kui soovite seda muuta, lugege palun järgmisi näpunäiteid.
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
SpriteMove
Klass, kust pärite, sisaldab teavet objekti kohta, millele lisate MonoBehaviour
.
transform
Atribuutidele juurdepääsul saate manipuleerida näiteks objekti asukohaga.
Transform.Translate
Võite helistada meetodile objekti asukoha teisaldamiseks selle praegusest asukohast.
X- ja Y-koordinaate liigutatakse vastavalt kursoriklahvidele.
Space.World
saate liikuda, ilma et allpool kirjeldatud pöörlemine teid mõjutaks.
// スプライトの移動処理
// 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
Võite helistada meetodile objekti pööramiseks selle praegusest olekust.
Argument on pöörlemise suurus määratud telje suhtes. X-telg on vasak ja parem telg, Y-telg on üles- ja allatelg ning Z-telg on telg, mis läheb tagasi.
Seega, kui korrutate 2D-s pöörlemist Z-telje suhtes, pöörleb see päripäeva ja vastupäeva.
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
Muide, ma täpsustasin meetodis Space.World
varem Translate
, kuid
Kui seda pole täpsustatud, pöörleb liikumissuund vastavalt pöörlemissuunale.
Näiteks on alloleval joonisel Space.World
täpsustatud ja õige liikumine toimub 45° pöörlemisega.
Järgmisel joonisel Space.World
teostatakse õige liikumise toiming 45° pöörlemisega ilma täpsustamata .
Space.World
Kui te sel viisil ei täpsusta, muutub liikumise suund pöörlemissuunaga.
See on kasulik 3D- ja raadio teel juhitavate toimingute rakendamiseks.
Skaleerimiseks ei ole meetodit skaala suurendamiseks või vähendamiseks praeguse skaala suhtes.
localScale
Tehke vara arvutused.
Kui korrutate praeguse väärtuse lihtsalt suurendusega, saate selle klahvivajutuse järgi skaleerida.
Vector2
Kui seadistate selle , saate suumida ainult X-suunas, suumida ainult Y-suunas jne.
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
Kui olete skripti salvestanud, lisage see oma spraidile. Spraidi nimi hierarhias on sama, mis failinimi, nii et vajadusel muutke seda, et seda oleks lihtsam mõista.
Pärast seda käivitage mäng ja vaadake, kas see töötab teie klaviatuuriga.
Ma arvan, et sellest piisab laeva liigutamiseks vertikaalses või horisontaalses tulistamismängus. Muidugi, kui arvutate vaenlase liikumise automaatselt, saate seda sama koodiga liigutada.