Unity2Dゲームでカードをひっくり返すのを実装してみます。
はじめに
Unityのバージョンは「2021.3.14f1」で作成しています。
2Dゲームで「カードをひっくり返す」ような動きを実装していきます。カードを表から裏に、裏から表にフリップするような動きです。トランプゲーム、カードゲームに利用するイメージです。
下記の画像を利用していきます。inkscapeで簡単に作成したものです。真っ黒がカードの裏、ひよこがカードの表です。

実装開始
スクリプトで画像の変更を実装してから、ひっくり返す動きを追加していきます。
画像の設定
まずは画像をUnityに取り込みます。

画像のSpriteModeを「Multiple」に変更して「SpriteEditor」を選択します。

画像を表と裏の2枚に分割します。「Slice」からサイズと余白を調整して「Apply」で決定します。

カードの裏面をHierarchyにドラッグアンドドロップして「BoxCollider2D」を追加します。

スクリプトの作成
下記スクリプトを作成します。「OnMouseDown」(マウスクリック)でカードのSpriteを変更しています。isFlipでカードが表か裏かを保持しています。
using UnityEngine;
public class card : MonoBehaviour
{
[SerializeField] private Sprite frontSprite;
[SerializeField] private Sprite backSprite;
private SpriteRenderer rend;
private bool isFlip;
private void Awake()
{
rend = GetComponent<SpriteRenderer>();
isFlip = false;
}
private void OnMouseDown()
{
isFlip = !isFlip;
if (isFlip)
rend.sprite = frontSprite;
else
rend.sprite = backSprite;
}
}
スクリプトをカードに追加して、パラメータの画像をセットします。

実行してマウスでクリックすると下記の様な感じになります。画像を変更しているだけなのでひっくり返す動きはないです。

カードをひっくり返す
Sceneの表示を2Dから3Dにしてみます。ここでRotationのY軸を変更するとカードが回転します。90で垂直になるのが確認できます。

これをスクリプトで実装してカードをひっくり返します。
今回はDOTweenを利用していきます。DOTweenのアセットの追加方法は下記で記事にしてあります。
スクリプトの変更
スクリプトを下記に変更します。Y軸を90まで動かしたらカードの画像を変更して、Y軸を0に戻しています。
using DG.Tweening;
using UnityEngine;
public class card : MonoBehaviour
{
[SerializeField] private Sprite frontSprite;
[SerializeField] private Sprite backSprite;
private SpriteRenderer rend;
private bool isFlip;
private float FlipDuration = 0.5f;
private void Awake()
{
rend = GetComponent<SpriteRenderer>();
isFlip = false;
}
private void OnMouseDown()
{
isFlipping = true;
transform.DORotate(Vector3.up * 90.0f, FlipDuration).OnComplete(() =>
{
isFlip = !isFlip;
if (isFlip)
rend.sprite = frontSprite;
else
rend.sprite = backSprite;
transform.DORotate(Vector3.zero, FlipDuration);
});
}
}
実行すると下記の様な感じです。

