2013年12月31日火曜日

2013年を振り返ってみる。


気がつけば間もなく2014年ですね。
趣味で開発を始めた2013年。来年の自分のために軽く振り返ってみます。

やったこと

1月

ちょっと暇な時間ができ、ふとAndroidアプリを作ろうと思い立つ。
本買って勉強開始。
始めて触るJavaやEclipse。さくさく動くけどめんどくさいOpenGL。
とても面白かった。

2月

2週間ぐらいで1つ目のアプリ完成。

さっそくGooglePlay開発者登録してリリース。
2/7リリース Androidアプリ:「104[トランプゲーム]」

ソースコードぐっちゃぐちゃだけど最初だし気にしない。

この頃にブログやTwitterも始めました。
Twitterで個人開発者探したらiOS開発者ばかりで寂しかった記憶がw
Android開発者らしき方々を片っ端からフォローさせていただきました。

3月、4月

1個だして満足しちゃってやる気の谷へ突入。
テストアプリを10個ぐらい作ってた気がするけどリリースまで持っていく気力がない。

5月

GWに友人たちとフグ食べに日間賀島へ行った。
なんか作るか!って話になりやる気復活。

そのまま一週間後にアプリ完成。
5/11リリース Androidアプリ:「うて!!」

さらに一週間でもう一つ完成。
5/19リリース Androidアプリ:「Golf(トランプゲーム)」

本当は翌週にもう一本出すつもりだったんだけどここで大ニュースが。
→Unityのモバイル用ライセンスの無償化

めっちゃテンション上がったの覚えてる。
その夜さっそくブログにまとめた。
【Unity無償化】Unityインストールから実機で実行するところまでやってみた。

この日以降すっかりUnityブログになっちゃいましたね。
検索流入もUnity一色に染まりました。

6月

黄本のサンプルをベースに一本完成。

そのままさくっとリリース
6/16リリース Androidアプリ:「ボールラン」

このアプリ会社の休憩所での評判はよかったです。
3Dってだけで「おっ?」って感じ。
加速度センサー使うアプリはやってる人を隣で見てるのが一番楽しい。

7月、8月、9月、10月

リリースはしてませんが少しずつUnity触ってました。
Unityを触り始めるとiOSアプリ開発も視野に入るわけで…。
結局作りたい欲求に勝てずMacBook購入。
MacBookAirを買いました!

ついでにiPhone5をゲットして寝かせ運用開始。
そのままの勢いでiOS開発者登録も完了。

でも仕事がむっちゃ忙しくて全然まとまった時間とれず
だらだらと時間だけがすぎていく…。

そんな中10月にあほげー開催
第11回あほげーにエントリーしました
24時間でゲームを作るって言うアレ。

だらだら時間を浪費してた中でこの24時間はいい刺激になりました。
24時間で形にできるんだもの。
仕事忙しかろうがリリースできないわけないよね。

11月

ちゃんとアプリ作り始める。
元々作りたかったステージいっぱい系のゲームに挑戦。
作りやすそうだったからパズルにしたんだけど
問題用意するのがこんなに大変だとは思わなかったw

12月

12月頭に完成。始めてのApple審査待ちへ。
「リジェクトされた!」ってつぶやいてみたかったけど一発で通過しました。

始めてのiOSアプリをリリース。
12/10リリース iOSアプリ「ナンバーコネクト」

そのままAndroid対応してリリース
12/15リリース Androidアプリ:「ナンバーコネクト」

なんとか年内にiOSアプリを出すことができました〜。

DL数/収益

来年の比較用にまとめておきましょ。
収益はどこまで書いていいのかわからんしざっくりで。

Android
 ・104[トランプゲーム]  (434DL)
   ・バナー:400円弱
 ・うて!!  (1064DL)
   ・バナー:1500円弱
   ・CPIウォール:3500円ちょい
   ・終了時:300円ちょい
 ・Golf[トランプゲーム]  (135DL)
   ・アイコン:600円弱
   ・バナー:700円弱
 ・ボールラン  (1682DL)
   ・バナー:3000円ちょい
   ・CPIウォール:500円ちょい
 ・ナンバーコネクト  (34DL)
   ・バナー:30円
iOS
 ・ナンバーコネクト  (1724DL)
   ・バナー:2500円ちょい
   ・CPIウォール:1000円弱
ブログ  (110000PV)
 ・バナー:7000円弱

トピックス

・iOSアプリのDL数がたった半月で全てのAndroidアプリを抜いた。
 ・iOSすんごい。
・1週間で作った「うて!!」がなんだかんだで一番稼いでる。
 ・棒人間とGAMEFEATは相性があきらかにいい。
 ・自分的には一番つまらないゲームなんだけど稼ぎたいならこっち路線行くべきなんだろうなぁ。
・ブログが意外に稼いでくれてる。
 ・Unityすんごい。
・合計収益2万超えてるやん!
 ・びっくり
 ・広告会社バラバラだから収益ゼロだけどw

反省

やる気にムラがありすぎですね。
週1で出したり半年も出さなかったりとか色々ひどい。
この品質ならせめて月1は出していきたい…

来年はもう少しペース上げます!
といいたいけど挙式控えてるからマイペースにやります。


それではみなさま、一年お疲れさまでした!!!
よいお年を!

2013年12月22日日曜日

【H25 NW】ネットワークスペシャリスト試験合格までの勉強法と参考書を紹介

ネットワークスペシャリスト

まえがき

こちらの記事にも書きましたがネットワークスペシャリスト試験に合格することができました。
【H25 NW】平成25年ネットワークスペシャリスト試験に受かりました。

なんとか一発合格できたので
それなりに勉強法は間違ってなかったのかなと思います。
実際に勉強し挑んでみてわかったことなど、
少しでもこれから受験される方の役に立てればと思い、書き残しておきます。

※あくまで私の所感なので参考程度にどうぞ〜。

背景

ちょっと背景から。

やってる仕事

今やってる仕事はこんな感じです。
  • とある会社の社内SE
  • 主にC#を使ってWindows用ソフトを作ったり保守したり
  • Windowsのサーバークライアント型アプリがほとんど
  • システム開発(プログラミング)経験は4年目ぐらい
仕事がネットワーク関係かっていうとそんなことないです。

受験理由

システム屋してるとユーザーさんから
「ソフトが繋がらないんだけど」とかアバウトな問い合わせをよく受けます。

(´-`).。oO(めんどいな)と思いつつ笑顔で対応します。
そこでpingやtelnetを使って調べるんですよね。

はじめは先輩に教えられた通りやってただけですが
いつしかネットワークの仕組みが気になってきました。
なんでブラジルとTV会議ができるのか…とか

すでに基本情報処理、応用情報処理は持ってたので
次に受けるのはネスペで決まりですね。

もう一つの理由

自分が資格試験を受ける一番の理由は勉強するモチベーションを維持するためです。
小学時代の夏休みから計画性が無いのは分かりきってました。
大人になってたどり着いた唯一の勉強法が短期決戦です。
その方法に必要不可欠なのが適度なプレッシャーと期限。
それを意図的に作り出す一番簡単な方法が資格試験でした。

  • まず申し込む、それから参考書を買い始める。
  • 申し込み〜試験日までは1~3ヶ月程度でちょうど自分に合ってる。
  • 申し込んだら人に言う。落ちたら恥ずかしい状況に自分を追い込む。
落ちても勉強にはなるので合否は気にしません。

裏の理由

IT系の部署にとてもダンディーなオジサマがいるんですけどその人が高度情報処理の資格を3つ持ってるんですよね。ネスペ、DB、情報セキュリティだったかな?
年の近い先輩ら2人と話しててそれぞれ1つずつ取ったら勝てるんじゃね?
やってやろうぜ!って謎の対抗意識でがんばることになりました。

はい申し込み〜。

勉強法

だいぶ寄り道しましたね。戻ります。

まず解いてみる

はじめにこちらの参考書を買いました。
後述しますが過去問として利用しました。正直なくてもよかったです。
情報処理教科書 ネットワークスペシャリスト 2011年版情報処理教科書 ネットワークスペシャリスト 2011年版
山下 真吾
翔泳社
Amazonで詳しく見る
今買える最新版はこっちかな。
情報処理教科書 ネットワークスペシャリスト 2013年版情報処理教科書 ネットワークスペシャリスト 2013年版
ICTワークショップ
翔泳社
Amazonで詳しく見る
基本情報、応用情報を受けたときはこのシリーズ1冊で楽勝だったのでとりあえず買いました。
前後半に別れており、広く浅い説明と過去問2年分で構成されてます。

解説をさらっと流し読みしたあと、過去問に挑みました。
ここで絶望を味わいますw
午後問題がまっっっっっっっっったく分からん!
問題文に知らない言葉が3つ以上でてくると読む気も失せますね。

基礎知識のなさを痛感。これが試験1ヶ月前です。
諦めようか悩みましたが合格が目的じゃないので頑張ることにしました。

基礎を固める

次に読んだのがこれ。
マスタリングTCP/IP 入門編 第5版マスタリングTCP/IP 入門編 第5版
竹下 隆史,村山 公保,荒井 透,苅田 幸雄
オーム社
Amazonで詳しく見る
これは良書。断言できます。とりあえず読みましょう。
数多くの基本プロトコルを分かりやすい文章で解説されてます。
ここでまずは下記のようなことを理解します。
  • OSI参照モデルのイメージを掴む(必須)
  • どんなプロトコルがあるのか
  • 各プロトコルのイメージを掴む(どの階層でどんなことをしてるのか)
合わせて下記サイトも読みましょう。
とんっでもなく時間かかりますが分かりやすいです。
3分間NetWorking
OSI参照モデルについては本よりこちらの方が分かりやすいですね。

時間があればこちらのページも読んでおくといいと思います。
NetWork Study 1 : ネットワークエンジニアとして
自分は時間がなくて読み切れませんでしたが非常に分かりやすいです。

重要:上位プロトコルを下位プロトコルが包み込んで(カプセル化)通信してる。
ここから先の勉強を進める上でこのイメージの理解だけは必須です。
キーワードは「アプセトネデブ」

各プロトコルの詳細な動きはどーせ過去問解きながら確認していくことになります。
なのでこの時点ではあまり詳しく分かってなくてもいいです。

たくさん読むのでこれだけで1〜2週間持ってかれます。
ちょうどこの頃仕事が忙しくて次のステップに移れたのが試験6日前でしたw

まずは1年分、深く理解する

次に使ったのがこの本です。この本がなかったら間違いなく不合格でした。
ネスぺ21 本物のネットワークスペシャリストになるための最も詳しい過去問解説と合格のコツネスぺ21 本物のネットワークスペシャリストになるための最も詳しい過去問解説と合格のコツ
粕淵 卓,平田 賀一
星雲社
Amazonで詳しく見る
最新版はこちらでしょうか。
ネスぺ23 本物のネットワークスペシャリストになるための最も詳しい過去問解説と合格のコツネスぺ23 本物のネットワークスペシャリストになるための最も詳しい過去問解説と合格のコツ
粕淵 卓,平田 賀一
星雲社
Amazonで詳しく見る
2014/07/07追記
現在の最新版は下記になります。
どうも自社出版から出版社経由に変更された様子ですね。(著者も変更になっているし紛らわしい…)
購入して確認したところネスペXXシリーズと同じ構成で解説されていました。
白黒印刷から多色印刷になっており、少し読みやすくなっていますが、その代り少し値段が上がったようです。
ネスぺの剣25 ~ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)ネスぺの剣25 ~ネットワークスペシャリストの最も詳しい過去問解説 (情報処理技術者試験)
左門 至峰,平田 賀一
技術評論社
Amazonで詳しく見る
この本では1年分の午後問だけをとにかく深く300ページにも渡って解説してます。
ネスペ21の午後1の問1を例に挙げると
 ・問題は4ページ
 ・問題文を読み解く解説に15ページ
 ・設問を解く解説に12ページ
問題4ページに対して27ページの解説です。
でも順序立てて考える道筋を示してくれてるので本当に分かりやすい。

この本を一字一句"理解"しながら読み進めます。
本当に腑に落ちるまでじっくり読みます。
途中で出てきた分からない用語は先ほどの「マスタリングTCP/IP」や、
ネットで調べたりして基礎の理解に勤めます。

ここで驚いたのが午後問題がまるでパズルのように思えてきたこと。
この本を読むと分かるのですが問題を解くためのヒントが
問題文の各所に散りばめられてるんです。
一見しただけじゃ分からなくても自分の持ってる知識を総動員してじっくり考えてみると少しずつ見えてきます。それら全てが繋がって腑に落ちた瞬間の気持ちよさったらないですw

当時こんなこと呟いてますね

この本を真面目にやるととんでもなく時間がかかります。
たかだか30ページで4時間とか。
正直しんどいですが一問終わるごとに理解が深まってるのを感じられます。

これ1冊に4日。大体15時間かかりました。
この辺りで「お?行けるんじゃね?」とか思い始めます。(勘違いですけど。)

この時点で木曜日深夜。試験は日曜日です。
残された時間はあと2日。(やばい)

さらに過去問を解く

ネスペの試験で最新技術が取り上げられることは少なく、
もし出題されても基本の知識を組み合わせれば解けるようにできてます。
↑ってネスペ21に書いてあります。

そうはいっても自分が解けたのはたった1年分。しかも1回。
問題数にすると5問だけです。(午後1の問1、2、3、午後2の問1、2)

不安しかないw
でも焦っても仕方ないので過去問解くことに。
眠っていた最初の参考書を開きます。

お?
これが意外と解ける。明らかに始めて解いたときと感覚が違います。
もちろん知らない技術とかは追加で調べたりしますが
基本的なところはスラスラ解ける感じです。
ネスペ21がいかに基本を押さえてるか分かりますね。

これを金曜、土曜と時間の限り行いました。

寝る

書き忘れるところでした。
どんなに焦っててもちゃんと寝ましょう。
どんな勉強法より寝るのは大事です。

まとめ

・マスタリングTCP/IPは基礎知識を押さえるのに最適
 ・買って損はない良書
・ネスペシリーズは試験対策として最適
 ・最低でも1冊はやりたい
・Webは下記ページが参考になった
 ・3分間NetWorking
 ・ネットワークエンジニアとして
・最新技術とかどうでもいい
 ・とにかく基礎が重要
・アプセトネデブ
・寝る


いかがでしょうか。
もう少し計画的に時間を使えるのであれば
通常の過去問の代わりにネスペシリーズを全冊やるのがいいかと思います。
(落ちたら来年そうするつもりでした)


この方法でネットワークの知識が乏しい状態から一発合格できました。
この記事が少しでもこれから受験される方の力になればと思います。

ここまでお読みいただきありがとうございました。

2013年12月21日土曜日

【H25 NW】平成25年ネットワークスペシャリスト試験に受かりました。

ネットワークスペシャリスト

名前はカッコいいですけど知らない人も多いですよね。
こんな資格です。→ネットワークスペシャリスト試験

持ってたからなんだって?はい、すいません。
嬉しかったので書かせてください。

難しかった

これを10月20日に受験してきたんですけど正直落ちたと思ってました。
午後1が大問3つから2つを選ぶ選択制です。
早いこと2問を選んで時間いっぱい熟考しなきゃだめなんですが
全て分からない!2つ選ぼうにも選べない!
時間はどんどん減ってくしどーしよ!ってめっちゃ焦ってました。

当時のつぶやき

午後1で撃沈。午後2は意外とできたんですけどねぇ。
年1回しかない試験なのでまた1年後か、、、
と意気消沈で帰路につきました。

そして2ヶ月後・・・

それがまさかの

それがですよ。
昨日発表された合否判定を見てみたら、、、


!!!

え?

同じグループの受験者70人のうち、表示されてる番号はたった7人。

5度見ぐらいしました。

受験票の番号とモニターを交互に見て指差し確認もしました。

ほんとに自分の番号?

まじで?

受かってるーーーー!!!


あまりの驚きをそのままツイートしたところ
20人以上のフォロワーさんから”おめでとう”をいただきました。

これがほんとに嬉しかった。
受かったこと自体ももちろん嬉しいんですが
それよりがんばったことが報われた気がして嬉しかった。

個別に返事を差し上げましたが
ここでもう一度書かせてください。

ありがとうございます!

午後1は60点だったのであと1点少なかったら落ちてたんですよね。
ほんとギリギリですね。
まだ”スペシャリスト”にはほど遠いので
自信もって言えるように今後もがんばりましょ。

はい、長い独り言終わりです!
ありがとうございました。

2013年12月15日日曜日

【C#,LINQ】LINQ勉強会に行ってきました

今日はこれ行ってました。
第3回 LINQ勉強会

4時間ひたすらLINQのお話で内容ぎっしり。
にわかLINQerの自分はかなり必死に聞いていました。

とりあえず忘れないうちにメモ。

これまでのLINQ勉強会について

14:00~14:20 森理 麟さん(@moririring)
いままでこんな活動してきたよ〜。とか
LINQ勉強会は三回目だよ〜。とかの紹介でした。

LINQ 概要 + 結構便利な LINQ to XML

14:20~15:20 青柳 臣一さん(@ShinichiAoyagi)

LINQって?LINQの種類、LINQの書き方に始まり、
後半はLINQ to XMLの便利さについて語ってみえました。

LINQ to XML

W3Cの規定しているXmlDocumentとは全くの別物だそうな。
キーワード:XDocument, XElement, XAttribute
System.Xml.Linq名前空間を使うらしい。

以下のようにしてXMLを作り出すことが可能。
                var xml = new XDocument (new XElement ("AddressBook",
                    new XElement ("Person",
                        new XElement ("Name", "taro"),
                        new XElement ("Age", 20)),
                    new XElement ("Person",
                        new XElement ("Name", "hanako"),
                         new XElement ("Age", 20))
                         ));

これは楽そう。
VBだともっと変態的でソースコード上にいきなりXMLを書き始めることが可能らしい。
こうやって宣言したあとはもちろんLINQで使える。
                var q = xml.Elements ("AddressBook").Elements ()
                    .Where (x => x.Element ("Name").Value == "taro");

ふむふむ。
さらに取り出すときにXElementを直接キャストできるそうな。
                var q = xml.Elements ("AddressBook").Elements ()
                    .Where (x => (int)x.Element ("Age") == 20);

XElementクラスに主要な型へのキャストは大体定義してあるそうです。
もしElementがない場合などキャスト失敗するとException吐かれるんですが
Nullable型へキャストすればいいそうです。すんごい。

もしXPathを使いたい場合はSystem.Xml.XPath名前空間を使えばいいそう。
                var qq = xml.XPathSelectElements ("/AddressBook/Person[Age=20]")....

XPath? 使ったこと無いし良くわからんですはい。
聞いた感じだとLINQ to XMLだけでいいような。

全体的にかなり分かりやすかったです。
ゆっくり進めてくれたしかな?
LINQ大好きなのが伝わってきましたw

もう一つのLINQ - Queryable入門

15:30~16:20 よねやんさん(@yone64)

LINQ to SQLなどで使われるIQueryableを使ったLINQについての説明でした。 IEnumerableの方はいつも使ってますがIQueryableの知識は0だったのでとても面白かった。

EnumerableとQueryable

Enumerableはオンメモリ上の配列などを対象に順次評価していくのに対し、
Queryableは外部のデータソースに対して問い合わせを行うための物。
例えばLINQ to SQL。

自分で実装する場合、
IQueryable<T>, IQueryProvider, IQueryProvider<T>などを書いていく。

IQueryableを使ったLINQで書いていくと
コンパイルしたときにExpressionTree(式木)というものが生成されるそうです。
実行時にはそれを元にQuery(SQLとか)が生成され、外部データソースに問い合わせされる感じらしい。

実際にATNDのWebAPIを対象としたLINQ実装を紹介していました。
大まかな流れは理解できたし一度書いてみようかなとは思ったけど
実際に使っていくかというとどうかなぁといった感じ。
ちょっと複雑になるだけでコーディング量倍増しそうな感じだったw

ちなみにILは基礎教養らしいです。

資料の最後に参考URLが載ってるので時間あるときに読んでみよう。

An Internal of LINQ to Objects

16:30~17:30 株式会社グラニ 取締役CTO ノイエさん(@neuecc)

linq.jsとか作った世界的にもすごい人。
話し方も独特ですごい面白かったw

ひじょーに沢山の項目を話されてましたので気になったところだけ。

即時実行と遅延実行

・ToArray, First, Sum, などなどは即時実行
・IEnumerable<T>を返すものは遅延実行
 遅延実行される物はメモリ効率がよく好き放題繋いでも大丈夫。

・でも遅延実行=何度でも実行される可能性がある
 ToArrayなどで実体化(Materialization)しよう。

・IEnumerator<T>を扱うときは必ずusingすること。
 絶対。

Iterator復習

・IteratorはMoveNextのときに始めて実行される。
・そのため引数チェックのタイミング注意。
・内部的に分離することで引数チェックを確実に行う。

安定ソート、非安定ソート

・OrderByはQuickSort
・QuickSortは非安定ソート
・OrderByは安定ソート
ん?

シュワルツ変換?とかっていうイディオムを使って安定ソートを保証してるらしい。

OrderByを使ってシャッフル、最大値取得

seq.OrderBy(_ => Guid.NewGuid());
seq.OrderBy(x => x.Age).First();
seq.OrderByDescending(x=>x.Age).First();

SortにRandomを使うのは偏るらしいんだけどOrderByの仕組みを使えば大丈夫らしい。理由はよくわかんないけどすごい。MinMaxの取得も確かにこれ便利。
効率考えるとちゃんと別で実装すべきらしいけど手軽に使うなら十分みたい。

ToLookup

始めて聞いた。辞書のValue側がIEnumerableになってるものらしい。

クエリ構文は要らない子

そんな気はしてた!

それAny

始めて聞いたけど笑ったw たしかにそのとおりだw

Where連打

Where連打は正義。楽しい。
.Where(...).Where(...).Where(...)ってかいてると効率厨が沸いてくるらしい。
でもコンパイルすると&&に変換されるから大丈夫だって。すっげー。


この他にも色んなネタを話されてました。
資料のページ数を見るだけでも項目の多さが良くわかりますね。
どれも深く考察されててさすがだなーと思うばかりでした。


ここからはLT。

手積みでLINQ

アイライト 石野さん (@AILight)
IQueryableを使ったLINQを使うために便利な関数を紹介されてました。
(...ちょっと理解追いつかなかったけど認識合ってるかな?)

組み込みでもLINQ

shagaさん (@shohaga)
.Net MicroFramework+LINQの紹介をされていました。
組み込み機器でもLINQ使えるなんて面白いなぁ。

Codeer Friendly

イッシーさん (@StoneGuitar777)
PCの調子が悪かったようでテーマソングを流したのみでした。残念。
テスト自動化ツールのFriendlyというライブラリを開発されているそう。
懇親会でデモ見せてもらいましたが使い方次第で何でもできそう〜。



4時間みっちりとても勉強になりました。
IQueryableのあたりはよく分かってなかったので
イメージ掴めただけでも大収穫でした。
あとは勉強になったとともに自分はまだまだ勉強不足だなーと再認識。
がんばろー。

2013年12月14日土曜日

【Unity,Photon】PhotonCloudでオンラインゲームつくっちゃおー その2【応用編】

またまたPhotonCloudの勉強会に参加してきました。
Unityで Photon Cloudを使って、オンラインゲームを作っちゃおう【応用編】

前回の基礎編をまとめた記事はこちら
【Unity,Photon】PhotonCloudでオンラインゲームつくっちゃおー

前回の基礎編も簡単でしたが応用編もとても簡単でした。
たった4~50分で複数人同時プレイ可能なシューティングゲーム(もどき?)
ができてしまうので驚きです。
RigidBodyをどのように同期するのかが分かりとても参考になりました。

つくったもの

このスクショは自分のキャラだけですが、
複数人が同時に現れ、弾を打ち合います。
弾があたるとキャラクターは消滅(死に)ます。

つくりかた

公式のスライドが公開されてましたので載せておきます。
コーディングが少し必要ですが全部コピペで終わるので簡単ですよ。


学んだこと

・座標を同期する場合はMathf.Leapを使えば滑らかな動きにできる
・物理演算する/しないなどはPhotonView.isMineプロパティで制御を分ける
・RPCによる通知もisMineプロパティで制御するとよい(Ownerが責任を持つ感じ)
OnPhotonSerializeViewで好きな情報をやり取りできる
・何fpsで同期するかは、開発者が自由に決められる。
 具体的にはOnPhotonSerializeView内でTime.timeなどを使って間引けばよい。

だいぶPhotonの使い方見えてきたぞ〜。
年内にはiOSで一つ申請出したいな。

2013年12月3日火曜日

【Unity,iOS】シミュレータ向けにビルドするとDebugStringToFileエラーが発生する

リリース用にiPadスクリーンショットを取りたくてシミュレータ向けにビルドしたんだけどエラーした。

バージョン

・Unity 4.2.2f
・XCode 5.0.1

症状

Unity側でBuild&Run〜Xcodeプロジェクトが起動する。ここまでOK
そのままXCodeプロジェクトがビルドされて〜エラー。
Undefined symbols for architecture i386:
  "DebugStringToFile(char const*, int, char const*, int, int, int, int, int)", referenced from:
      prcore::Surface::ClearImage(prcore::color32 const&, prcore::Surface::ClearMode) in libiPhone-lib.a(blitter_integer.o)
      prcore::Surface::BlitImage(prcore::Surface const&, prcore::Surface::BlitMode) in libiPhone-lib.a(blitter_integer.o)
ld: symbol(s) not found for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)
実機で実行するには何の問題もない。なんやろ。

調べた

調べたら海外でも騒いでた。
ここは未解決だったけど。
http://forum.unity3d.com/threads/205241-XCode-5-Unity-4-2-2-on-OS-X-10-8-5
こっちで解決してた。
http://stackoverflow.com/questions/19871377/xcode-undefined-symbols-for-architecture-i386-debugstringtofile-when-building

Unity 4.3で解決済みだってさ。

解決

Unityを更新して解決。
よかったよかった。

2013年12月1日日曜日

【Unity】シーン遷移時のフェードイン・フェードアウトを実装してみた

お久しぶりです。
前回の記事からもう1週間も経ってるんですね。ブログ続けるの難しい…。

さて今日はScene遷移時のフェードイン・フェードアウトを実現できたのでまとめておきます。
フェードって言っても色々あると思いますけど
今回実装したのはだんだん暗くなって、だんだん明るくなるシンプルなアレです。

イメージ

  • だんだん暗くなり、Sceneが切り替わり、だんだん明るくなる
  • 暗くなる(明るくなる)時間は好きに指定したい
  • Application.LoadLevelと似たような感じで呼び出したい

デモ


Hosted by UnityRoom.com

ダウンロード

2015/03/22追記
大きく作り替えるとともにGitHubに公開しました。
ダウンロードおよび使い方はGitHubをご確認ください -> Unity-FadeManager | GitHub

従ってここから下は古い情報です。

実装

1時間弱で完成。
長いのでソースは一番下に載せておきます。


使い方

SingletonMonoBehaviour.csを用意

下記の記事にある"SingletonMonoBehaviour.cs"を用意しておく。
【前の記事】シングルトンの実装についてはこちら
【Unity】なんちゃらManagerクラスを作ろう(シングルトン)

FadeManagerの配置

・空のGameObjectを作成
・名前をFadeManagerにする
・AddComponentでFadeManagerを追加


呼び出す

Application.LoadLevelの代わりに下記のように書く
・FadeManager.Instance.LoadLevel("シーン名",フェード時間)
FadeManager.Instance.LoadLevel("Scene2",1.0f);

こんな感じ。
これだと1秒かけて暗くなり、Scene2に切り替わり、1秒かけて明るくなる。
いい感じ。


ソース

FadeManager.cs

using UnityEngine;
using System.Collections;

/// <summary>
/// シーン遷移時のフェードイン・アウトを制御するためのクラス
/// </summary>
public class FadeManager : SingletonMonoBehaviour<FadeManager>
{
 /// <summary>暗転用黒テクスチャ</summary>
 private Texture2D blackTexture;
 /// <summary>フェード中の透明度</summary>
 private float fadeAlpha = 0;
 /// <summary>フェード中かどうか</summary>
 private bool isFading = false;
 
 public void Awake ()
 {
  if (this != Instance) {
   Destroy (this);
   return;
  }

  DontDestroyOnLoad (this.gameObject);

  //ここで黒テクスチャ作る
  this.blackTexture = new Texture2D (32, 32, TextureFormat.RGB24, false);
  this.blackTexture.ReadPixels (new Rect (0, 0, 32, 32), 0, 0, false);
  this.blackTexture.SetPixel (0, 0, Color.white);
  this.blackTexture.Apply ();
 }
  
 public void OnGUI ()
 {
  if (!this.isFading)
   return;

  //透明度を更新して黒テクスチャを描画
  GUI.color = new Color (0, 0, 0, this.fadeAlpha);
  GUI.DrawTexture (new Rect (0, 0, Screen.width, Screen.height), this.blackTexture);
 }

 /// <summary>
 /// 画面遷移
 /// </summary>
 /// <param name='scene'>シーン名</param>
 /// <param name='interval'>暗転にかかる時間(秒)</param>
 public void LoadLevel(string scene, float interval)
 {
  StartCoroutine (TransScene (scene, interval));
 }
 
 
 /// <summary>
 /// シーン遷移用コルーチン
 /// </summary>
 /// <param name='scene'>シーン名</param>
 /// <param name='interval'>暗転にかかる時間(秒)</param>
 private IEnumerator TransScene (string scene, float interval)
 {
  //だんだん暗く
  this.isFading = true;
  float time = 0;
  while (time <= interval) {
   this.fadeAlpha = Mathf.Lerp (0f, 1f, time / interval);      
   time += Time.deltaTime;
   yield return 0;
  }

  //シーン切替
  Application.LoadLevel (scene);
  
  //だんだん明るく
  time = 0;
  while (time <= interval) {
   this.fadeAlpha = Mathf.Lerp (1f, 0f, time / interval);
   time += Time.deltaTime;
   yield return 0;
  }

  this.isFading = false;
 }

}

ポイント

・実行にはSingletonMonoBehaviourクラスが必要です。→こちら
・Application.LoadLevelの代わりにこのクラスのLoadLevelメソッドを使います。
・第一引数に遷移先シーン名を指定
・第二引数にフェードにかかる時間を指定

まとめ

Application.LoadLevelだと呼び出してから実際に切り替わるまでにタイムラグがあるので
ユーザーがボタンを押してからの反応が遅く、あれ?押したよね?ってなります。

これはユーザーにしたらすごいストレスですよね。
ボタンっぽくないボタンとか、押しても反応がないボタンとかしんどい。

今回のフェードを実装したことで
読み込みが多少遅くてもボタンを押した瞬間に
暗くなり始めるのでユーザーには多少親切になりました。
(そもそも読み込み早くしろよって言われればその通りですけど…^^;)

しばらくこれで使ってみよう。

それじゃまた!
Unity系記事まとめ
Related Posts Plugin for WordPress, Blogger...