게임 실행 중 스프라이트 이미지 변경

페이지 업데이트 :
페이지 생성 날짜 :

검증 환경

윈도우
  • 윈도우 11
유니티 에디터
  • 2020.3.25에프1
입력 시스템 패키지
  • 1.2.0

이 팁의 전제 조건

다음 설정은 이러한 팁을 설명하기 위한 전제 조건으로 미리 구성되어 있습니다.

스프라이트 이미지 변경 정보

2D 게임을 할 때 볼 수 있듯이 스프라이트로 설정된 이미지가 중간에 전환되는 장면을 자주 볼 수 있습니다. 예를 들어, 처음에는 문이 닫혀 있지만 열면 열린 문으로 표시됩니다.

이를 위해 닫힌 문과 열린 문이라는 두 개의 개체를 준비하고 표시하거나 숨길 수 있습니다. 여기서는 스프라이트의 이미지를 전환하여 이를 달성하려고 합니다.

프로젝트에 이미지 추가 및 배치하기

이번에는 변경 전의 이미지와 변경 후의 이미지가 필요하므로 2 개 준비하십시오. 여기서 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 무엇을 설정할 것인가의 문제일 수 있습니다.

이를 위해 프로젝트에 추가되는 이미지 파일의 "텍스처 타입"은 기본적으로 "스프라이트 (2D 및 UI)"이므로 자동으로 스프라이트로 처리 할 수 있다고 생각합니다. 따라서 이미지 파일을 설정하는 것만으로 스프라이트로 취급할 수 있습니다.

/// <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"는 계층의 스프라이트 오브젝트를 가지고 있습니다. "Next Sprite"는 프로젝트에서 변경된 이미지 파일로 설정됩니다.

단추의 click 이벤트에 EventSystem 첨부된 스크립트에서 OnClick 메서드를 지정합니다.

게임을 실행하고 버튼을 눌러보십시오. 이미지가 바뀌면 성공한 것입니다.