在游戏运行时更改精灵图像

更新页 :
页面创建日期 :

验证环境

窗户
  • 窗户11
Unity 编辑器
  • 2020.3.25f1
输入系统包
  • 1.2.0

此提示的先决条件

以下设置已预先配置为解释这些提示的先决条件。

关于更改精灵的图像

正如您在玩 2D 游戏时所看到的,您经常会看到一个场景,其中设置为精灵的图像在中间切换。 例如,门一开始是关闭的,但打开它后,它显示为打开的门。

为此,您可以准备两个对象,一个关闭的门和一个打开的门,并显示或隐藏它们。 在这里,我们将尝试通过切换精灵的图像来实现它。

在项目中添加和置入图像

这一次,您需要更改前的图像和更改后的图像,因此请准备两个。 此处,UnityTipsUnityTipsChange文件名分别为 。

从项目中删除 Sprite 并放置它。 单击该按钮时,图像会发生变化,因此请从 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)”,因此可以自动将其视为 Sprite。 因此,您只需设置图像文件即可将其视为精灵。

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

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

OnClick 单击按钮时应调用该方法。 方法名称是任意的。

OnClick 在该方法中,我们正在切换图像。 由于是具有 SpriteRenderer 图像信息的组件,因此我们从游戏对象中获取组件 SpriteRendererSpriteRenderer 该类具有一个属性,您可以在其中通过将图像设置为具有 sprite 新图像的精灵来交换图像。

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

// 省略

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

保存脚本后,将其附加到对象。 要附加的对象是可选的,但在本例 EventSystem 中,它被附加到 。 由于有“Target Sprite”和“Next Sprite”作为参数,因此“Target Sprite”具有层次结构中的Sprite对象, “Next Sprite”设置为项目中更改的图像文件。

从附加到按钮的 click 事件 EventSystem 的脚本中 OnClick 指定方法。

运行游戏并尝试按下按钮。 如果图像发生变化,则表示成功。