Thay đổi hình ảnh sprite trong khi trò chơi đang chạy

Trang Cập Nhật :
Ngày tạo trang :

Môi trường xác minh

Windows
  • cửa sổ 11
Biên tập viên Unity
  • 2020.3.25f1
Gói hệ thống đầu vào
  • 1.2.0

Điều kiện tiên quyết cho mẹo này

Các cài đặt sau đây được cấu hình sẵn làm điều kiện tiên quyết để giải thích các mẹo này.

Về việc thay đổi hình ảnh của một sprite

Như bạn có thể thấy khi chơi trò chơi 2D, bạn sẽ thường thấy một cảnh trong đó hình ảnh được đặt dưới dạng sprite chuyển đổi ở giữa. Ví dụ, cửa được đóng lúc đầu, nhưng bằng cách mở nó, nó được hiển thị như một cánh cửa mở.

Để đạt được điều này, bạn có thể chuẩn bị hai đồ vật, một cánh cửa đóng và một cánh cửa mở, và hiển thị hoặc ẩn chúng. Ở đây, chúng tôi sẽ cố gắng đạt được nó bằng cách chuyển đổi hình ảnh của sprite.

Thêm và đặt hình ảnh trong một dự án

Lần này, bạn cần một hình ảnh trước khi thay đổi và một hình ảnh sau khi thay đổi, vì vậy vui lòng chuẩn bị hai. Ở đây, tên tệp là , UnityTipsUnityTipsChange tương ứng.

Thả sprite từ dự án và đặt nó. Khi nút được nhấp, hình ảnh thay đổi, vì vậy hãy đặt nút từ giao diện người dùng.

Tạo tập lệnh thay đổi hình ảnh

Tạo tập lệnh. Tên là tùy ý, nhưng trong trường hợp SpriteChange này , nó là .

Lần này, nhấp vào nút để hình ảnh của sprite thay đổi tại thời điểm. Ngoài ra, sprite được thay đổi sẽ được đặt trước. Nếu bạn thay đổi nó, bạn có thể tạo và định cấu hình sprites động. Cách để thay đổi nó về cơ bản là giống nhau.

Kịch bản trông như thế này:

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;
  }
}

Trong trường, chuẩn bị sprite, đối tượng cần thay đổi và sprite sẽ là hình ảnh sau khi thay đổi.

GameObject Bạn có thể thấy rằng bạn có thể đặt đối tượng đích từ hệ thống phân cấp. Sprite Nó có thể là một câu hỏi về những gì để thiết lập trong .

Đối với điều này, tôi nghĩ rằng "loại kết cấu" của tệp hình ảnh được thêm vào dự án là "Sprite (2D và UI)" theo mặc định, vì vậy nó có thể được tự động coi là sprite. Vì vậy, bạn có thể coi nó như một sprite chỉ bằng cách đặt tệp hình ảnh.

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

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

OnClick Phương thức này dự kiến sẽ được gọi khi nút được nhấp. Tên phương thức là tùy ý.

OnClick Trong phương pháp, chúng tôi đang chuyển đổi hình ảnh. Vì là cái có SpriteRenderer thông tin hình ảnh, chúng ta lấy thành phần từ SpriteRenderer GameObject. SpriteRenderer Lớp có một thuộc tính nơi bạn có thể hoán đổi hình ảnh bằng cách đặt nó thành một sprite có sprite hình ảnh mới.

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

// 省略

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

Sau khi bạn lưu tập lệnh, hãy đính kèm nó vào đối tượng. Đối tượng được đính kèm là tùy chọn, nhưng trong trường hợp EventSystem này , nó được gắn vào . Vì có "Sprite mục tiêu" và "Sprite tiếp theo" làm tham số, "Sprite mục tiêu" có các đối tượng sprite từ hệ thống phân cấp, "Next Sprite" được đặt thành tệp hình ảnh đã thay đổi từ dự án.

Chỉ định phương thức từ OnClick tập lệnh được đính kèm với sự kiện EventSystem nhấp chuột của nút.

Chạy trò chơi và cố gắng nhấn nút. Nếu hình ảnh thay đổi, đó là một thành công.