اسپرائٹس کو حرکت دیں، گھمائیں اور اسکیل کریں

جب صفحے کی تازہ کاری :
صفحہ تخلیق تاریخ :

تصدیق کا ماحول

Windows
  • ونڈوز 11
یونٹی ایڈیٹر
  • 2020.3.25f1
Input System Packages
  • 1.2.0

اس ٹوٹکے کے لئے ضروری شرائط

مندرجہ ذیل ترتیبات ان تجاویز کی وضاحت کے لئے ایک شرط کے طور پر پہلے سے تشکیل دی گئی ہیں.

اسپرائٹ کو حرکت دینا

گیمز میں ، آپ اکثر اپنے کردار کو منتقل کرنے کے لئے کنٹرولر کا استعمال کرتے ہیں۔ اس بار ، میں اسکرین پر دکھائے جانے والے اسپرائٹ کو منتقل کرنے کے لئے کی بورڈ کا استعمال کرنا چاہتا ہوں۔

اگر آپ اسکرپٹ تبدیل کرتے ہیں تو ، آپ اسے کی بورڈ کے علاوہ گیم پیڈ کے ساتھ منتقل کرسکتے ہیں۔ ہر ان پٹ کا خلاصہ ان پٹ سسٹم کے لئے تجاویز میں کیا گیا ہے ، لہذا براہ کرم اس کا حوالہ دیں۔

Sprite Placement

منظر میں ایک اسپرائٹ رکھیں۔ اسپرائٹس رکھنے کے بارے میں ہدایات کے لئے، پچھلے نکات ملاحظہ کریں. فی الحال ، تصویر کی قسم اور سائز کچھ بھی ہوسکتا ہے جب تک کہ یہ منظر پر نظر آتا ہے۔

آپریشن کی وضاحت کا متن بھی موجود ہے ، لیکن یہ اس آپریشن کو متاثر نہیں کرتا ہے۔

ایک اسکرپٹ بنائیں جو آپ کو کی بورڈ کے ساتھ اسپرائٹس منتقل کرنے کی اجازت دیتا ہے

ان پٹ آپریشن کے ذریعہ اسپرائٹ کو منتقل کرنے کے لئے ، آپ کو اسکرپٹ بنانے کی ضرورت ہے ، لہذا اپنے پروجیکٹ میں اسکرپٹ بنائیں۔ نام من مانی ہے، لیکن اس معاملے 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 آپ آبجیکٹ کی پوزیشن کو اس کی موجودہ پوزیشن سے منتقل کرنے کا طریقہ کہہ سکتے ہیں۔ ایکس اور وائی کوآرڈینیٹس کو بالترتیب کرسر کلید کے مطابق منتقل کیا جاتا ہے۔

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 محور وہ محور ہے جو پیچھے جاتا ہے۔ لہذا ، 2 ڈی میں ، اگر آپ گردش کو زیڈ محور کے لحاظ سے گنا کرتے ہیں تو ، یہ گھڑی کے لحاظ سے اور کاؤنٹر کلاک کے لحاظ سے گھومے گا۔

// スプライトの回転処理
// Rotate メソッドでスプライトが回転します
if (keyboard.spaceKey.isPressed)
{
  transform.Rotate(0, 0, 5f);
}

ویسے، میں نے پہلے طریقہ کار میں وضاحت کی Space.World تھی Translate ، لیکن اگر یہ واضح نہیں ہے تو ، حرکت کی سمت گردش کی سمت کے مطابق گھومے گی۔

مثال کے طور پر ، نیچے دیئے گئے اعداد و شمار Space.World میں ، وضاحت کی گئی ہے ، اور صحیح حرکت کا آپریشن 45 ° گردش کے ساتھ انجام دیا جاتا ہے۔

مندرجہ ذیل اعداد و شمار میں ، Space.World دائیں حرکت کا آپریشن بغیر کسی وضاحت کے 45 ° گردش کے ساتھ انجام دیا جاتا ہے۔

Space.World اگر آپ اس طرح سے وضاحت نہیں کرتے ہیں تو ، حرکت کی سمت اس سمت کے ساتھ تبدیل ہوتی ہے جس میں آپ گھومتے ہیں۔ یہ 3 ڈی اور ریڈیو کنٹرولڈ آپریشنز کو نافذ کرنے کے لئے مفید ہے.

اسکیلنگ کے لئے ، موجودہ پیمانے کے حوالے سے پیمانے کو بڑھانے یا کم کرنے کا کوئی طریقہ نہیں ہے۔ localScale پراپرٹی کا حساب کریں۔

اگر آپ صرف موجودہ قدر کو میگنیفکیشن سے گنا کرتے ہیں تو ، آپ اسے کلیدی پریس کے مطابق اسکیل کرسکتے ہیں۔ Vector2 اگر آپ اسے سیٹ کرتے ہیں تو ، آپ صرف ایکس سمت میں زوم کرسکتے ہیں ، صرف وائی سمت میں زوم کرسکتے ہیں ، وغیرہ۔

// スプライトの拡大縮小
// メソッドはないので localScale プロパティに倍率をかけます
if (keyboard.aKey.isPressed)
{
  transform.localScale *= 1.02f;
}
if (keyboard.zKey.isPressed)
{
  transform.localScale /= 1.02f;
}

ایک بار جب آپ اپنا اسکرپٹ محفوظ کرلیں تو ، اسے اپنے اسپرائٹ سے منسلک کریں۔ درجہ بندی میں اسپرائٹ کا نام فائل کے نام جیسا ہی ہے ، لہذا اگر ضروری ہو تو ، اسے سمجھنے میں آسان بنانے کے لئے اسے تبدیل کریں۔

اس کے بعد ، کھیل چلائیں اور دیکھیں کہ آیا یہ آپ کے کی بورڈ کے ساتھ کام کرتا ہے۔

مجھے لگتا ہے کہ یہ آپ کے جہاز کو عمودی یا افقی شوٹنگ گیم میں منتقل کرنے کے لئے کافی ہے۔ یقینا ، اگر آپ خود بخود دشمن کی نقل و حرکت کا حساب لگاتے ہیں تو ، آپ اسے اسی کوڈ کے ساتھ منتقل کرسکتے ہیں۔