Premikanje, vrtenje in prilagajanje velikosti grafičnih likov
Okolje za preverjanje
- Windows
-
- Windows 11
- Urejevalnik Unity
-
- 2020.3.25F1
- Paketi vhodnih sistemov
-
- 1.2.0
Predpogoji za ta nasvet
Naslednje nastavitve so vnaprej konfigurirane kot predpogoj za razlago teh nasvetov.
Premikanje duhovnika
V igrah pogosto uporabljate krmilnik za premikanje lika. Tokrat bi rad s tipkovnico premaknil sprite, prikazan na zaslonu.
Če spremenite skript, ga lahko poleg tipkovnice premaknete tudi z igralno konzolo. Vsak vnos je povzet v Nasvetih za vhodni sistem, zato si ga oglejte.
Namestitev Sprite
Postavite enega duhovnika v pogled. Za navodila o namestitvi spritesov glejte prejšnje nasvete. Zaenkrat sta lahko vrsta in velikost slike karkoli, dokler je vidna na pogledu.
Obstaja tudi besedilo razlage operacije, vendar to ne vpliva na to operacijo.
Ustvarite skript, ki vam omogoča premikanje grafičnih likov s tipkovnico
Če želite premakniti sprite z operacijo vnosa, morate ustvariti skript, zato ustvarite skript v svojem projektu.
Ime je poljubno, vendar je v tem primeru SpriteMove
.
Ko ustvarite in odprete skript, vnesite naslednje: Ta scenarij temelji na predpostavki, da bo pritrjen na duhovnika, ki ga je treba premakniti.
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;
}
}
}
Da bi Update
redno premikali duhovnika, morate postopek opisati v metodi.
FixedUpdate
V tem primeru smo ga tam ustvarili in opisali.
Podrobnosti bom podrobno razložil drugič, vendarUpdate
je število poklicev metode na sekundo odvisno od okolja, v katerem se izvaja.
Zato se lahko hitrost gibanja spremeni glede na izvedbeno okolje.
FixedUpdate
Kolikokrat se metoda pokliče na sekundo, je določena z vrednostjo nastavitve, tako da lahko sprite premikate z enako hitrostjo v katerem koli okolju.
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// :
}
}
Ker se predpostavlja, da bo tokrat deloval s tipkovnico, se informacije o Keyboard.current
tipkovnici pridobijo z .
Če kodo spremenite tukaj, jo lahko dobite tudi z miško ali igralno konzolo.
Če ga želite spremeniti, si oglejte naslednje nasvete.
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
SpriteMove
Razred, po katerem podedujete, vsebuje informacije o predmetu, na katerega se pripnete MonoBehaviour
.
transform
Ko dostopate do lastnosti, lahko na primer manipulirate z lokacijo predmeta.
Transform.Translate
Pokličete lahko metodo za premikanje položaja predmeta s trenutnega položaja.
Koordinati X in Y se premikata glede na tipke kazalca.
Space.World
, se lahko premikate, ne da bi na vas vplivalo spodaj opisano vrtenje.
// スプライトの移動処理
// 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
Pokličete lahko način za vrtenje predmeta iz trenutnega stanja.
Argument je količina vrtenja glede na določeno os. Os X je leva in desna os, os Y je os gor in dol, os Z pa os, ki gre nazaj.
Zato se bo v 2D, če pomnožite vrtenje glede na os Z, vrtela v smeri urinega kazalca in v nasprotni smeri urinega kazalca.
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
Mimogrede, v metodi Space.World
sem navedel prej Translate
, vendar
Če to ni določeno, se bo smer gibanja vrtela glede na smer vrtenja.
Na spodnji sliki Space.World
je na primer podana pravilna operacija gibanja s 45-stopinjskim vrtenjem.
Na naslednji sliki Space.World
se pravilno premikanje izvede z vrtenjem 45° brez navedbe .
Space.World
Če na ta način ne določite, se smer gibanja spreminja s smerjo, v kateri se vrtite.
To je uporabno za izvajanje 3D in radijsko vodenih operacij.
Za skaliranje ni metode za povečanje ali zmanjšanje lestvice glede na trenutno lestvico.
localScale
Izvedite izračune na nepremičnini.
Če preprosto pomnožite trenutno vrednost s povečavo, jo lahko prilagodite glede na pritisk tipke.
Vector2
Če ga nastavite z , lahko povečate samo smer X, povečate samo smer Y itd.
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
Ko shranite skript, ga priložite duhovniku. Ime sprite v hierarhiji je enako imenu datoteke, zato ga po potrebi spremenite, da ga boste lažje razumeli.
Po tem zaženite igro in preverite, ali deluje s tipkovnico.
Mislim, da je to dovolj za premikanje vaše ladje v navpični ali horizontalni strelski igri. Seveda, če samodejno izračunate gibanje sovražnika, ga lahko premaknete z isto kodo.