久しぶりの更新ですが、いつものようにサボり…
ではなくて、作りたい物ができたので集中しておりました。
作っていた物なんですが…
最近、何もしてないので激太りしてまして(..*) オハズカシイ…
ダイエットしなきゃ!となりました。
以前、体重管理アプリを作ったのですが、
カレンダーに体重を入力して保存するだけのものでした。
アプリで作ったCSVファイルを、Excelでグラフ化していたのですが、
非常に面倒でアプリの意味が無いと言うか…
当時は、カレンダー作成や保存処理で手一杯だったので、
グラフなんて無理と諦めていました。
すっかり忘れていた体重管理アプリなんですが、
グラフを追加したくなったので、勉強しておりました。
そんな訳で、ブログの更新が… (;^_^A アセアセ・・・
グラフを作るならLineRendererなんですが、
World座標管理、uGUIに乗せれない… 使いづらい所です。
ただ線を引くだけなら良いのですがね~ ( ̄~ ̄;) ウーン
仕方が無いのでアセットに頼る事にしたのですが…
GraphMaker $45
GraphAndChart $70
DynamicLineChart Free
有料アセットは、回避したいので、DynamicLineChartを入れてみました。
ただ、少し思っていたのと違ったので、保留にして違うのを探す事に…
ヒットしたのが、
unity-ugui-XCharts
https://github.com/monitor1394/unity-ugui-XCharts
![折れ線グラフ⑩.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291A9-thumbnail2.jpg)
中国の方がGitHubで公開されているプラグインです。
このスクショをみても分かりますが、いろいろなグラフが作成できるようです。
これは入れない手はないと言う事で、早速インポートをします。
まず、上にもリンク先を書いておきましたが、
GitHubのunity-ugui-XChartsでファイルをDLしておきます。
ZIPファイルの場合は、分かり易い場所に解凍します。
今回は、デスクトップに解凍しました。
![折れ線グラフ⑭.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291AD-thumbnail2.jpg)
ファイルが準備できたので、Unityを立ち上げて、適当なプロジェクトを作成します。
今回は、ChartTestにしておきます。
余談ですが、プラットホームはおなじみのandroidでっす。
Unityの準備ができたらXChartsをインポートします。
インポートには、PackageManagerを使います。
タブメニューのウィンドウ→PackageManagerをクリックすると
![折れ線グラフ⑪.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291AA-thumbnail2.jpg)
PackageManagerが開くので、左上の+ボタンをクリックします。
![折れ線グラフ⑬.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291AC-thumbnail2.jpg)
項目の中からAddPackagefromdisk…をクリックして、ファイルを指定します。
![折れ線グラフ⑯.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291AF-thumbnail2.jpg)
解凍したunity-ugui-XCharts-masterから
Assets→XChartsと開いて、その中にあるpackage.jsonを選択してインポートします。
インポートが終わると
![折れ線グラフ⑰.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291B0-thumbnail2.jpg)
XChartsが表示されます。
PackageManagerを閉じて確認します。
![折れ線グラフ⑱.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291B1-thumbnail2.jpg)
タブと右クリックメニューにXChartsの項目が出来ていればOKでっす。
このXChartsの良いところは、uGUIで設定できるところです。
Canvasを用意してUIとして追加できます。
移動やスライドが可能になるのがありがたいんですね~ヽ(´▽`)/~♪
早速、UI用のCanvasを設置してグラフを追加してみます。
![折れ線グラフ⑲.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291B2-thumbnail2.jpg)
体重管理なので、折れ線グラフを作ります。
UI→XCharts→LineChart
![折れ線グラフ⑳.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E291B3-thumbnail2.jpg)
少し小さめのグラフが表示されて
ヒエラルキーにLineChart、_xcharts_が作成されます。
_xcharts_オブジェクトは触らないので、そのままにしておいて、
LineChartの方を触っていきます。
LineChartの幅1000×高さ500にするとスクショの大きさになります。
続いて、LineChartのコンポーネントを見ると
![折れ線グラフ㉑.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E38991-thumbnail2.jpg)
何やら項目がいろいろとあますが…
全部を説明しきれないので、簡単に使う所だけ
・Theme
グラフの見た目です。3タイプから選択できます。
・Title
グラフ上部に小さい文字がありますが、それです。
・Tooltip
折れ線のプロットされてる部分の情報を表示
・XAxix0、YAxis0
X軸とY軸に表示する文字やレンジを設定
この項目を、スクリプトから更新すれば
グラフを作る事ができるようになっています。
XChartsの使い方は、チュートリアル:XChartsを使い始める5分
ここを参考にしてみます。
最初にmanifestファイルを変更するになっていますが、
私、読み飛ばしていました。
変更しなくても使えるのですが、Unityでエラーが出ます。
気になる方は、manifestファイルの変更をして下さい。
スクリプトは、ChartManagerとしておきます。
ChartManager
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using XCharts;
public class ChartManager : MonoBehaviour
{
/// <summary>
/// ゲームオブジェクト・コンポーネント
/// -----------------------------------------
/// </summary>
//パブリック
[Header("LineChart本体")]
public GameObject LineChart; //LineChart本体
//プライベート
private LineChart linechart; //LineChartコンポーネント
/// <summary>
/// メソッド
/// -----------------------------------------
/// </summary>
// Start is called before the first frame update
void Start()
{
linechart = LineChart.GetComponent<LineChart>();
}
// Update is called once per frame
void Update()
{
}
}
LineChartをスクリプトから操作する為に、
using XCharts;を宣言します。
LineChartのデータ変更には、コンポーネントにアクセスする必要があるので、
スタートで取得してキャッシュしておきます。
Unityに戻って、スクリプト用のオブジェクトと変数の設定をします。
![折れ線グラフ㉒.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E38992-thumbnail2.jpg)
空のオブジェクトを作ってChartManagerにリネームしてスクリプトをアタッチします。
設定した変数にLineChartをアタッチすれば準備OK!
続いて初期化をします。
LineChartは、デフォルトで数値が入力されているようで、
このままグラフを作成すると初期のグラフデータも残っていて、
反映されてしまいます。
このデータを削除します。
ChartManager
// Start is called before the first frame update
void Start()
{
linechart = LineChart.GetComponent<LineChart>();
linechart.RemoveData();
linechart.AddSerie(SerieType.Line);
}
コンポーネント取得後にリムーブとラインタイプをセットします。
続いて、タイトルの編集をします。
タイトル表示は、コンポーネントのチェックをON・OFFでも切り替えられます。
今回は、タイトルONと文字の大きさや色をスクリプトから編集します。
ChartManager
// Start is called before the first frame update
void Start()
{
linechart = LineChart.GetComponent<LineChart>();
linechart.RemoveData();
linechart.AddSerie(SerieType.Line);
TitleSet();
}
//タイトル編集
private void TitleSet()
{
linechart.title.show = true;
linechart.title.textStyle.fontSize = 60;
linechart.title.textStyle.color = new Color(0f, 0.2f, 1f, 1f);
linechart.title.text = "体重";
}
これを実行すると
![折れ線グラフ㉓.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E38993-thumbnail2.jpg)
殺風景ですが無事にタイトルの編集ができました。
続いて、体重と言う事でY軸のレンジを設定します。
LineChartのインスペクターからYAxis0をクリックすると中身が見れるので、
![折れ線グラフ㉔.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E38994-thumbnail2.jpg)
タイプを値にするとMinMaxTypeの項目がでてきます。
ここをカスタムにする事で上下限の設定ができるようになります。
手動でもできますがスクリプトから変更してみます。
ChartManager
// Start is called before the first frame update
void Start()
{
linechart = LineChart.GetComponent<LineChart>();
linechart.RemoveData();
linechart.AddSerie(SerieType.Line);
TitleSet();
YAxisSet();
}
//Y軸のレンジ設定
private void YAxisSet()
{
linechart.yAxises[0].type = Axis.AxisType.Value;
linechart.yAxises[0].minMaxType = Axis.AxisMinMaxType.Custom;
linechart.yAxises[0].min = 50;
linechart.yAxises[0].max = 70;
linechart.yAxises[0].splitNumber = 5;
}
50kg~70kgまでを5分割してみました。
これでPLAYすると
![折れ線グラフ㉕.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E38995-thumbnail2.jpg)
5kg単位のY軸が設定されます。
スプリット数で細かく表示を変えられるので好みで調整します。
後は、体重データを上書きすればグラフは完成です。
データを用意するのが大変なので、チュートリアルの方法で入力してみます。
30日間を想定してみました。
ChartManager
// Start is called before the first frame update
void Start()
{
linechart = LineChart.GetComponent<LineChart>();
linechart.RemoveData();
linechart.AddSerie(SerieType.Line);
TitleSet();
YAxisSet();
XAxisSet();
}
//30日間を想定して入力
private void XAxisSet()
{
linechart.xAxises[0].splitNumber = 30;
linechart.xAxises[0].boundaryGap = false;
for(int i = 1; i < 31; i++)
{
linechart.AddXAxisData(i + "日");
linechart.AddData(0, Random.Range(55, 65));
}
}
・splitNumber 分割数
・boundaryGap X軸の文字表示位置
・AddXAxisData X軸の文字表示
・AddData X軸のデータ
データは適当ですが、グラフは無事に作成されました。
![折れ線グラフ㉖.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E38996-thumbnail2.jpg)
TooltipをONにしておくと
![折れ線グラフ㉗.jpg](https://kerotan-factory.up.seesaa.net/image/E68A98E3828CE7B79AE382B0E383A9E38395E38997-thumbnail2.jpg)
カーソルをグラフの上に移動すると、プロットされた部分の内容が、
表示されるようになります。
スクリプトのコマンドは多いのですが、uGUIとして使えるのは便利かと思います。
少し難点もあります。
この方法では、連続データしかグラフ化できない点です。
5日目だけ修正するとかができません。
再度、データ修正後に一からグラフを書き直す必要があります。
また、データが歯抜けの場合、飛ばす事ができません。
なので、歯抜けの部分が無くなって左詰めにプロットされます。
この辺りは、タイプをカテゴリにすると分離データとして扱えるみたいですが、
勉強不足でまだ使えません(ノ_<。)うっうっうっ
とは言え、グラフが使えるのは大きいので覚えると活用できそうです。
もう少し使い方を勉強して分かったら記事にしたいと思います。
ただUnityでグラフって、ニーズがなさそうですが… (;^_^A
ま、ニッチな情報を提供するのもアリと言うことで、
今後もマニアック路線を突き進めたらいいなと思います。
(;^o^) \(ToT )あんたほんとにそれでいいの
長くなりましたが今回はこのへんで
( ^ 0 ^ )/~~~~see you again
2020/09/17追記
X軸にデータを入力するスクリプトを修正しました。
X軸のsplitNumberは、一度でいいのでループに入れてる意味が
ありませんでした。(゜゜;)ゴメンネ・・・
boundaryGapの設定を追加しました。
Gapがあると等分線の間に日付が表示されます。
falseで等分線上に日付が表示されます。
この記事へのコメント