在游戏运行时更改精灵图像
验证环境
- 窗户
-
- 窗户11
- Unity 编辑器
-
- 2020.3.25f1
- 输入系统包
-
- 1.2.0
此提示的先决条件
以下设置已预先配置为解释这些提示的先决条件。
关于更改精灵的图像
正如您在玩 2D 游戏时所看到的,您经常会看到一个场景,其中设置为精灵的图像在中间切换。 例如,门一开始是关闭的,但打开它后,它显示为打开的门。
为此,您可以准备两个对象,一个关闭的门和一个打开的门,并显示或隐藏它们。 在这里,我们将尝试通过切换精灵的图像来实现它。
在项目中添加和置入图像
这一次,您需要更改前的图像和更改后的图像,因此请准备两个。
此处,UnityTips
UnityTipsChange
文件名分别为 。
从项目中删除 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
图像信息的组件,因此我们从游戏对象中获取组件 SpriteRenderer
。
SpriteRenderer
该类具有一个属性,您可以在其中通过将图像设置为具有 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
指定方法。
运行游戏并尝试按下按钮。 如果图像发生变化,则表示成功。