ホーリーのプログラミング日記

ホーリーのプログラミング日記

エキセントリック・スーパーアプリクリエイター / アプリ総DL数 約180万 / 全然分からない 俺は雰囲気でアプリを作ってる / iOS : apple.co/3m3HxSm / Android : bit.ly/3ma0liZ

クイズアプリに対するモチベーションは低いです

 

僕は古畑任三郎が好きなんですけど、同じくらい好きな友達がいるんですよ。てかその友達は古畑に対する思い入れがヤバイんです。もうなんでも知ってるって勢いで。

鶴瓶さんが犯人の回で、鶴瓶さんがホテルで頼んだメニューはなに?」とか「赤い洗面器の男は作品中何回出てきた?」とかっていうクイズをお互いによく出し合うんですが、たいがい僕が負けています。

(最近出した「唐沢寿明さんが出てくるクイズ王の回の、ラッキナンバーはなに?」って問題は僕が勝った気がします。これ「16」なんですよw)

 

んで、その友達から言われたんですよ。「古畑検定」っていうクイズアプリを作ってくれないかって。

「そんなんありえないでしょ」って返したんですけど、いやはや世の中は広い。

 

すでにあるんですね

 

「クイズ for 古畑任三郎」ってアプリが。

 

クイズ for 古畑任三郎

クイズ for 古畑任三郎

  • takashi nagata
  • エンターテインメント
  • 無料

 

まさかあるとは思ってなかったので、ビビりましたよw

 

☆☆☆

 

えー、ここからが本題なんですけど、僕はクイズアプリに対するモチベーションが低いです。正直、上記のアプリを見つけてなくても、古畑検定を作ることはなかったでしょう。

なんでかというと、クイズアプリからは、あまり得るものがないからです。

それはお金であったり、知識であったり技術であったり、ようは自分のプラスになるものが少ないと思うんですよね。

 

世のクイズアプリを作ってる方をdisろうとか、上記アプリの方をdisりたいっていう話ではないんです。ただただ、自分のモチベーションが低いってことなんです。

 

もちろん、アプリ初心者にはオススメですよ。クイズアプリ。簡単だから。僕もそんな形式のアプリを3つくらいは出してます。

でも中身を変えて何本も出そうとは思わないんですよね。そもそもクイズアプリって、面白いコンテンツになりにくいし、それゆえ収入も伸びないしで。

極めつけは自分のスキル向上にならないことなんですよ。アプリを作るときは、常に新しいことに挑戦するっていうのが、自分のポリシーなので、上達に結びつかないことはしたくないんです。

 

まあそんなわけで、クイズアプリに対するモチベーションが低いっていう話でした。

生まれて初めてアプリを作ってる最中にヘコみました

 

生まれて初めてアプリを作ってる最中にヘコみました。

「命の時間」ていうカウントダウンアプリを作ってるんですが、これに自分の寿命が分かる機能を実装したんです。

 

日本人の平均寿命は男性が80.75歳、女性が86.99歳なんですよ。今年の厚労省の発表によると。

平均寿命、2017年発表 男女ともに過去最高 | ウーマンズラボ

 

んで、アプリ内で自分の誕生日を入力、それから寿命までの日数と時間をはじき出した結果がこちら。

 

f:id:gevvoihorry:20170404161251p:plain

 

み、みじけぇ

 

あと17744日って短くないですか?僕これ見てヘコみましたよ。もうそんなに生きられないんだと。

むしろ長いって感じる人もいるんですかね?寿命って、普段は漠然と意識してるんですが、可視化されると短く感じますよ。僕は。

 

今日までリリース後のダウンロード数を見てヘコむことはありましたけど、リリース前にヘコんだのは初めてです。

 

ああ、アプリって怖いわ。。

UnityのDropDown(ドロップダウン)の要素をスクリプトで変更出来るようになりました

 

UnityのDropDown(ドロップダウン)の要素をスクリプトで変更出来るようになりました。

いやー、これマジで良かった。生年月日の入力画面を作ってたんですが、さすがに管理画面(て言うのかな?)からだと面倒なんで、コードで変更出来ないかと探してたらありましたよ。

【Unity】【C#】uGUI ドロップダウンの要素をコードで設定と取得、外観のカスタマイズなど - ヽ|∵|ゝ(Fantom) の 開発blog?

 

こちらの記事を参考にさせていただいたんですが、すぐに出来て良かったです。

 

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

public class DropDownManager2 : MonoBehaviour {

    public Dropdown dropDownYear;
    public Dropdown dropDownMonth;
    public Dropdown dropDownDay;

    int year;
    int month;
    int day;

    // Use this for initialization
    void Start () {

        if (dropDownYear) {
            dropDownYear.ClearOptions();    //現在の要素をクリアする
            List<string> list = new List<string>();
            for (int i = 1919; i < 2018; i++) {
                if (i == 1919) {
                    list.Add ("");
                } else {
                    list.Add (i.ToString () + "");
                }
            }
            dropDownYear.AddOptions(list);  //新しく要素のリストを設定する
            dropDownYear.value = 0;         //デフォルトを設定(0~n-1)
        }

        if (dropDownMonth) {
            dropDownMonth.ClearOptions();    //現在の要素をクリアする
            List<string> list = new List<string>();
            for (int i = 0; i <= 12; i++) {
                if (i == 0) {
                    list.Add ("");
                } else {
                    list.Add (i.ToString () + "");
                }
            }
            dropDownMonth.AddOptions(list);  //新しく要素のリストを設定する
            dropDownMonth.value = 0;         //デフォルトを設定(0~n-1)
        }

        if (dropDownDay) {
            dropDownDay.ClearOptions();    //現在の要素をクリアする
            List<string> list = new List<string>();
            for (int i = 0; i <= 31; i++) {
                if (i == 0) {
                    list.Add ("");
                } else {
                    list.Add (i.ToString () + "");
                }
            }
            dropDownDay.AddOptions(list);  //新しく要素のリストを設定する
            dropDownDay.value = 0;         //デフォルトを設定(0~n-1)
        }

    }

    // Update is called once per frame
    void Update () {

    }

}

 

こんな感じに書きますと、、

 

f:id:gevvoihorry:20170402062239p:plain

 

f:id:gevvoihorry:20170402062248p:plain

 

ば、バッチリ出来とる。。

 

やっぱ数が多いときはスクリプトから変更するのがベターですよね。

ちゃんと出来て良かったです。

UnityのDropDown(ドロップダウン)で値を取得出来るようになりました

 

命の時間ていうカウントダウンアプリを作ろうとしてるんですが、ユーザーから誕生日を入力してもらう必要があるので、HTMLでいうところのセレクトタグを設けようと思いました。これUnityだとドロップダウンメニューっていうらしいですね。

んで、いつものごとくやり方が分からないので、ググること山の如しですよ。Unityブログの2強ともいえるお二人が書いてらっしゃいました。

 

【Unity開発】uGUIのDropDownの使い方【ひよこエッセンス】 - Unity5(C#)初心者・入門者向けチュートリアル ひよこのたまご

【Unity】uGUIドロップダウンメニュー(コンボボックス)の使い方 - テラシュールブログ

 

基本的な使い方はここを参考にすればいいと思うのですが、自分でハマったポイントが2つあります。

 

① 文字がぼやける(滲む)

 

例えばタイトル画面みたいな動かない画面を作るときって、僕はいつもキャンバスを置いて、画面サイズを750*1334にするんですが、そうやってからドロップダウンを置くと、文字がぼやけて表示されました。

 

f:id:gevvoihorry:20170330103846p:plain

f:id:gevvoihorry:20170330103909p:plain

 

これOptionAって書いてるんですけど、全然分からないですよね。

 

UnityではじめるC」って本の中で、脱出ゲームの作り方を紹介しているんですが、その中にこのやり方があるんですよ。キャンバス置いてっていう。

てかこの本で紹介されてる脱出はそうやって作っています。

 

いつもこのやり方をしていたんですが、今回はこれじゃダメでした。

 

キャンパスを先におかずに、ドロップダウンを最初に作れば、普通に表示されました。とりあえずこれでOKってことにしています。

 

② 値の取得の仕方が分からない

 

よく読めば上記したひよこさんのブログに書いてあるんですが、適当に読んでたせいか、値の取得の仕方が分かりませんでした。ドロップダウンの。

 

とりあえずこんなコードを書けばOK。

 

public void OnValueChanged(Dropdown dropdown){
    Debug.Log(dropdown.value);
}

 

これをドロップダウンに設定すれば、値を取得することが出来ます。Dropdown dropdownってところが分からなかったんですよね。int resultみたいな引数を指定していたので、全然取得できずに迷走してしまいました。

詳しくはひよこさんの記事に書いてますので、ご存知でない方は参考にしてみてください。下の方にありますよ。

 

以上、UnityのDropDown(ドロップダウン)で値を取得出来るようになりましたって話でした。

ゲームを出すのならサウジアラビアが熱いらしい

 

アプリマーケティング研究所さんの有料noteを読んでるんですけど、そこに面白い話が書いてありました。

たったひとつの変更で、1,300万人にリーチした「Facebook動画」投稿工夫など、世界のアプリビジネス記事まとめ(3月)|アプリマーケティング研究所|note

(これタイトルはFacebook動画ってなってるんですが、色んな話が載ってます)

 

一部引用するとこんな感じ。

 

中東には「アラビア語」のゲームがまだ少なく、AppStoreで英語で「Game」と検索すると40万アプリ以上でてくるが、アラビア語では1,000以下のアプリしかでてこないと。

 

「中東でゲームを出すのなら、サウジアラビア一択しかない」っていうくだりとともに、こういう紹介があったんです。

 

ええ、やりましたよ。

 

早速ローカライズ(翻訳)してみました

 

サウジアラビアといえばAndroidだろうと思い、Androidで出してるゲームをアラビア語に翻訳してみました。

翻訳って言ってもストアの掲載情報だけですけどね。実際のゲームは英語で表示されます。

 

「100ダウンロードされれば御の字」なんてツイートをしたんですが、実際に少しでもダウンロードされると、マジでテンション上がります。

前に出した「泳げおっさん」てアプリが、海外だけで4千ダウンロードされてるんですけど、僕としてはこれだけでも最高ですからw

 

P.S.

この「泳げおっさん」はアメリカに住んでる友達に翻訳を頼んだんですよ。多分それが良かったんだと思います。他のグーグル翻訳で適当に出したやつは100ダウンロードもされてないですから。

なので、ガチでいくんでしたら、gengoを使って翻訳を頼むといいんでしょうね。前にちょっと触ってみた感じだと、そこまで単価高くなかったですし。

クラウドソーシングの翻訳サービス - Gengo

C#で2つの日付から時間差を取得するのが全然分かりまへんでした

 

アプリを作る作る言いながら、ここ2ヶ月くらいUnityすら触っていませんでした。

んで、やっと昨日から触り始めたんですよ。前に書いた「命の時間」ていうアプリを作ってみようと。

「命の時間」ていうアプリを作ります - ホーリーのプログラミング日記

 

これは任意の日付を入力して、1年後とか5年後とか、その日までの時間を表示するっていう、ただそれだけのアプリです。

いつも自分の誕生日が来るたびに、一年早いなって感じるんで、その時間を可視化したかったんですよね。だから完全に自分用のアプリです。

(周りの2人からニーズがあるんで、一応3人はユーザーが付く予定w)

 

前にWEBのそれは作ったんですよ。僕は32歳なんですけど、33歳の誕生日までのカウントダウンツールを。

http://gevvoi.lovepop.jp/countDown.html

 

f:id:gevvoihorry:20170329055029p:plain

(こんな適当なやつです)

 

仕組みはこれと同じですね。JavaScriptで書いたんですけど、今度はC#でこれを書いてみようと思いました。

 

しかしですね、タイトル通りのことなんですが、C#で2つの日付から時間差を取得するのが全然分からないんですよね。JavaScriptとかPHPでは今日まで簡単に分かったんですが、ググってもググっても、よく分かりませんでした。

んで格闘すること半日。ようやく分かった気がします。雰囲気だけは。

 

using UnityEngine;
using System.Collections;
using System;

public class Timemanager : MonoBehaviour {

    DateTime dt1 = new DateTime(2018, 3, 27, 20, 30, 0);
    DateTime dt2;
    TimeSpan ts;

    string str;
    int num;

    // Use this for initialization
    void Start () {

        DateTime dt2 = DateTime.Now;
        ts = dt1 - dt2;
        num = ts.Days;

        Debug.Log (ts);
        Debug.Log (num);
        Debug.Log(new DateTime (1).Add(ts).ToString("HH:mm:ss"));

    }
    
    // Update is called once per frame
    void Update () {

    }
}

 

「2018年3月27日20時30分」から「今日」の日付を引いた、その時間差を求めてみました。

僕、苦労してここまで来たんですけど、これってみんな知ってるんですかね?普通は。

(初歩中の初歩な気がして怖いです。。)

 

全国に5人は同志がいそうなんで、参考にしたサイトを貼っておきましょうw

 

日時、時間の計算をする: .NET Tips: C#, VB.NET

日時(DateTimeオブジェクト)の情報を取得する: .NET Tips: C#, VB.NET

C# TimeSpan の Format 指定して文字列に変換する

 

最初にハマったのは、using System; を宣言するところですね。宣言て表現が正しいのか分かりませんが、これを書いてないとDateTimeを使えなかったんです。

 

f:id:gevvoihorry:20170329055619p:plain

 

ここまで出力出来たんで、あとは問題ないはずです。多分。。

未来の自分に期待するな

 

未来の自分に期待して、それだけで満足してしまう状況って僕にはよくあるんですよね。これ非常にいけないことだと思っています。

ブログを毎日更新するとか、アプリを毎月1本出すとか、そういう目標を立てることがあるんですけど、その目標を立てた時点で、何かを成し遂げた気分になっちゃうんですよね。

実際の自分は何も変わってないのに、意識が変わったことで成長した、進歩したと思い、満足してしまうんですよ。

 

これがいけないと思ったのは、この本を読んだから。

 

夢をかなえるゾウ

夢をかなえるゾウ

 

 

夢をかなえるゾウ。これ一見ふざけた感じの本なんですが、内容はちゃんとしています。買ってから結構たつんですが、今でもときどき読み返すことがあるんですよね。

んで、この本の中に上記した内容の話が出てくるんですよ。未来の自分に期待して満足するなって話が。

 

その場で「今日から変わるんだ」て決めて、めっちゃ頑張ってる未来の自分を想像するの楽やろ。だってそん時は想像しとるだけで、実際にはぜんぜん頑張ってへんのやから。つまりな、意識を変えようとする、いうんは、言い方変えたら「逃げ」やねん。

 

たとえば自分は「今月から本を毎月5冊読む」と決めても実際はできへんのに、未来の自分に期待してしまいよる。読める思てしまいよる。

 

本気で変わろ思たら、意識を変えようとしたらあかん。意識やのうて「具体的な何か」を変えなあかん。具体的な、何かをな

 

3箇所引用しましたけど、まあこんなくだりが出てくるんですよ。意識を変えるだけでは何も変わらない。自分を変えるには、もっと具体的な何かを変えなくてはいけない、っていうくだりが。

 

ここで言う具体的な何かっていうのは「行動」なんですよね。実際に手を動かして何かをしない限り、今の自分は変わらないんです。

 

この本を読んで、そのことを理解してるつもりなんですが、僕はまだまだやってしまいますよ。意識を変えただけで満足してしまうことがあります。未来の自分の期待して、それだけで終わっちゃうことが。

 

とにかく行動なんですよね。自分を変えるには行動することしかない。