日々是好日~every day is a good day~

日常の中の非日常の備忘録

【Unity】カードをめくる

Unityでカードをめくる(回転させる)方法です
カードに限らずオブジェクトを回転させる時に使えます
1.カードの表と裏の画像を準備

ちなみにこの画像は『いらすとや』さんの画像を使わせて頂いてます
www.irasutoya.com
2.裏の画像をシーン内にドラッグ&ドロップ
インスペクターの位置X Yは0にしておく

3.プロジェクトタブにカーソルを持っていき右クリックでCardTurnというスクリプトを作成

4.CardTurnを編集

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CardTurn : MonoBehaviour
{
    public float speed = 300.0f;  // 回転スピード
    public Sprite cardFront;    //カードの表の絵
    private Sprite cardBack;    //カードの裏の絵
    private bool isOpen = false;    //true:表 false:裏
    private bool isTurn = false;    //true:回転中 false:停止している
    
    // Start is called before the first frame update
    void Start()
    {
        cardBack = GetComponent<SpriteRenderer>().sprite;
    }

    // Update is called once per frame
    void Update()
    {
        //カードが停止している時スペースキーを押されたらカード回転
        if (Input.GetKeyDown(KeyCode.Space) && !isTurn)   
        {
            StartCoroutine(Turn());
        }
    }
    
    IEnumerator Turn()
    {
        isTurn = true;
        Vector3 cardAngle = transform.eulerAngles;
        
        if (!isOpen)     //裏→表
        {
            cardAngle.y = 0f;
            //中間地点までめくる
            while (cardAngle.y < 90f)
            {
                cardAngle.y += Time.deltaTime * speed;
                transform.eulerAngles = cardAngle;

                yield return null;
            }
            cardAngle.y = 90f;
            transform.eulerAngles = cardAngle;
            //カードの絵を変更する(裏→表)
            GetComponent<SpriteRenderer>().sprite = cardFront;
            //中間地点から最後までめくる
            while (cardAngle.y < 180.0f)
            {
                cardAngle.y += Time.deltaTime * speed;
                transform.eulerAngles = cardAngle;
                yield return null;
            }
            cardAngle.y = 180f;
            transform.eulerAngles = cardAngle;
            isOpen = true;
        }
        else   //表→裏
        {
            cardAngle.y = 180f;
            //中間地点までめくる
            while (cardAngle.y > 90f)
            {
                cardAngle.y -= Time.deltaTime * speed;
                transform.eulerAngles = cardAngle;

                yield return null;
            }
            cardAngle.y = 90f;
            transform.eulerAngles = cardAngle;
            //カードの絵を変更する(表→裏)
            GetComponent<SpriteRenderer>().sprite = cardBack;
            //中間地点から最後までめくる
            while (cardAngle.y > 0f)
            {
                cardAngle.y -= Time.deltaTime * speed;
                transform.eulerAngles = cardAngle;
                yield return null;
            }
            cardAngle.y = 0f;
            transform.eulerAngles = cardAngle;
            isOpen = false;
        }
        isTurn = false;
    }
}

5.CardTurnをカードのオブジェクトにドラッグ&ドロップ

6.カードの表の画像をカードのインスペクターのスクリプトにドラッグ&ドロップ

これで実行するとスペースキーを押すたびにカードをめくったりふせたりできます

Unity習得中です
アドバイス等あればよろしくお願いします