ゲーム開発備忘録

ゲームプログラマー UE4・5向けの記事を書いておりますので見ていただけるとありがたいです。

【Unity】内閣府のCSVデータから祝日を記述したカレンダーを作った話

目次

 

はじめに

内閣府からダウンロードできるCSVデータからカレンダーに祝日を実装する手段です。

祝日は毎年変化するためこのデータをもとに読み込めるようにします。

 

カレンダーの作成には以下の記事で分かりやすく解説されているのでそちらを参考に作成しました。

qiita.com

解説

<処理内容>

csvデータを読み込み、日付と祝日名を抽出します。

カレンダー生成時に日付が一致している場合は日数に祝日名を追加して表示します。

 

CSVデータの入手と変換

内閣府のサイトに移動して以下のcsvを入手します。

www8.cao.go.jp

 

unityはUTF-8形式に変換しないと日本語を正しく表示できないので、csvをメモ帳で開きUTF-8に変換します。

 

②Unityにインポート

CSVをロードする仕組みを後に作るので、Assets/Resources/CSV/syukujitsuのファイル構造でインポートします。

日本語が正しく表示されているか確認しましょう。

CSVの読み込み

以下のスクリプトをコピペしてください。

CSVデータを取得して名前とDateTimeの配列にデータを入れるスクリプトです。

昔の日付は判定に不必要なので配列生成時に除外するようにしたほうが判定に不要な処理が走らないので今年より前は除外しています。

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

public class LoadHolidayData
{
    static TextAsset csvFile;
    static List<string> holidayData = new List<string>();

    public List<string> holidayName=new List<string>();
    public List<DateTime>  holidayDataTime=new List<DateTime>();
    static void CsvReader()
    {
        csvFile = Resources.Load("CSV/syukujitsu") as TextAsset;
        StringReader reader = new StringReader(csvFile.text);
        while (reader.Peek() != -1)
        {
            string line = reader.ReadLine();
            holidayData.Add(line.Split(','));
        }
    }
    public void Init()
    {
        CsvReader();
        for (int i = 1; i < holidayData.Count; i++)
        {
            string[] part = holidayData[i][0].Split('/');
            if (int.Parse(part[0])>=DateTime.Now.Year)
            {
                holidayDataTime.Add(DateTime.Parse(holidayData[i][0]));
                holidayName.Add(holidayData[i][1]);
            }
        }
    }
}

 

 

④使い方

適当なスクリプト(今回はカレンダーを生成するスクリプト)に

LoadHolidayDataを生成してInit()を呼ぶとロードされます。

取得方法はログの通りです。

今年以降の祝日が取得できました。

あとは生成箇所で判定すれば完成です。

最後に

皆様の応援が投稿のモチベーションになりますので

コメントやTwitterのフォローなどしていただけるとありがたいです。

それではよきゲーム開発を。