او در حال حاضر

صفحه به روز شده :
تاریخ ایجاد صفحه :

محیط تایید

ویندوز
  • ویندوز 11
ویرایشگر یونیتی
  • دانلود: 2020.3.25f1
بسته های سیستم ورودی
  • 1.2.0

پیشنیازهای این نکته

تنظیمات زیر به عنوان پیش نیاز برای توضیح این نکات از قبل پیکربندی شده است.

حرکت روح

در بازی ها، شما اغلب از یک کنترل کننده برای حرکت شخصیت خود استفاده می کنید. این بار، من می خواهم به استفاده از صفحه کلید برای حرکت روح نمایش داده شده بر روی صفحه نمایش.

اگر اسکریپت را تغییر دهید، می توانید ان را با یک گیم پد علاوه بر صفحه کلید حرکت دهید. هر ورودی در نکاتی برای سیستم ورودی خلاصه شده است، بنابراین لطفا به ان مراجعه کنید.

قرار دادن روح

یک روح را در منظره قرار دهید. برای دستورالعمل قرار دادن ارواح، به نکات قبلی مراجعه کنید. در حال حاضر، نوع و اندازه تصویر می تواند هر چیزی باشد تا زمانی که در منظره قابل مشاهده باشد.

همچنین یک متن از توضیح عملیات وجود دارد، اما این عملیات را تحت تاثیر قرار نمی دهد.

ایجاد یک اسکریپت که اجازه می دهد تا شما را به حرکت sprites با صفحه کلید

به منظور حرکت روح توسط عملیات ورودی، شما نیاز به ایجاد یک اسکریپت، بنابراین ایجاد یک اسکریپت در پروژه خود را. نام خودسرانه است، اما در این مورد 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;
}

هنگامی که اسکریپت خود را ذخیره کردید، ان را به روح خود متصل کنید. نام روح در سلسله مراتب همان نام فایل است، بنابراین در صورت لزوم، ان را تغییر دهید تا درک ان اسان تر شود.

پس از ان، بازی را اجرا کنید و ببینید ایا با صفحه کلید شما کار می کند.

من فکر می کنم این به اندازه کافی برای حرکت کشتی خود را در یک بازی تیراندازی عمودی یا افقی است. البته اگر به طور خودکار حرکت دشمن را محاسبه کنید، می توانید ان را با همان کد حرکت دهید.