「TasukQuest」をどうやって作ったかのメモ書きの続きです。
前回の記事はこちらです。
続きを読む「TaskQuest」をどんな感じで作っていったか軽くまとめておきたいと思います。
2019.1.11 実装編も書きました!
Making of TaskQuest<実装編> - ゲームエフェクトデザイナーのブログ (新)
これまでちょっとしたタスク管理を個人的に行う際に、メモ帳などのテキストエディタで行ったり、エクセルで行ったり、アナログな付箋紙で行ったりしていましたが、どれも不便に感じていました。
テキストエディタだと、進行中のタスクや完了したタスクのグループ分けを手作業でやるというのは非効率すぎます。。
エクセルのソートやフィルタでそのあたりは吸収できますが、以下のような不満があります。
・起動にちょっと時間がかかる
・タスク管理面では必要以上にメニュー等が多くて余分な面積を取る
なのでウインドウサイズを小さくして画面の隅っこに置いて使うには不向き
・「完了」などタスクのステータスに応じたフィルタリングの操作がやや煩雑
⇒ こちらはVBAでボタン作ったりすればフォローできますね
そこで「Backlog」のようなすっきりしたルックでWindows用のスタンドアローンなツールがあればなあと思っていました(Webベースだと個人でラフに使う分には、リストのコピペなどレスポンス良くできずあまり好みでは無いので)。
C#でWindowsフォームアプリを作るようになってからは、タスク管理アプリも「いつか作りたいな」といった感じで制作候補の1つになっていました。
ちなみに、ドット絵のキャラが成長する要素は最初から入れたいと思っていました。
例えば「Yahoo!知恵袋」でもスコアを稼いでグレードを上げていくようなシステムが入っていますが、こういったゲーミフィケーション的な要素は世の中の色んなものに入っていて欲しいと昔から思っていたので、タスク管理を楽しくするためにも欲しい機能だなあと。
とは言え、Windowsフォームで使えるコントロール(ボタンやリストなどのGUIパーツ)を使ってどうしたら再現できるのか悩んでいました。
当時は「ListFusen」のように2カラムなスタイルにして、左側にはタスクをリスト上に並べて、クリックすると右側に詳細が表示されるような形かな~となんとなく思っていましたが、こちらでも紹介している書籍「作って覚えるVisual C# 2017 デスクトップアプリ入門」の家計簿アプリをあらためてなぞってみた際に「家計簿アプリのアレンジでいける!」と思って、具体的にアプリの中身を考え始めました。
スマホのメモアプリに最初にざーっと必要な要件を書き出したのがこちらです(長い!)。
タスク管理アプリ「Task Quest」
◆トップ画面今やっているタスクをトップに表示する?
→ 悪くないが頻繁にアプリにアクセス必要になる 面倒がられそうそしてタスクリストは普段消しておき、ボタン押下ですぐリストの開閉ができるようにする?
→ 同上また、今やってるタスク表示の横に完了ボタンを置くとなお快適に?
→ 完了ボタンをトップに置くのはありかも 但し実工数を付け忘れそうタスクが終わったら完了にする流れはこの方が習慣付けやすいかも。
また、画面もスッキリする。敵と戦ってるようなキャラアニメも乗せたい
アイコンは
・新規タスク追加
・選択タスクの削除
・完了にする情報は
・タスク総数 0 / 0 (個)
・総工数 0 / 0 (日)
・Lv
・経験値 見せない方が良いかも
◆リストの挙動タスクをダブクリで設定画面が開く
タスクの難易度に応じた敵アイコン
概要欄は文字数を制限して省略する
◆リストの表示モードフィルタは完了以外、完了、すべて
大カテゴリでのフィルタも?検索ありにする?
大カテゴリ、内容、ID、備考で可能?
◆設定画面ボタンはOK、トップに表示、完了
完了時には実際の工数を入力させる?
オプションで選べると良さそう
最初に設定した工数と差分を出して見積もり精度を表示する?
◆リスト大カテゴリ プルダウン?
内容
ID
難度 プルダウン 固定
工数
進捗 プルダウン 固定
備考カテゴリのプルダウンはどうする?
ありの方が快適になるが、後から変更すると一気に全て変わってしまうが‥
あると登録時には快適になる
しかしカテゴリ登録の手間は増える
カテゴリ登録の画面と設定保存が必要
とりあえず無し?設定ファイル書き換えも可能にする?
◆レベル累計の経験値でレベルが決まる
タスク完了時にレベルアップ判定
専用のメッセージと演出を入れたい経験値
タスク登録
・基礎10 * 難度 * 工数h
・難度倍率は 1, 2, 3
例:難易度中の8時間作業
10 * 2 * 8 = 160
・難度は含めない方が良いかも
・工数は時間単位
・工数は含めない方が良いかも
固定値でいくなら基礎ポイントは高め
50くらい?
タスク最初に20個登録して1000
1タスク平均3hとして1日3タスク消化
150取得、1週間750、1ヶ月3000
1年36000 タスク登録だけでタスク変更
・ひとまず考慮しない?
・ちゃんと差分を増減させる?
・タスク完了を差し戻した場合は考慮しないといけない
何もしなくても経験値を増やせちゃうタスク削除、未完
・ひとまず考慮しない?
・登録と同じ経験値をマイナスする?タスク完了
・基礎30 * 難度 * 実工数
・難度倍率は 1, 2, 3
例:30 * 2 * 8 = 480
難度小1日240、中480、大720
難度中で1週間2400、1ヶ月9600
1年115200
タスク登録を足すと151200細かくタスクを登録した方がメリット持たせるには、タスク登録は固定の経験値が良いかも
実装も計算もシンプルになる
レベルダウンも無くせる wiz..予定より早く終わらせた場合は?
ボーナス?
見積もり精度の方が重要かも見積もり精度も考慮させたい
見積もり精度ボーナス?
見積もり精度の計算
工数を1として実工数の割合を出す
1はボーナス * 1.2
0.8〜1.2はボーナス *1.1全タスク完了ボーナス?
タスク沢山登録するメリット無くなるどれくらいLvUpさせる?
1年使ってくれたら万々歳すぎる
Lv50くらい?
1年の経験値が150000としたら
単純に均等割りで1Lvに3000
対数的にする?
最初だけはサクサク上げたい
使い始めの初日、200でLv2とか
500でLv3、900でLv4、1400でLv5
タスク20個登録の難度中8hでLv5
◆レベルアップ時の演出ファンファーレを入れたい
メッセージを入れたい
・レベル、タスク総数、総工数
・キャラステータス持たせる?
ランダム要素に上がりやすさを加える
難度(優先度)高い 力
難度(優先度)低い 素早さ
工数大きい 体力 3h〜くらい?
工数小さい 素早さ 1〜2hくらい?
コメント書いてたら 運の良さ
見積もり精度高いと 賢さ
二律背反は無いが、力と体力どちらも高い時は素早さが低いレベルアップ時
優先度 80% 力or素早さ+1 20% 無し
工数 80% 体力or素早さ+1 20% 無し
コメント 80% 運+1 20% 無し
総合見積もり精度を出す
70%以上で賢さ+1 満たないと無しステータスの偏りでグラ変える?
一定条件で忍者/ロード/侍とか wiz○下級クラス
Lv10以上
見積もり精度関係なし
最も高いステータスの割合で決まる
力 = ウォーリア
体力 = クレリック
素早さ = ローグ○中級クラス
Lv20以上
見積もり精度関係なし
力 + 体力 = ナイト
力 + 素早さ = アーチャー
体力 + 素早さ = ビーストテイマー○上級クラス
Lv30以上
見積もり精度が高い役職
特定の値を超えてかつ割合で決まる
見積もり精度が満たない場合は中級
賢さ + 力 = パラディン
賢さ + 体力 = ドラグーン
賢さ + 素早さ = ウォーロック
賢さ + 力 + 体力 = ○○○○
賢さ + 力 + 素早さ = ○○○○
賢さ + 体力 + 素早さ = ○○○○○その他
Lv10以上 運が一番高い = ○○○○
Lv30以上 運が一番高い + 賢さ = ○○○○
確率的にはレアにしたい
バランス良いタスクで几帳面だとなる
可能性がある感じ
◆難度の定義カンタン、ふつう、ムズい
カンタンは単純作業
リスト記入、報告、会議出席
バウンディングボックス設定ふつうは普段の制作作業
テクスチャ、モデル、エフェクトムズいは新表現の模索、検証など
成功するか不安なもの
できた時に仲間から尊敬される作業
◆優先度高
ほかの作業より先に提出する必要あり
作業の遅れが開発全体の遅れに直結中
普通の作業小
後回しにしてOK
または最悪やらなくて良い 努力目標
◆名前と性別の入力必要に思う!
性別はナイーブなので扱わない?
でもあった方が良い
しかしグラフィックは倍大変変数を用意
Strings name;
Bool male;
初めてアプリ起動時に聞くオプション設定から変更できる
◆経験値取得とレベルアップの実装○経験値取得処理
int exp;
只々足していき、消費やマイナス無し・タスク追加時 50固定
exp += 50;
経験値バー更新・タスク削除時 何も無し
・タスク完了時
モンスターを倒すグラフィック再生
優先度と工数に応じて変わる
exp += 30 * *
次にレベルアップ判定に行く○レベルアップ処理
int lv;
こちらも只々足していく
int lvupNext = lv+ 1;
int lvupNow = lv;
int lvupNextExp =
int lvupNowExp =
必要経験値 lvupNext - lvupNow
現在経験値 exp - lvupNowExp
現在 ÷ 必要 * 100 = %・タスク完了時
While 条件を満たさなくなるまで
次のLvUp条件を満たした
経験値バーを一旦100%にする
グラフィック表示 + SE
メッセージ
○○は Lv 00 になった!
○○が ○ あがった
LvUpしたフラグON
Break;
ジョブチェンジ判定
今は何のジョブになるか?
今と同じジョブなら終了
別のジョブなら
グラフィック表示 + SE
メッセージ
○○ は ○○ にジョブチェンジ!
ジョブチェンジしたフラグON
終了判定
経験値バー更新
フラグに合わせてヒントを表示
"工数を入力すると良いことが!"
"見積もりに近いと良いことが!"
"ステータスでジョブが変わる!"
"タスクは細かく分けよう!"
フラグを全てOFF
OKボタンを表示(消しておく)
◆グラフィックデータ下記 * 性別分
デフォルトの絵 赤ちゃん Lv1専用
冒険者見習い Lv2〜9まで
ジョブ14種類
計16種敵の種類
優先度3 * 工数3 * バリエ3 = 27種
バリエはレベルに合わせる?倒す演出エフェクト GIFアニメ重ねる
殴り、一閃、フラッシュ消滅エフェクトきらきら GIFアニメ
ボタンアイコン 6種
追加、編集、検索、複製、削除、歯車
◆保存CSVの形で保存
なのでエクスポート機能は無し
◆おまけ要素○アプリ情報
メールアドレス
ブログ
ツイッターとアイコン
作成日とバージョン
バージョンアップボタンで対応○デジタル証明書
プロジェクトのアセンブリ情報のプロパティで設定できる模様?
○未処理で完了
モンスターが逃げる演出とSE
○カラーチェンジ
オプションで色変え
帯の色を自由に変えられる
アイコンは中間色にする必要がある
Lv10で解放とか?○ジョブ図鑑
オプションでレベルと経験値をリセットできるようにする
ジョブ図鑑でなったジョブが表示
基本ジョブが全て埋まると
勲章アイコンが画面に付く
全ジョブが埋まると
マスターアイコンが画面に付く
◆リリース方法Booth
500円でどうかGUMROAD
お値段を決めて買ってもらうサービス
簡単な1ページ説明書
おまけでメイキングPDF付ける?
ざっと見ても分かる通り、タスク管理としての機能よりもキャラ成長要素の仕様をどうするかのメモの方が多いです。楽しいですね。。
ちなみに、大体のRPGではレベルが上がるほどに必要な経験値が増えますが、タスクから得られる経験値が一定なのと、使用して月日が経つほどにレベルアップの頻度が落ちていくのは寂しいと思い、レベルが上がっていってもある程度一定のペースで上がり続けていくバランスに落とし込みました。Wizardryのようにレベル1000とか上がってもいいじゃない。
また、ジョブはネタバレになるので一部伏せていますが、元ネタとしては「Wizardry」「Tastics Ogre」「FF」あたりが混ざっています。忍者とかロードとか入れたいですよね!
それからオミットとなったアイデアも色々とあります。TaskQuestというからにはタスクも敵キャラとしてドット絵を用意して戦闘画面風の演出を入れたかったりはしましたが、「完成がかなり遠のきそうだ」と思って諦めました。。
こちらが、上記メモを書いていた時のツイートです。
タスク管理アプリに着手し始めた。大体イメージができてきたので今は経験値とレベルアップの仕組みを考え始めていてとても楽しい。。
— moko (@moko_03_25) September 20, 2018
まずはコントロールを配置しながら大枠のデザインを決めて、エクセルの表のような「DataGridView」というコントロールに、タスクを登録できるところまで実装しました。
まずはタスクを登録できるようになったっ pic.twitter.com/6LPzOeeyRv
— moko (@moko_03_25) September 22, 2018
会社から帰宅したら作るという感じで1週間ほどすると根幹となる機能は入りましたが、まだまだ実装を予定している機能が大量にあり、また色んな不具合や不便な要素に困っている状態でした。
タスク管理アプリ作成の残りタスクを作りかけバージョンで管理するの巻。行数が増えてくるとDataGridViewのスクロール表示がややチラつくのに涙。ダブルバッファが有効ということで入れてみたら少し改善されたけど、中のデータはList<T>で独自仕様にした方が速いっぽい。。 pic.twitter.com/cfrXJo7uDW
— moko (@moko_03_25) September 25, 2018
1つのCSファイルにズラズラっと全ての変数や関数を書いていると可読性が下がり大変になってきたので、クラス分けの先駆けとして「ツール設定を管理するクラス」「キャラのステータスを管理するクラス」を用意して移し換えました。
経験値取得とレベルアップとジョブチェンジのベースは完成!
— moko (@moko_03_25) September 28, 2018
ジョブのドット絵を用意して差し替え表示が入れば粗方の体裁は整う。 pic.twitter.com/EqUTbogDBT
実はここで初めて「プロパティ」を試しました。
プロパティという単語自体はアーティストでも色んなツールを使う上で普段から慣れ親しんでいるものですが、プログラム初心者の身からすると変数と何が違うのかよく分からない訳です。でもとりあえず使ってみようと(結局、クラス内で変数のようにしか扱っていないので変数で良かったかなという感じではありますが)。
この頃、C#を触り始めて1年半ほどでツール制作にも徐々に慣れてきてはいましたが、仕事ではコーディングしないのであくまで趣味の範疇です。まだまだ文法は知らないことばかりで初めて試すものも多く、また「構造体」「インターフェース」「デリゲート」など全く分からない状態でした。
その時の気持ちはこちら。
タスク管理アプリで今回初めて連想配列・参照渡し・white文・プロパティなど使ってみて、文法周りの知識はまだ全然よちよち歩き状態で。。3Dソフトで例えると頂点掴んで移動と面にエッジを追加する2つの操作だけでモデリングしていたところに押し出しを覚えてこりゃ便利っていう状態に近いかなと。。
— moko (@moko_03_25) September 30, 2018
また設定を管理するようなクラスはアクセス修飾子をstaticにしてメモリに常駐させ、newしなくてもいつでもプロパティの中身を読み書きできるようにすると便利ということに気付いて、後から全てstaticに書き替えたりしました。
それまでクラスのアクセス周りはよく分からずに困ることが多かったのですが、例えば子となる別のフォームから親となるメインフォームを制御したい場合に、メインフォーム自身をコンストラクタの引数として渡してあげたら可能だというのも今回の制作でようやく理解した感じです。それも「多分スマートではない方法なんだろうな」と思いつつ、他に方法を知らないのでとりあえずメインフォームやそれに属するコントロールを別のフォーム生成時にコンストラクタで渡すというのを非常に多用しています。
さて、下記のような成長要素を暫定で入れましたが、このようにメッセージボックスを表示するだけなら非常に楽です。しかし、後にちゃんとデザインした独自のフォームに表示させようとした際に中身が複雑になってかなり苦労しました。
16種のジョブのドット絵完成っ。ネタバレになるので少しだけ。。ジョブは「ベイビー」から始まり「見習い」を経て各種ジョブに変わっていきます。 pic.twitter.com/Z9EG4Xh4dI
— moko (@moko_03_25) September 30, 2018
必須機能として「完了以外」「完了」などのステータスに応じたフィルタリングを入れましたがここでかなり躓き、データベース・DataSet・DataTableと、それらの値を表示するDataGridViewとのやり取りの基礎的なあたりを色々調べたりしました。
とりあえず表のフィルタ表示がようやく入りました。これだけのことが分からなくて結構調べるのに時間がかかってしまった。。ブログにDataGridVIew関連の記事を5つほど備忘録としてアップしています。 pic.twitter.com/Jf217AdnD5
— moko (@moko_03_25) October 6, 2018
また、複数セルへの一括入力や一括ペーストにも対応しました。こちらは必須だろうと。
しかしDataGridViewのイベントを取得するタイミングが色々とあるものの、それぞれのタイミングで色んな問題が噴出し、不具合に悩まされることとなります。
キャラステータス画面やオプション画面も入りました。
こういった縦横に自由に敷き詰めるレイアウトで画面を作ると、設定項目が1つ増減するだけでレイアウトに大きく影響するのであまりよく無いですね。。
色を選択するためのフォームを作ったり‥
初起動時の設定画面を作ったり‥
ジョブ図鑑を作りました。ジョブを新たに取得するごとにシルエットがオープンになる感じです。
こういったオマケ的な要素は、デザインするのは楽しいですが実装すること自体は単純なので面倒ですね。。気分転換したい時にはドット絵を修正したりしていました。
タスク完了>レベルアップ>ジョブチェンジの演出のためのフォームを作って差し替えましたが、RPGメッセージ風にテキストを表示するために同期&非同期処理について調べたり、GIFアニメ画像を載せたりするためにコントロールのレイヤー周りについて調べたりして結構大変でした。。
結局のところ「Windowsフォームは制約が多すぎて、コントロールに重なるようにビジュアル的な演出を入れるのには向かない」という結論に達し、ここは色々と割り切りました。残念です。。
下図は After Effects で作ったイメージ画像ですが、たったこれだけのこと(コントロールにまたがるようにGIF画像を上に載せて表示する)ができないんですよね。。
という訳で、着手を始めて1ヶ月ほどであらかたの機能が入りました。
この後にも実行ファイルにアイコンを適用したり保存データを暗号化したり不具合を取り除いたりと、1ヶ月ほど追加でちょこちょこと作業はありましたが、大体の機能はこのあたりで入った感じです。
優先度に応じた背景色を付けたので、これで予定していた大体の機能は入った!
— moko (@moko_03_25) October 21, 2018
ちなみに全ジョブをコンプリートした際のちょっとしたおまけ要素も入ったものの、コンプリートが厳しいので別の条件で解放させたりと調整中。。 pic.twitter.com/z2bZfDAL9P
今回は当初より「販売する」というのが1つの試みでもあったので、不具合満載の商品をリリースする訳にもいきません。そこで会社の同僚やTwitterのフォロワーさんに何人かにテストをお願いして触ってもらい、不具合報告や要望などをいただきながら開発を進めていました。
ありがたいことにTwitterですぐにお声掛けをいただき、slackで専用のプロジェクトを用意してそこでやり取りさせていただきました。
最新の実行ファイルもどんどんアップしていけますし、とても便利でした。
大体はココナラで有料で質問して解決しています。
有料だと気兼ねなく聞けるのが良いですね!
いつもお世話になっているのはこちらの「Kazuki Takayama」さんになります。
他にも、ある不具合の原因が分からずに困っていた時 sw(@Callisto_n)さんに泣き付いて、勉強会の帰りにカフェで不具合を見つけていただいたのですが、その際にソースコードをざっと見渡して改善ポイントまで教えていただいたりしました(swさんその節はありがとうございました‥!)。
一番大きいところでは、複数人でのタスク管理です。
「TaskQuest」はあくまで個人のちょっとしたタスク管理を想定しているため、お仕事で使うには正直厳しいと思っています。特に複数人で1つのプロジェクトを同時編集したいと思った場合には、恐らく以下のようなあたりの実装が必要なのかなと‥。
こちらは今の自分には厳しいと思って諦めました。
・データベースの知識
サーバ上でリストを管理して、クライアントのアプリからアクセスする形・アカウントを登録&管理するような仕組み
パーミッションとかも含めた色々な設定・複数アカウントの同時編集の仕組み
こちらに関しては「Googleスプレッドシートなど元からクラウド上で複数人の編集が可能になっているサービスを利用すれば楽にできるのでは?」というアドバイスをいただいたことがあり、それならもしかしたら手軽にいけたりするんでしょうか。また機会があれば試してみたいです。
次に、スマホアプリとしてのリリースです。
こちらは「Xamarin」とか使う感じでしょうか。軽く調べた感じでは面白そうではあるのですが、今の自分にはまだまだ敷居が高そうな印象がありました。でもそのうち試してみたくはあります。
それから、アンドゥとリドゥの実装。
こちらで概念から解説されていて「これは今の自分には無理だ」と即諦めました。。
複数行の一括削除。
リストと複数セルの選択ができるのだから、複数行を一括削除もしたいものと思います。でもこれはアンドゥとリドゥが実装されている前提になると思いました。うっかりミスで複数行を削除してしまった場合に悲劇となります。。なのでこちらも同時に諦めました。
全タスクの文字列の検索・フィルタリング・置換
データベースとDataGridViewの理解が怪しいため不具合の温床になりそうで諦めました。。
今回は自分が作ったプログラムを初めて販売してみました。
世の中に非常に優秀なフリーソフトが大量にあることは勿論知っていますし、例え50円や100円のお値段設定だとしてもクレジットカード決済やコンビニ振り込み等のハードルから触ってもらえる機会が大幅に失われるだろうと思いましたし、「素人が作った不出来なものを売って良いのか?」という自問もありましたが、「どれくらいの人に買ってもらえるのだろう?」という純粋な興味が大きくありました。
目標としては40人の方にご購入いただいて2万円を売り上げることです。
そうすれば、C#関連書籍の購入とココナラの取り引きの費用などを回収できる感じです。
現在リリース10日ほどで18本売れたので、このまま40本達成できたら嬉しいなという感じです。
色々と方法はあるようですが、古さ・情報の多さ・手順の煩雑さ・不具合の有無などそれぞれに色々なメリット・デメリットが存在するようです。
とりあえず調べて分かった範囲で雑にメモしておきます。
※随時更新
Managed DirectX というもののおかげで C# でも DirectX を扱うことができるようです。
怖いものなんてない!!: C#で「using Microsoft.DirectX;」をすると参照エラーになる
Visual Studio Community 2017をインストールするとDirectX SDKも同時にインストールされている様子。しかしusingディレクティブでDirectX関連のネームスペースを指定してもエラーになるので、関連するDLLファイルを直接参照してあげる必要があるようです。
C#でゲームプログラム講座 - DirectX - DirectGraphics①
DirectXでゲーム用に3Dモデルを描画することについて丁寧に説明されています。
ただしテクスチャを貼ってアルファブレンディングするところで更新が止まっています。
ステップアップ (Managed DirectX Direct3D) - ソーサリーフォース
モデルの描画・ライティング・カメラと一通り丁寧に解説されています。
ただし今の自分の環境ではサンプルの実行ファイルが起動できません。
また、提示されているコードを試してみるとフォームが表示されず。。
C#でツールを作る その1-Direct3Dの初期化- - while( c++ );
順に更新記事を辿っていくと記事も多く色々と試されています。
01 - DirectX + C# 3D basic Terrain Generator Tutorial (setting up DX plus 1 basic triangle) - YouTube
SlimDX は C# で DirectX11 を使うためのラッパーだそうです。
Microsoft公式のラッパーよりも使い易いとか。
SlimDXの公式サイトが見れない状態ですが、Visual StudioからNuGetで検索してインストールすることで無事に動作しました。
C#でDirectX11入門一覧 (SlimDX入門)|Memeplexes
SlimDXを使った3D表示についてかなり丁寧に解説されています。
しかもカメラ・ライティング・テクスチャなど一通り取り上げられています。
こちらをベースに勉強していくと良さそうです。
掲載されているコード自体にはコメントを記載されていないので、とりあえずコードを移植したら、解説をじっくり読みつつ自分で該当箇所にコメントを入れていく感じで見ていっています。
C#でDirectX 軽い気持ちでSlimDXを使うとき用ライブラリSlimDXSketchを作りました - 渋谷ほととぎす通信
ひとつ前のSlimDX入門の記事をアレンジして解説されています。
こちらの「三角形を描画する」の記事では、「myEffect2.fx」という名前のファイルを追加して、記事中で解説されているシェーダのコードをこちらに記載し、実行ファイルと同じ場所に置いてやればOKです。
という訳でとりあえず三角形の描画ができました!
OpenTK(Open Toolkit Library)は C# で OpenGL を使うためのラッパーだそうです。
こちらもNuGetからインストールするので良いようです。
OpenTKの使い方をかなり多岐に渡って解説されています。
Windowsフォームに組み込む際に関しての解説もあります。
C#で記述できてDirectXを扱い易くしたというXNAは終了しましたが、マイクロソフト自身がXNAを移植したものがMonoGameだそうで、XNAのコードがほぼそのまま動くそうです。
ちなみにこの記事を書いた2019.1.13 時点では、公式サイトでDLできる最新バージョンは 3.7.1 で、インストーラーにVisual Studio 2017のTemplateが含れていました。
MonoGameで2Dゲームを作る(前書き) - Qiita
MonoGame入門Ⅰ - Qiita
MonoGame で 3D 描画 - Qiita
MonoGame自体の解説が少なそうですが、XNAのサンプルが活用できるようなのでそのあたりでカバーできて良いかも知れません。
SlimDXの項目でもリンクを貼っていますが、こちらではXNAも豊富に解説されています。
ただMonoGameだとすんなり画像が読めないなどあるのでこちらを参考にしてうまくいきました。
Kitware - Experts in Visualization Technologies and Image Processing
VTK - The Visualization Toolkit
ActiViz は C# で VTK(The Visualization ToolKit)を使うためのラッパーだそうです。
こちらもNuGetからインストールするので良いようです。
C#で3Dモデル表示(VTKのC#ラッパActiVizによる方法) - whoopsidaisies's diary
moko
Windows7(64bit)/ Windows10(64bit)
商用・非商用に関わらず(プライベートでもお仕事でも)ご自由にお使いください。
作者の許可無く、本ソフトウェアを複製・第三者に配布しないでください。
本ソフトウェアは予告なく機能を変更することがあります。
本ソフトウェアは動作環境を満たす全ての環境で正常に動作することを期待していますが、保証はできません。
本ソフトウェアの使用により生じたいかなる損害に関して、作者は一切の責任を負いません。
不具合やご質問などのお問い合わせは、Twitterの作者のアカウントまたはメールアドレスまでお願いします。
本アプリでは「保存」が実行された際に、プロジェクトのセーブデータ(タスクリストの情報)・アプリの設定情報・キャラクターのステータス情報をテキストファイルで出力します。
3つのプロジェクトをそれぞれ「SaveData0.txt」~「SaveData2.txt」のファイル名で保存します。
「ロード画面」で保存先を変えることができますが、デフォルト設定であるアプリ本体と同じ場所から変えない方がトラブルが起こりにくいためおすすめです。
テキストファイルの中身はタスクリストの情報で、CSVのようにカンマ区切りで保存します。
もしもタスクの情報としてカンマが使われていた場合、デフォルトでは <Comma> に置き換わります。同様に改行が使われていた場合、デフォルトでは <br> に置き換わります。
本アプリの設定情報を「Settings.txt」のファイル名で保存します。
テキストエディタで開いて編集することが可能ですが、書式が崩れると正常に読み込めなくなるので慎重に編集するようお願いします。
※アプリ起動時にファイルが読めない場合は「ようこそ画面」から開始します
ですが全ての項目は設定し直すことができるため、大きなダメージにはなりません
アプリ起動時にウインドウが画面外に移動してしまったような場合には、「Setting.txt」内のウインドウの座標の記述を編集するか、または「Settings.txt」を削除して再起動すると良いです。
「Setting.txt」内の具体的な説明についてはこちらのページにまとめています。
キャラクターのステータス情報などを「Status.dat」のファイル名で保存します。
中身は暗号化していますが、絶対に編集しないようにしてください。
また、ファイルを別の場所に移動しないようにご注意ください。
アプリ起動時にファイルが読めない場合は、キャラクターが初期状態で開始してしまいます。
以下のタイミングで出力されます。
・手動セーブ時(タスクリスト上で Ctrl + S)
・オートセーブ時(オプション画面で設定している場合)
・ロード画面でOKを押した時
・アプリ終了時
特に「ロード画面でOKを押した時」「アプリ終了時」は必ず保存されるためご注意ください。
※もしもうっかり操作ミスをしてタスクリストを変更してしまった際などに保存せずに終了したい場合は、お手数ですがWindowsのタスクマネージャーを起動してプロセスタブで『TaskQuest.exe』を終了させてください
『TaskQuest』のアプリ自体の設定情報を保存している「Settings.txt」内の各設定項目は下記のようになっています。
[Path] セーブデータの保存先(基本はデフォルトの空白がおすすめ)
[PJ S] 現在のプロジェクト番号(0~2)
[PJ 1] セーブデータ1のプロジェクト名
[PJ 2] セーブデータ2のプロジェクト名
[PJ 3] セーブデータ3のプロジェクト名[<br>] タスク編集画面の詳細パネル内で改行を表す記号
[ , ] タスク内の文字列内でカンマを表す記号[MaiR] アプリのメインカラー R値
[MaiG] アプリのメインカラー G値
[MaiB] アプリのメインカラー B値[DonR] 経験値取得済みタスクの背景色 R値
[DonG] 経験値取得済みタスクの背景色 G値
[DonB] 経験値取得済みタスクの背景色 B値[PosX] アプリ起動時の位置 X座標
[PosY] アプリ起動時の位置 Y座標
[SizX] アプリ起動時のウインドウサイズ 幅
[SizY] アプリ起動時のウインドウサイズ 高さ
[Si2X] タスク編集画面のウインドウサイズ 幅
[Si2Y] タスク編集画面のウインドウサイズ 高さ[Unit] 工数の単位(0~2)
[LNo ] 列「No」を表示するか(True / False)
[LCtg] 列「カテゴリ」を表示するか(True / False)
[LCnt] 列「内容」を表示するか(True / False)
[LPri] 列「優先度」を表示するか(True / False)
[LSta] 列「進捗」を表示するか(True / False)
[LHo ] 列「工数」を表示するか(True / False)
[LHoR] 列「実工数」を表示するか(True / False)
[LDAd] 列「登録日」を表示するか(True / False)
[LDDn] 列「完了日」を表示するか(True / False)[MsEr] 工数の入力エラーを表示するか(True / False)
[Wrap] タスク編集画面の詳細パネル内での折り返し表示(True / False)
[MsDn] 経験値取得演出の表示(True / False)
[FViw] 最前面表示 ※未実装
[TTip] ツールチップの表示 ※未実装
[ASav] オートセーブの間隔(0~3)
[ABak] オートバックアップの間隔(0~2)
[PBak] 前回のバックアップ日時(西暦月日時分の12桁の数字)[HigR] 優先度の列が「高」の場合の背景色 R値
[HigG] 優先度の列が「高」の場合の背景色 G値
[HigB] 優先度の列が「高」の場合の背景色 B値[MidR] 優先度の列が「中」の場合の背景色 R値
[MidG] 優先度の列が「中」の場合の背景色 G値
[MidB] 優先度の列が「中」の場合の背景色 B値[LowR] 優先度の列が「低」の場合の背景色 R値
[LowG] 優先度の列が「低」の場合の背景色 G値
[LowB] 優先度の列が「低」の場合の背景色 B値
ここでしか設定できない項目は「改行記号」「カンマ記号」「優先度の列の背景色」になっています。
メイン画面の右上に、キャラクターの「レベル」「ジョブ」「経験値」「次のレベルまでの経験値バー」「名前」「ジョブのドット絵」が表示されます。
またキャラクターのドット絵をクリックすると「ステータス画面」が表示され、現在のステータスが確認できます。「見積もり精度」は0に近いほど精度が高いことを表します。
「ステータス画面」左下のジョブ図鑑ボタンを押すと「ジョブ図鑑」が表示されます。
新しいジョブにチェンジすると、こちらのドット絵もオープンします。
コンプリートすると良いことが‥!?
タスクを追加・複製すると経験値が少し入り、逆に削除するとその分経験値が引かれます。
また、タスク完了時には工数に合わせて経験値が入ります。
工数の単位が「日」になっていれば「時間」の8倍の経験値(1日8時間換算)が‥
「週」になっていれば40倍の経験値(週5営業日換算)が入ります。
タスクを完了して経験値取得済みになるとそのタスクはグレー表示になります。
※色は「オプション画面」で変更可能です
本アプリでは、工数の見積もりと実工数を入力する前提になっています。
キャラクターを早く成長させたい場合は、なるべく入力するようにしてみてください。
また、作者はタスク管理時にはタスクの大きさをなるべく細かくすることを推奨しており、本アプリでもタスクを細かく登録して完了していく方が経験値取得の上でとてもお得です。
どのようなジョブになるかはレベルアップ時のステータスで決まりますが、Lv10以上で下級ジョブ・Lv20以上で中級ジョブ・Lv30以上で上級ジョブが解放されます。
ただし上級ジョブは一定以上の「かしこさ」と「見積もり精度」が必要です。
「かしこさ」は見積もり精度が高いと上がりやすいです。
新しいジョブにチェンジした際には、Twitterにスナップショットを投稿してくださったりすると作者が喜びます!
オプションボタンを押すと、本アプリの各種設定が可能な「オプション画面」が開きます。
こちらでは、名前や工数の単位の変更、表示する列の指定などができます。
まず最初にオートセーブとバックアップの間隔を確認してみてください。
各項目にマウスカーソルを置いて少し待つとヘルプが表示されるので、詳しい説明はそちらをご覧いただければと思います。
「オプション画面」左下のアプリ情報ボタンを押すと、作者のtwitterや当ブログURL・バージョン情報・メールアドレスなどが表示されます。
もし不具合など見つけられたらtwitterやメールにてご報告いただけると大変助かります!