CARD Class

CARD Game の基本 Class を作成します。
  1. [GameObject][2D Object][Sprite] に CARD Game を組み込みます。
    Unity を起動して2D選択で Project を生成します。
  2. Assets 上で右クリックして Create→Folder で Resources フォルダーを作成します。
    インターネットエクスプローラで Assets/Resources のフォルダーに card.gif をドラッグします。
  3. card.gif を選択して Sprite Editor で 56*65 の大きさで分割します。
    画像の切り分けは 美人のアニメーション を参照して下さい。
  4. メニューの [GameObject][2D Object][Sprite] を選ぶと、ヒエラルキービューに New Sprite が追加されます。
  5. Assets を選択して [Projectタブ][Createタブ][C# Script] から CARD.cs を作成して下さい。
    CARD Game の基本クラス CARD.cs の Version 1.0 です。
    Start() 関数で Resources から切り分けた Sprite をロードしてシャッフルします。
    ジョカーを除いた52枚を Shuffle(T,52); でシャッフルしています。
    ジョカーを含めるときは53で、二枚のジョカーを使うときは54でシャッフルして下さい。
    Sprite Get(int n) 関数はシャッフルされた n 番目の Sprite を取得する関数です。
    Sprite Next() 関数はシャッフルされた次の Sprite を取得する関数です。
    // Card Class  Version 1.0
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class CARD : MonoBehaviour
    {   private Sprite[] image;         //切り分けた Crad Image
        private int[] T = new int[52];  //シャッフルする配列
        public  int     num = 0;        //次のカード番号
    
        void Start ()
        {   image = Resources.LoadAll<Sprite>("");
            Debug.Log("image Length -> " + image.GetLength(0));
            Shuffle(T,52);
        }
        // カードをシャッフルする
        public void Shuffle(int[] t, int n)
        {   int     i,j;
            float   wk;
            for(i=0; i<n; i++)     t[i]= -1;
            for(i=0; i<n; i++)
            {   wk = Random.value * n;
                j = (int)wk; 
                for(; t[j]!=-1; j=(j+1)%n);
                t[j]= i;
            }
        }
        // シャッフルした n 番目のカード
        public Sprite Get(int n)
        {   if (n>51)   return null;
            return image[T[n]];
        }
        // シャッフルした次のカード
        public Sprite Next()
        {   if (num>51) return null;
            return image[T[num++]];
        }
    }
    
  6. Assets を選択して [Projectタブ][Createタブ][C# Script] から NewBehaviourScript.cs を作成して下さい。
    CARD card; が CARD Game の基本クラスで FindObjectOfType<CARD>(); で取得します。
    SpriteRenderer の .sprite にシャッフルされた先頭のカードを設定すると一枚目のカードが描画されます。
    card.Next(); でシャッフルされた次のカード(Sprite)を取り出します。
    Update() 関数では、マウスのクリックで次のカードに切り替えます。
    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    
    public class NewBehaviourScript : MonoBehaviour
    {   SpriteRenderer  SpRender;
        CARD    card;
    
        void Start ()
        {   SpRender = gameObject.GetComponent<SpriteRenderer>();
            card = FindObjectOfType<CARD>();
            SpRender.sprite = card.Next();
        }
    
        void Update ()
        {   if (Input.GetMouseButtonDown(0))
            {   SpRender.sprite = card.Next();
            }
        }
    }
    
  7. CARD.cs と NewBehaviourScript.cs を New Sprite にアタッチします。
  8. 画像が小さいので Main Camera の Inspector から Size を1にします。
    再生ボタンで実行すると切り分けた画像がシャッフルされて描画されます。
    マウスのクリックで次の画像に切り替わります。
    メニューから [Save Scene] を選び Main の名前で保存して終了して下さい。
  9. このプロジェクトを作成している時に NullReferenceException が発生しました。
    原因は様々ですが、今回は Script Execution Order が影響していました。
    詳細は Msg Class を参照して下さい。

[Next Chapter ↓] CARD 5
[Previous Chapter ↑] Card View

前田稔の超初心者のプログラム入門
超初心者のプログラム入門(Unity)