تغییر تصویر روح در حالی که بازی در حال اجرا است

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

محیط تایید

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

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

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

در مورد تغییر تصویر یک روح

همانطور که می بینید هنگام بازی یک بازی دو بعد، اغلب صحنه ای را می بینید که در ان تصویر به عنوان یک روح در وسط تغییر می کند. به عنوان مثال، درب در ابتدا بسته است، اما با باز کردن ان، به عنوان یک درب باز نمایش داده می شود.

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

اضافه کردن و قرار دادن تصاویر در یک پروژه

این بار، شما نیاز به یک تصویر قبل از تغییر و یک تصویر پس از تغییر دارید، بنابراین لطفا دو تصویر را اماده کنید. در اینجا، نام فایل به UnityTipsUnityTipsChange ترتیب است.

روح را از پروژه رها کنید و ان را قرار دهید. هنگامی که دکمه کلیک می شود، تصویر تغییر می کند، بنابراین دکمه را از UI قرار دهید.

ایجاد یک اسکریپت تغییر تصویر

یک اسکریپت ایجاد کنید. نام خودسرانه است، اما در این مورد SpriteChange ، ان است.

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

فیلمنامه به این شکل است:

using UnityEngine;

public class SpriteChange : MonoBehaviour
{
  /// <summary>画像を変更するスプライトオブジェクト。</summary>
  [SerializeField] private GameObject TargetSprite;

  /// <summary>変更後の画像を持つスプライト。</summary>
  [SerializeField] private Sprite NextSprite;

  /// <summary>ボタンをクリックしたときに呼ばれます。</summary>
  public void OnClick()
  {
    if (TargetSprite == null)
    {
      Debug.Log($"{nameof(TargetSprite)} が null です。");
      return;
    }
    if (NextSprite == null)
    {
      Debug.Log($"{nameof(NextSprite)} が null です。");
      return;
    }

    // 変更対象のオブジェクトが持つ SpriteRenderer を取得
    var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();
    if (spriteRenderer == null)
    {
      Debug.Log($"{nameof(TargetSprite)} に {nameof(SpriteRenderer)} コンポーネントがありません。");
      return;
    }

    // SpriteRenderer の sprite に変更後のスプライトをセット
    spriteRenderer.sprite = NextSprite;
  }
}

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

GameObject شما می توانید ببینید که شما می توانید شی هدف را از سلسله مراتب تنظیم کنید. Sprite ممکن است سوال این باشد که در چه چیزی قرار بگیرد.

برای این کار، من فکر می کنم که "نوع بافت" فایل تصویر اضافه شده به پروژه به طور پیش فرض "Sprite (2D و UI)" است، بنابراین می توان ان را به طور خودکار به عنوان یک روح درمان کرد. بنابراین شما می توانید ان را به عنوان یک روح فقط با تنظیم فایل تصویر درمان.

/// <summary>画像を変更するスプライトオブジェクト。</summary>
[SerializeField] private GameObject TargetSprite;

/// <summary>変更後の画像を持つスプライト。</summary>
[SerializeField] private Sprite NextSprite;

OnClick انتظار می رود که این روش زمانی که دکمه کلیک می شود، نامیده شود. نام متد Arbitrary است.

OnClick در این روش، ما تصویر را تغییر می دهیم. از انجا که یکی است SpriteRenderer که اطلاعات تصویر است، ما جزء را از GameObject دریافت می SpriteRenderer کنیم. SpriteRenderer کلاس دارای یک ویژگی است که در ان شما می توانید تصویر را با تنظیم ان به یک روح که دارای یک sprite تصویر جدید است، مبادله کنید.

// 変更対象のオブジェクトが持つ SpriteRenderer を取得
var spriteRenderer = TargetSprite.GetComponent<SpriteRenderer>();

// 省略

// SpriteRenderer の sprite に変更後のスプライトをセット
spriteRenderer.sprite = NextSprite;

پس از ذخیره اسکریپت، ان را به شیء متصل کنید. شیء متصل شده اختیاری است، اما در این مورد EventSystem ، به ان متصل است. از انجا که "Target Sprite" و "Next Sprite" به عنوان پارامتر وجود دارد، "Target Sprite" دارای اشیاء روح از سلسله مراتب است. "Sprite بعدی" به فایل تصویر تغییر یافته از پروژه تنظیم شده است.

روش را از OnClick اسکریپت متصل به رویداد EventSystem کلیک دکمه مشخص کنید.

بازی را اجرا کنید و سعی کنید دکمه را فشار دهید. اگر تصویر تغییر کند، موفقیت امیز است.