5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Unity】かわいい2Dパズルゲームを作ったよ!

Posted at

【開発環境】
Unity Version 2018.3.13f1
VisualStudio2017 Version 15.9.10
言語:C#

目次

  1. はじめに
  2. 使いまわしを意識したコーディング
  3. ステージデータをScriptableObjectで作成
  4. セーブデータ周りで躓いた事
  5. あとがき

はじめに

初めてUnityを使ってゲームを作りました。
制作を通して気づいた点、躓いた点をお伝え出来たらと思います。
Unityを使えば簡単にゲームが作れる!と聞いていましたが、
初めて故に躓くことも多く、とても良い学びになりました。

下記URLよりダウンロードできます。
よければ遊んでいただけると嬉しいです。
https://www.freem.ne.jp/win/game/20652
qiita1.png

使いまわしを意識したコーディング

・ボタンを押したら、オブジェクトを有効/無効
・ボタンを押したら、ゲームフロー(ステータス)変更
等々、1つのスクリプトをアタッチするだけで動作するように意識しました。
使いまわせるように作ると実装が楽になりますね!

以下は、
・ボタンを押したら、オブジェクトを有効/無効
の例です。        
変更したいオブジェクトを入れてチェックボックスで有効/無効を決めます。
qiita2.png

public class SetActiveButton : MonoBehaviour
{
 
    //=========================
    // SerializeField.
    //=========================
    [SerializeField] SetActiveObject[] m_setactiveObjects = null;
   
    //=========================
    // Public.
    //=========================
    [System.Serializable]
    class SetActiveObject 
    {
        public GameObject m_gameObject;
        public bool m_enabled;
    }

    //=========================
    // Public Method.
    //=========================
    public void OnClick()
    {
        if (m_setactiveObjects.Length > 0)
        {
            foreach(var setactiveObject in m_setactiveObjects)
            {
                setactiveObject.m_gameObject.SetActive(setactiveObject.m_enabled);
            }
        }
        else
        {
            Debug.LogError("m_setactiveObjects is empty!");
        }
    }
}

ステージデータをScriptableObjectで作成

ステージデータはデータ作成用のSceneを用意して、ステージの幅、高さ、ピースの種類変更など変更して作成しました。
ScriptableObjectを使用するメリットとしては、Inspector上で値を確認や編集が出来ること。
JSONでも可能だとは思いますが、ScriptableObjectの方が圧倒的に見やすいと思います。
qiita4.png
qiita3.png

参考記事:
http://kan-kikuchi.hatenablog.com/entry/What%27s_Scriptableobject
https://anchan828.github.io/editor-manual/web/scriptableobject.html
https://techblog.kayac.com/unity_advent_calendar_2016_6

セーブデータ周りで躓いた事

セーブデータ管理は当初PlayerPrefsを使おうと思っていましたが、
__Windowsでは保存場所がレジストリ__になるため諦めました。
そのため、JSONを使ってセーブデータを作ることにしました。
JsonUtilityを使って簡単に操作できるので使いやすいです!

しかし、セーブデータを作れたはいいものの暗号化していないので、
簡単にデータを見られてしまいます。
なので、以下の方法で暗号化を考えました。

・セーブ時にjsonUtilityから取得したstringをbyteに変換してからセーブする
結論から言うと断念しました。
byteに変換するところまでは確認できましたが、いざセーブしようとするとできませんでした……。
System.Text.Encoding.UTF8.GetBytes()周りを調べましたが原因は掴めませんでした。
そのため以下の方法に方針を変えました。

・セーブ時にjsonUtilityから取得したstringを1文字ずつ文字コードをずらす
とても単純ですが、これでセーブデータを見られてもすぐには分からなくなりました。

        string json = JsonUtility.ToJson(m_saveData);
        char[] data = json.ToCharArray();

        // 暗号化.
        for (int index = 0; index < data.Length; index++)
        {
            data[index] += (char)CONVERT_KEY;
        }

参考記事:
PlayerPrefs
http://sat-box.hatenablog.jp/entry/2017/06/19/194308
string→byte
https://www.ipentec.com/document/csharp-string-to-bytearray
jsonUtility
https://creive.me/archives/14311/

あとがき

やっぱりゲーム作りは楽しいです。
今後はもっと爆速で開発できるよう腕をあげていきたいですね。
至らないところもありますが、ここまで読んでいただきありがとうございました。
少しでもお役に立てれば幸いです。

Twitter:
@tofu_doon
ブログ:
https://tofu-doon.hatenablog.com/

5
5
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?