ย้าย หมุน และปรับขนาดสไปรท์
สภาพแวดล้อมการตรวจสอบ
- หน้าต่าง
-
- หน้าต่าง 11
- บรรณาธิการ Unity
-
- ปี 2020.3.25f1
- แพ็คเกจระบบอินพุต
-
- 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;
}
เมื่อคุณบันทึกสคริปต์ของคุณแล้ว ให้แนบสคริปต์นั้นไปกับสไปรท์ของคุณ ชื่อของสไปรท์ในลําดับชั้นจะเหมือนกับชื่อไฟล์ ดังนั้นหากจําเป็น ให้เปลี่ยนเพื่อให้เข้าใจง่ายขึ้น
หลังจากนั้นให้เรียกใช้เกมและดูว่าใช้งานได้กับแป้นพิมพ์ของคุณหรือไม่
ฉันคิดว่านี่เพียงพอสําหรับการเคลื่อนย้ายเรือของคุณในเกมยิงแนวตั้งหรือแนวนอน แน่นอนถ้าคุณคํานวณการเคลื่อนไหวของศัตรูโดยอัตโนมัติคุณสามารถย้ายมันด้วยรหัสเดียวกัน