Преместване, завъртане и мащабиране на спрайтове
Среда за проверка
- Уиндоус
-
- Прозорци 11
- Редактор на единство
-
- 2020.3.25ф1
- Пакети на входната система
-
- 1.2.0
Предпоставки за този съвет
Следните настройки са предварително конфигурирани като предпоставка за обяснението на тези съвети.
Преместване на спрайта
В игрите често използвате контролер, за да преместите героя си. Този път бих искал да използвам клавиатурата, за да преместя спрайта, показан на екрана.
Ако промените скрипта, можете да го преместите с геймпад в допълнение към клавиатурата. Всеки вход е обобщен в Съвети за входната система, така че, моля, направете справка с него.
Поставяне на спрайт
Поставете един спрайт в изгледа. За инструкции за поставяне на спрайтове, вижте предишните съвети. За момента видът и размерът на изображението могат да бъдат всичко, стига да се вижда на изгледа.
Има и текст на обяснението на операцията, но то не засяга тази операция.
Създайте скрипт, който ви позволява да премествате спрайтове с клавиатурата
За да преместите спрайт чрез входна операция, трябва да създадете скрипт, така че създайте скрипт във вашия проект.
Името е произволно, но в този случай SpriteMove
е .
След като създадете и отворите скрипта, въведете следното: Този скрипт се основава на предположението, че той ще бъде прикрепен към спрайта, който ще бъде преместен.
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;
}
}
}
За да премествате спрайта редовно, трябва да Update
опишете процеса в метод.
FixedUpdate
В случая сме го създали и описали там.
Ще обясня подробностите подробно друг път, ноUpdate
броят пъти, които един метод се извиква в секунда, зависи от средата, в която се изпълнява.
Следователно, скоростта на движение може да се промени в зависимост от средата на изпълнение.
FixedUpdate
Броят пъти, в които методът се извиква в секунда, се определя от стойността на настройката, така че можете да премествате спрайта с една и съща скорост във всяка среда.
public class SpriteMove : MonoBehaviour
{
// 一定時間ごとに呼ばれます
void FixedUpdate()
{
// :
}
}
Тъй като се предполага, че този път ще се работи с клавиатурата, информацията за клавиатурата Keyboard.current
се получава с .
Ако промените кода тук, можете да го получите и с мишка или геймпад.
Ако искате да го промените, моля, вижте следните съвети.
// キーボードの情報を取得
var keyboard = Keyboard.current;
if (keyboard == null)
{
Debug.Log("キーボードがありません。");
return;
}
SpriteMove
Класът, който наследявате, съдържа информация за обекта, към който прикачвате MonoBehaviour
.
transform
Когато осъществявате достъп до свойства, можете например да манипулирате местоположението на обекта.
Transform.Translate
Можете да извикате метод за преместване на позицията на обекта от текущата му позиция.
Координатите X и Y се преместват съответно според клавишите на курсора.
Space.World
, можете да се движите, без да бъдете засегнати от въртенето, описано по-долу.
// スプライトの移動処理
// 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
Можете да извикате метод за завъртане на обект от текущото му състояние.
Аргументът е размерът на въртене по отношение на зададената ос. Оста X е лявата и дясната ос, оста Y е оста нагоре и надолу, а оста Z е оста, която върви назад.
Следователно, в 2D, ако умножите въртенето по отношение на оста Z, тя ще се завърти по посока на часовниковата стрелка и обратно на часовниковата стрелка.
// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
transform.Rotate(0, 0, 5f);
}
Между другото, аз посочих в Space.World
метода по-рано Translate
, но
Ако това не е посочено, посоката на движение ще се върти според посоката на въртене.
Например, на фигурата Space.World
по-долу е посочено и правилната операция за движение се извършва с въртене на 45 °.
На следващата фигура Space.World
правилната операция за движение се извършва с въртене на 45°, без да се уточнява .
Space.World
Ако не посочите по този начин, посоката на движение се променя с посоката, в която се въртите.
Това е полезно за изпълнение на 3D и радиоуправляеми операции.
За мащабиране няма метод за увеличаване или намаляване на мащаба по отношение на текущата скала.
localScale
Извършване на изчисления върху свойството.
Ако просто умножите текущата стойност с увеличение, можете да я мащабирате според натискането на клавиша.
Vector2
Ако го зададете с , можете да увеличите само посоката X, да увеличите само посоката Y и т.н.
// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
transform.localScale /= 1.02f;
}
След като сте запазили скрипта си, прикачете го към вашия спрайт. Името на спрайт в йерархията е същото като името на файла, така че ако е необходимо, променете го, за да го направите по-лесен за разбиране.
След това стартирайте играта и вижте дали работи с клавиатурата ви.
Мисля, че това е достатъчно, за да преместите кораба си във вертикална или хоризонтална игра на стрелба. Разбира се, ако автоматично изчислите движението на врага, можете да го преместите със същия код.