もっとラクにできたのに

アプリケーションを開発する過程で、作った後になってから「もっとラクにできたのに」という点を書き記していく所 魅了屋という零細デベロッパーが書くよ https://www.miryoya.com


↑広告

初Unity・初Android進出・初有料アプリ「PastimeHint」をリリース

いつもと口調が違うよ(へりくだり〜 

 

moreeasily.hatenablog.com

 

↑の記事にあった出来事から約1ヶ月、ようやくアプリをリリースする事になりました。というかもう公開されています。

 

・どんなアプリ?

 

PastimeHint」と言い、一言で言えば「気晴らしの提案」をしてくれます。それぞれ好きな物や事を選択すると、それに合ったあなただけの提案をしてくれます。数十種類の中から見つかった気晴らしが、今後の皆様の人生に役立てて頂きますと幸いです。

 

・何で作ったの?(使用ツール編)

初のUnity製アプリです。色々と慣れずに苦労しましたが、この本できっかけが掴めたのが大きかったです。

UnityではじめるC# 基礎編

UnityではじめるC# 基礎編

 

 見た目はこちらにあるサンプルにどことなく似ていますが、全く違うアプリです。そもそもジャンルが違うよ。本当にこの本が無かった、いつまでたっても重い腰をあげずにUnityに取り掛からなかったと思います。本当にありがとうございます!

 

・何で作ったの?(理由編)

私も経験したのですが、趣味が無かったり、仕事に忙殺されて趣味を楽しめなかった時、ガツンと落ち込んだ時などに、気晴らしが思い付かず、気分を上向かせるきっかけが全く作れなかった事があります。そういう苦しんでいる人に少しでもお役に立てればと思い、このアプリを作りました。

 

・何で有料なの?

広告収入モデルも考えたのですが、「落ち込んでいる時に広告タップするのだろうか」という疑問が湧いたので、今回はあえて無しで、有料アプリとしてリリースしました。今後のアップデートで広告が出るようになったらまぁ色々察してくれ

 

・公開日に意味はあるの?

私の誕生日です。重ねるのも面白いかなと思いました。それだけです。それと藤原紀香さん、三森すずこさん、濱田岳さん、お誕生日おめでとうございます。

 

・長々と書きましたが、最後にアプリの宣伝をさせて頂きます。

アプリ名:「PastimeHint

料金:240円(安い・・・はず・・・

対応OS:iOS9.0以降/Android4.3以降

PastimeHint

PastimeHint

  • Hiroyasu Hirai
  • ヘルスケア/フィットネス
  • ¥240

 

play.google.com

 

公式サイトはこちらをご覧下さい。

PastimeHint - 魅了屋 WebSite

 

本当によろしくお願いいたします!!売れなきゃマズイ!!本当にマズイ!!!何卒、なにとぞおおおおおおおおおおおおおおおおお!!!!!!!!!

 

 浮かれたいけどバグ報告が出てこないか不安で浮かれ切れない午前10時前

UnityでC#Scriptから画像を表示させる

・これくらいは簡単に乗り越えられるだろとと思ってた

プログラミングに関しては見積もりが甘く、予想した時間を大幅に超過してしまう事がよくある。というか未だにである。お恥ずかしい。

今回もUnityの話題である。タイトルの通り、UnityでC#Scriptから表示させる画像を切り替えるというものである。どっかのパンチパーマの某絵書きのボブみたいに「ね、簡単でしょ?」と言わんばかりに、華麗なタイピングで乗り越えてやろうと思っていた。しかし、どうやっても、検索をしてトライしても上手くいかなかったのだ。クソが。

・長々ダラダラぐだぐだぐっちゃらぐっちゃら

仕組みとしては、格納してある配列のファイル名を基に、適切な画像を表示するというプログラムである。基本的には

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Linq;

public Sprite imageA;

void Start(){
 DisplayImage = GameObject.Find("DisplayImage").GetComponent<Image> ();
 DisplayImage.sprite = imageA;
}
 

でOKなのである。しかし、↓のソースコードを見て頂ければ分かるように、ファイル名をstring型で格納した為、「spriteはstring型じゃ指定出来ないじょーあばばばばー」(超訳と言われて上手くいかないのである。で、ぐっちゃらぐっちゃら何だかんだとやった結果、以下のように落ち着いた。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;
using System.Linq;

public Sprite imageA,imageB,imageC; //本当はいっぱいある
string[,] Data = {{"imageA","Data1","Data2"},{"imageB","Data3","Data4"},{"imageC","Data5","Data6"}};
void Start(){
  DisplayImage = GameObject.Find("DisplayImage").GetComponent<Image> ();

  Sprite[] sprites = [imageA,imageB,imageC];
  Sprite SP = System.Array.Find<Sprite>( sprites, (sprite) => sprite.name.Equals(Data[0,0]));
  DisplayImage.sprite = SP;
}


お世話になった所 ありがとうございます
tsubakit1.hateblo.jp

本当はもっと入り組んでるし、やる事はもっとあって、山もたくさんあると思うけど、進むしかない。


オチを考えたけど思い浮かばなかった午後9時前

追記
ソースコードの間違いがあったので修正

選択されたToggle(チェックボックス)を一斉に選択解除する方法 by Unity

今回はUnityの話

 

前回Unity練習したよという話をした。もちろんすんなり行くわけではない。いろいろと引っ掛かったり、資料が無かったりして苦労する所もあるだろうと予測しての作業であった。しかしいざそういう場面になると腹が立つ物である。そんな悔しさ、浪費した時間などを無駄にしないために、供養する為にここに書き記す。

 

こんなものを作りたかった。

幾つか選択肢があり、複数選択する事も可能でボタンを押したら選択しっぱなしの状態を作り、リセットボタンを押せば選択されたボタンが全て外れると言う物を作りたかった。自分でも何を言っているのかがよく分からないが、修正するの面倒臭いのでこのまま進む

 

まずは普通のボタンで何とかしようとしたが、出来なかった。状態として、選択したまま(押しっぱなし)という事が出来ないようだ。調べてもその方法が出てこない。Swiftの場合は「ボタン名.isSelected」で何とかなるのだが、それに当たる物が分からなかった。そこで調査を続けていると、ボタンでは無く、Toggleというものを使えと出た。なんだそれは。

 

Toggle is チェックボックス

中見出しを英語にした意味は無い。その上カタカナ混じってるし。

Toggleとはチェックボックスの事である。これを使えばラクに作れる事が分かった。既にボタンを10個設置していたのだが、仕方ないので全て消してToggleを設置し直す事にした。色々とカスタマイズも出来るので、チェックボックスの画像を用意して、チェックを赤色にしたり、背景画像を設定したりした。しかし問題が起きる。チェックボックスをクリックしてもチェック出来ない。というより、チェックボックスの設定がデフォルトではオフにしているのに反映されない。何か設定をミスったり、新たにコードを書かなければいけないのか、分からず調べた。調べ続けたが、解決策は出てこない。この問題にずっと時間を取られてしまった。ふと気付き、他のシーンでボタンが押せないか試してみた結果、ボタンが押せない。Unity自体がおかしい事に気付き、Unityを再起動するとちゃんと設定が反映された。実はこの問題、解決するまでに36時間を要している。みんな、このおっさんみたいに時間を無駄にする前に何かあったらUnityを再起動するんだよ。

 

リセットボタンの設定

チェックボックス押せない問題は解決したが、まだ問題はある。リセットボタンの設定である。最初はコードで対応しようとしたが、これも上手くいかない。Unityの設定を観てもよく分からない。とにかくネットを駆使して調べて調べて調べまくったり、設定をいじった結果、チェックボックスが一つしか設定出来ない代物が出来上がった。俺はラジオボタンが作りたかったんじゃないんだ。もう一回設定を見直してみる事にした。

チェックボックスがチェックされているかは、「チェックボックス名.isOn」で確認出来る。しかしコードから直接リセットさせる事は出来ないようだ。コードから直接リセットする方法を採用するのを諦めて、Unityの設定をいじる事にした。とりあえず「isOn」が付いている物を設定してみては動かしてみるを繰り返し、ようやく出来た。

 

やり方

1.リセット用のToggle(チェックボックス)を用意する(ボタンでも出来るかも知れないがやってない)。

2.Toggleの「Toggle(Script)」内の「OnValueChanged(Boolean)」を見る。

3.None(Object)にをクリックすると、「SelectObject」が表示されるので、リセットさせたいToggleを選択する。

f:id:waspossible:20170602033018p:plain

4.「NoFunction」を押して「Toggle→Bool isOn」を選択する。

f:id:waspossible:20170602032742p:plain

5.必要な分だけ「+」ボタンを押して項目を足して2〜4を繰り返す。

 

そして完成

 

右往左往しながら、何とか動画の通りの物が完成出来た。動画には無いが、何も選択していない状態でリセットボタンを押しても、強制終了等の不具合も無い、まさに求めていた物が出来たのであった。

出来ないうちはもやもやもやもやしていて気分も正直良い物では無かったが、出来た瞬間のパッと気分が晴れやかになる瞬間は何度経験しても良い物だ。もちろんもっと出来る方はこの右往左往が無く、瞬時にパッとなる瞬間ばかりなんだろうなと思う。くやじいいいいいいいいいいいいい。

 

何はともあれ、進んだ事は評価しても良いと思う。現在取り組んでいるのは、以前Xcode+Swiftで作成していた非ゲームアプリで、途中で組立が思い付かなくなり、立ち消えになっていたものである。前回の記事で紹介した著者様からTwitterで「頑張ってください」とメッセージを頂いたので、やる気になって奮起している中の出来事であった。

問題があるとすれば、この成果は三日前の物で、一昨日昨日と何もしていない事である。朝2時に目が覚めて、早すぎると思い再び寝ればお寝坊さんの出来上がりというここ最近である。もちろん調子も悪く、ズルズルと一日を過ごしている悪い流れが来てしまっている。WWDCの生中継を観るには午前2時に目が覚めるというのは丁度良いのだけれども、早すぎる上に遠足前日の子供でももう少し正確に早く目が覚めるぞと思う。もしくはおじいちゃん化にまた一歩進んだという事なのか。生え際の後退やメタボ化へ更に前進していのだろうか。しかし後退しつつ前進とは忙しいなと思うし、プラマイゼロという考え方も出来るし、色々と複雑である。つまりは色々複雑だから年頃の乙女と同じと言うことか。色々と考えたがアプリの進捗がよろしくない事へのお咎め(乙が女)は程々にお願いしたい所である。

 

勝手に上手い事言って締めた気になっている午前4時前

重すぎる腰を上げてUnityを練習した話

 ・またアンサー的な内容だよmoreeasily.hatenablog.com

 

↑この記事を書いてから2ヶ月程時間が経った。元々は楽をしたいという話で進めていた勉強であるが、進まないのでちょっと愚痴をこぼす。

 

・Unityの障壁

unity3d.com

Unityはドットインストールの動画で簡単な使い方を教わったりしたのだが、多機能なため設定する項目が多く、動画を観て以降手が伸びないでいた。本を買っても何となく手が伸びず、Unityでやる事といえばUnity自体のアップデートをするだけであった。

 

・ある本との出会い

UnityではじめるC# 基礎編

UnityではじめるC# 基礎編

 

 ご挨拶させて頂いた事のある方の共著の本である。これも買ってからほぼ放置という形でUnityをやるにはとにかく腰が重かった。自分の体調不良、精神の不安定さも相まって、とにかくUnityと自分の距離がどんどん離れていった気がした。

 

時は経って先週。ちょっと体調不良も快方に向かい、集中力も高まっている状態でこの本を読みながらUnityをやってみた。本の通りに脱出ゲームを作るというものであった。最初はUnityの操作に戸惑い、Swiftの影響で文末の「;」を忘れてコンパイルエラーを起こしたりとトラブルはあったものの何とか完成する事が出来た。

 

意外な発見であったが、Unityでのボタン、画像の配置が面倒臭くないなと感じた。まだ座標の癖のような物はつかみ切れていないが、ちょっと操れる自信がついた。

 

・そして今現在やっている事

自信がついた私こと30過ぎおじさんは、過去に出したアプリのアイディアの整理をしている。一覧を作り、その中から更にUnityで何とか出来そうな物、Swiftで書いた方が良さそうな物、分類するにはまだ早い物と仕分けをした。アイディアは多いのだが、考えただけで放置してる物が多かった。それと途中までSwiftで作り、間が開いてしまい何をしているのか分からなくなってしまった物もあった。情けない話であるが、これが自分のダメな所なのである。

 

そしてアイディアの整理をした結果、Swiftで途中まで作った物をUnityで作り直す決断をした。本来Unityはゲーム製作を得意とする物だが、作るのはゲームじゃないというチャレンジングな決断である。人によっては「頭大ジョブズ?」と思われるかも知れないが、自分の性格上、新たな可能性を探りたくなってしまうのだ。仕方ない。やってみる価値はあると思う。あとは朝、ジムに行った後にコワーキングスペースのイスで眠らなければ達成出来るはずである。

 

 

 

 

 

・・・と、ここまで前向きな事を書いたは良いのだが、貯金が本格的にヤバいので金の成る木を作らなければいけないという事と、そろそろヒット作を出さないと実家から追い出されるんじゃないかという危機感もある事を包み隠さず報告しておきたい。それと、とあるアプリ開発会社に書類を送り、採用選考の真っただ中であるが、連絡がずっと無く、不安でしょうがないので朝早く目が覚めて時間があるのでアイディア整理をしたりこのBlogを書いたりしている。どう転ぶかは今後分からないが、やれる手は打っておこうという狙いである。ああアプリも宝くじも当たって欲しいな〜!!!!(言霊狙い)

 

 睡眠薬を飲んでも午前2時に目覚め、暇なので文章をしたためている午前4時半過ぎ

 

主催イベントが無事に終わった話

イベントが無事に終わった
moreeasily.hatenablog.com

 

↑の話のアンサーである。

 

5月13日に行われた主催イベント「100分とOutput」が無事に終了した。今回は準備期間と本番当日の話をしたいと思う。

 

・スライドの準備

正直なかなかやる気が出なかった。昼間の時間を使って作ろうと思っていても、やる気が出なかったり、体調が悪かったりで思ったように進まないどころか手を付けていないという体たらくだった。本格的に手を付けたのはイベント開始日の週に入ってからであった。朝(といっても午前1時とか)にぱっちり目が覚めてしまった日に1/3ずつ、3日で終わらせた。もっとBlogに詳しい人がみたら物足りないと思うかも知れないが、今回のコンセプトは初めの一歩を踏み出す、または再開するという事がコンセプトなので、資料の濃度はあっさり目をめざした。

 

・参加人数の話

開催3日前に参加人数の連絡が来た。「1人」だった。もう一度言おう。「ひ と り !!」だ。

後から聞いた話だと、開催前日にドドドと駆け込みで申し込みする人が多いらしい。なのであんまり気にする事も無かったのだが、正直ショックだった。まぁ、モチベーションが下がったのだ。状況をTweetすると、フォロワーの方が告知文をリツイートしてくれたりして嬉しかった。この場を借りて厚く御礼を申し上げたい。それに後ろを向いていても仕方がない。少人数を想定して一部内容を変更する算段を立てたり、スピーチ原稿を用意するのを止めたりした。スピーチ原稿は人数がある程度いると有用だが、1人、2人に話す場合は逆にお堅い印象を与えてしまう可能性があると考えたのだ。最終的に参加人数は3人だった。

 

・イベント当日の話

天候はあいにくの雨だった。キャンセルが出てしまうのでは無いかと心配だったがそれは杞憂だった。遅れてくる方もいらっしゃったが、何とか全員集まってイベント開始となった。特にイベントで大きなトラブルも無く、無事に終わった事が良かった。イベントの構成も本来は参加者が一団となって成果報告を作る事になっていたが、少人数だったために予定を変更し、個人ごとに自分がインタビューするという内容に変えた。

イベントが終了して、参加者の顔を見ると満足そうに見えたのと、シリーズ化するならまた来たいと言ってくれた事が嬉しかった。ちなみに、イベント開催を企てたコワーキングスペースのスタッフさんはイベントが終わってから来た。シフト上仕方ないとはいえ、様子くらい見に来てくれよと思ったのは内緒だ。

 

・今後の展開

今回企画した「100分とOutput」は、他のテーマでも応用が効くように作ってある。例えば読みかけや積ん読してある本を持ち寄って皆で読んだり、アプリを作ったりなどをして成果物を出すというフォーマットに合えば様々なレパートリーが生まれる。もちろん今回行ったBlogを再びテーマにしてもOKである。次回は未定であるが、要望があれば何とか時間を確保してやってみようと思う。あ、イベントの参加費は今後も有料にしますから。そこんとこよろしく。

 

また夜中に目がパッチリ覚めたから色々やってる午前4時前

いつの間にかイベントを開催する事になっていた話

前作「賽の河原」のリリースから2ヶ月以上が経過した。このアプリは広告収入的には大失敗であった(そりゃそうだ)。以前書いたマンション管理人のバイトは書類選考で落ちてしまった今、とにかくアプリを作って収入の手数を増やさなくてはならない。そう考えていた3月の下旬だった。

 

・話は突然に 

作業場として利用しているコワーキングスペースのスタッフさんと雑談をしていた。このコワーキングスペースはイベントも開催していたりしている。そのネタは無いかと訪ねられた。

 

「何かを始めようとしている時に一歩が踏み出せなかったり、始めたは良いが放置してしまったりしている人がいるから、そういう人向けのセミナーでも開いてみたらいいんじゃないですかねぇ」

 

私の事である。私はデッドロック状態と読んでいるが、分からない事や懸念事項があると動けなくなってしまうのだ。そんな人を救うセミナーがあれば良いと考えていたので、そう答えたのだ。その直後スタッフさんから意外な言葉が返ってくる。

 

「じゃぁ、それでお願いいたします」

 

スタッフさんはそう言うと、せっせとイベント開催に必要な書類を差し出してきた。そう、罠(?)だったのだ。一瞬戸惑ってしまったが、話を聞くと他にもそういう人がいるらしく、需要があると考えた為にイベントを開催して欲しいと言ったそうだ。ここまで言われたらしょうがない。毒を食らわば皿までの精神である(使い方が違う気もするが)。かくしてイベント開催が決まったのであった。

 

・イベントの準備 

イベントと言っても講義では間が持たないのでワークショップ形式を採用し、テーマはBlogについて、始めようと思っても一歩が踏み出せなかったり、放置している人を対象にする事にした。たいしたアクセス数を稼いでいないのにBlogについて講師として何かを教えるのは忍びないのだが、名選手名コーチにあらずという言葉もある。とりあえず目をつむる事にして準備をしていこう。

 

スタッフさんとの3回の打ち合わせの中で内容を詰めていった。私はおおまかにどういった事をするか、タイムテーブルはどうなるか等を提案し、イベント開催に慣れているスタッフさんはそのタイムテーブルが現実的という点や、参加者同士の交流も取り入れたいと言うアイディアも出してもらった。初回、2回目の打ち合わせではダメ出しもあったが、3回目の打ち合わせでオールオッケーを頂いた。後はコワーキングスペースの他の店舗で宣伝する為のポップを作るだけである。長かった。

 

・本番に向けて 

というわけで、本当にイベントを開催する事になるとは思いもしなかったのだが、本当に開催するのだ。

eventinfo.benkyo-cafe.net

端的に言うと「皆で時間作って集まって何かやり切ろうぜ!軌道修正ありで。」がコンセプトのイベントとなっております。今回はBlogがメインなのですが、シリーズ化を目指しており、様々な事について時間内に「折り合い」を付けて成果物を完成させるというコンセプトのイベント目指している。興味のある方は是非とも申し込んでみては如何だろうか。ちなみにだが、イベントに使用するスライドは一枚も出来ていない。それと、そろそろ現在の申込人数の連絡が来るのだが、ゼロだったらどうしようという不安しかないのはここだけの秘密である。

 

ともかく、収入が出来そうで良かった良かったというのが本心である所は純然たる気持ちである事ははっきりと表明しておこう。ああお金欲しい。出来れば大量に。

 

個人事業主用の口座とプライベート口座の残高がかなりピンチなGW中ごろ

 

 

楽をしたい とにかく楽をしたい

楽に複数OSに対応したアプリを作りたい

 

究極の楽といえば「誰かに丸投げ」or「宝くじ当てる」の二つである事は明白であるが、これを言った所で叶える人脈も運も無い、素敵な物は欲しいけどあんまり売って無いから好きな歌を歌う、という訳にも行かないのが現状である。皆様如何お過ごしだろうか。

アプリも作らずに調査をしていたここ数週間だった。具体的には、一つのプログラミング言語で複数OSに対応したアプリを作る為に何が必要かを調査していた。そこで今回はその調査の結果を報告したいと思う。

 

複数のOSに対応するために必要な事 

異なるOS上で同じ物を動かすプログラムの事を「クロスプラットフォーム」と言うらしい。このクロスプラットフォームを実現する為には何を使えば良いのかを挙げていく。

 

Unity

2D/3Dゲームエンジンである。iOSAndroid、パソコンOSのアプリを書き出す事が出来る。Unityアプリという物があり、個人であれば無料で利用する事が出来る。言語はC#を利用する。

 

Xamarin

Microsoftに買収された企業が開発した.NET環境である。iOSAndroidUNIX系のパソコンOSのアプリを書き出す事が出来る。Macでは「Xamarin Studio」を、Windowsでは「VisualStudio」というアプリを利用する。こちらも条件があるが、個人であれば無料で利用する事が出来る。こちらも言語はC#を利用する。

 

Multi-OS EngineMOE

Intelが考えたクロスプラットフォームのライブラリである。iOSAndroidといったモバイル系OSのアプリを書き出す事が出来る。AndroidStudioプラグインをインストールして利用する。言語はJAVAまたはKotlinを利用する。

 

Scade(まだベータ版)

彗星のごとく表れた(と自分では思っている)開発環境である。iOSAndroidといったモバイル系OSのアプリを書き出す事が出来る。Scadeというアプリをインストールして利用する。言語は何とSwiftを利用する。

 

クロスプラットフォームを実現する為には4つの方法を取る事が出来る事が分かった。

 

じゃあ実際に何を使うの?

ではどれを採用するのか?ここで自分のスキルを整理してみようと思う。

 

C言語:やった事ある 最初に触った言語

Swift:やったことあるしアプリも出した 

JAVA:やった事あるけどコードを見ると殺意が沸く 苦手 

Kotlin:本を読んだ程度 Swiftに近いと言うのは知ってる

C#Unityやった時に本当にちょっとだけ触った

 

そして前項で挙げたクロスプラットフォームを表に整理してみるとこうなる。

 

f:id:waspossible:20170326104034p:plain

 

Multi-OS Engineは使うにはちょっとリスクがデカイ気がする。ScadeSwiftを使えるのは利点だが、ベータ版である事と日本語資料が全く無いのがちょっと厳しい。残るはUnityXamarinの二つなる。ゲームはUnity、その他のアプリはXamarinとするのが良いと思う。日本語資料も沢山ある。しかし、C#をほとんど扱った事が無い事が足枷になるのは間違いないだろう。うーん・・・。

 

決めた!!

ゲームUnity、ツールアプリXamarinで作成、C#は本を見ながら勉強すれば良いという結論にした!!というのも理由がある。こんな資料が発売されたからである。  

 

 ↑本の画像が何故か出ません。すみません。↑

Xamarinエキスパート養成読本 (Software Design plus)

Xamarinエキスパート養成読本 (Software Design plus)

 

 

かずきのXamarin.Forms入門

かずきのXamarin.Forms入門

 

 

養成講座の方は発売日に手に入らなかったので詳細は見ていないが、日本語資料として本があるのは非常に有り難いし、家の最寄り駅の本屋にピンポイントで置いてあったのは運命だと感じたので、C#も使える様にすれば、モバイルOSだけでなく、パソコン用のOS対応にも活きると思ったのだ。try!Swiftに参加したのだから、Scadeを取ると思った貴方、残念!実は長い長いインストールと設定作業を乗り越えて使ってみたのだが、何故か一部強制終了になってシミュレータが動かなかったりするので、安定化するまではちと怖いなと感じたのだ。でも期待はしているので是非とも成功して欲しいと思っているのは本当である。

 

長々と書いたが、同じく楽をしてマルチプラットフォーム対応したという方の参考になれば幸いである。販路広げてみんなで売れようぜ!!