書評:24時間で学ぶ! Unity 5 基本操作と開発のコツ

概要

ボーンデジタルさんから発売された「24時間で学ぶ! Unity 5 基本操作と開発のコツ」

24時間で学ぶ! Unity 5 基本操作と開発のコツ

24時間で学ぶ! Unity 5 基本操作と開発のコツ

を献本頂きました。

前職でもOpenGL 4.0 シェーディング言語 -実例で覚えるGLSLプログラミング で(一方的に)お世話になった出版社さんです。

書籍紹介ページによると
24時間で学ぶ!Unity 5 基本操作と開発のコツ|書籍|株式会社ボーンデジタル

「Unityは必要だけど難しそうなので手をつけられてない」
「業務があるから出来るだけ短時間で覚えたい」
「来週からUnityを使うって金曜日の夜に言われた! 」

本書はこのような方に最適です。

と書かれており、「来週からUnityを使うって金曜日の夜に言われた! 」 のあたりが生々しくて良いですね!

実際、プログラミングは何らかの形でやったことがあれば、ゲーム作り自体は初めて、という人にとっての最良の入門書の一つです。

  • 424ページでUnityの基本機能を網羅している
  • プログラミング初めての人向けではない
  • Noteや章末Q&Aが実用的

という感じです。

424ページでUnityの基本機能を網羅している

Unityには非常に多くの機能があります。プログラムをする部分を除いてもUnityEditorのGUIだけで

  • シーンへのオブジェクト配置
  • マテリアル、テクスチャの設定
  • Terrainによる地形モデリング
  • カメラパラメータ、イメージエフェクトの設定
  • ライトの配置、設定
  • オブジェクトへの物理演算設定
  • オブジェクトへの機能コンポーネントの追加
  • 2Dスプライトによる2Dゲーム作成
  • uGUIによるGUI作成
  • Shurikenパーティクルによるエフェクト作成
  • ドアが開くなどのアニメーション設定
  • ステートマシンベースのアニメーション切り替え
  • オーディオシステムによる3D,2Dのミキシング
  • 出力プラットフォームの切り替え、ビルドオプションの変更

などが出来ます。
これらを全部をしっかり解説するだけで何ページになるか想像もつきません(僕も全部は理解しきれていません…)

この本は424ページで24章(24時間)に分けています。平均すると1章あたり20ページくらいです。 そのページ数で少なくとも上記のことについて網羅的に学ぶことができます。

それぞれの機能ごとの詳細な説明があるわけではないですが、概要、使用方法、主な設定については書かれています。
そして何章かごとにサンプルゲームを作り、覚えた各機能の復習が出来るようになっています。

この説明方法としては
Unity5 3D/2Dゲーム開発実践入門 と近い立ち位置の本だと思います。

僕が思うに24時間本の方が、「漏れなく網羅する」ことに重点を置いています。

なので、「Unityを勉強する」から入るなら、この本が良いかと思いますし、「ゲーム作りを体験する」ならUnity5 3D/2Dゲーム開発実践入門が良いかと思います。

プログラミング初めての人向けではない

Unityの入門にどうしても入る割に、あんまり使わない章と言えば - Unityインストールの仕方 - プログラミングの説明

だと思います(失礼)

まあ、入門を謳うなら入っていないと不安になりますしね…しょうがないですよね…

この本の場合は、40ページそこらでUnity上のC# の説明があったり、Unityインストールと各シーンビューなど説明が15ページくらいあったりします。

Unity上のC# と限定していても、40ページ(2時間分くらい)で学ぶので割と駆け足というか、プログラミング自体はやったことがある人向けになっています。 なので「プログラミングはやったことがない」という人は
Unity5の教科書 2D&3Dスマートフォンゲーム入門講座を一冊目として強くお勧めします。

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

以下エントリで触れています。   Unity本のおすすめ 2016年版 - izm_11's blog

また、気になった点として、この本は原著がある和訳本ですが、 「レベル」や「スカルプト」というゲーム系や3D系でよく出るカタカナ語に対して訳注が記載されていません。 ゲームは作ったことがある人、あるいはゲームをある程度知っている人でないと面食らうかもしれません。

Noteや章末Q&Aが実用的

章末Q&Aはとても実用的です。 僕自身が初心者のころに疑問だった点に対して、十分に正しい回答があります。例を挙げます

Q「キャンバスレンダーモードはシーンに混在できますか」
A「はい。シーンに複数のキャンバスを追加して、それぞれ異なるレンダーモードに設定することができます」

Q「Unityでヒューマノイドにキーフレームアニメーションを作成できますか」
A「できません。インターネットで調べたら方法が載っているかもしれませんが、専用の3Dソフトで作った方が良いでしょう」

Q「ビルドの設定の多くは重要そうに見えます。なぜ説明されていないのですか?」
A「本当のことを言うと、これらの設定のほとんどは皆さんにとって必要ありません。正確に言えば必要に迫られるまでは重要でないということです。(以下略)」

どうしても、入門書だけだと手落ちになりがちな、こういった点にフォローがあるという事で、この本は「誠実な作り」だと思います。良い本です。

同様にNoteやCautionには、必要十分な追記があるので、Unityはある程度分かっている人でも、ここらをパラパラ確認しておくと良いと思います。

おすすめの学習パス

Unityを初めて触るなら1章からですが、Unityを昔ちょっと触って放置してた人などは、7章のミニゲームを作るところからスタートすると、良いリハビリになりそうです。なぜなら1章から6章でインストール、ヒエラルキービュー、Terrain、カメラ、ライトなどが説明されていますが、過去にUnityを触ったことがある人なら飛ばしてもなんとかなるかもしれないからです。

この本はスクリプトを習うより前に、まずは一本、7章でミニゲームを作るという構成になっていて、とても親切です。

ある程度Unityが分かっている人、Tips,Note,Q&Aをざざーっと読むだけでも、意外な発見があるかもしれません。

総評と補足

読み終わった後も、リファレンス的に使えるので5000円の価値はあると思いました。

また、補足ですがこの本の原本は英語のビデオチュートリアルがあります。特にGUI操作が多いUnityの学習としては、こういったビデオ教材はとてもありがたいです。

Sams Teach Yourself Unity Game Development in 24 Hours

しかし、残念ながら3章分までしか無料公開されておらず、それ以降のビデオは追加で権利購入してアクセス可能です。

うう、ボーンデジタルさん…なんとか、このビデオ部分も、和訳つけてアクセス可能になったりしませんでしょうか? ドットインストールさんのUnity入門がだいぶ古いままなので、日本語ネイティブ向けのUnity初心者向けビデオラーニングコンテンツが、ほとんど無いのです…

au版Galaxy Note3(SCL22)を買ってsimフリー化した

概要

メインで使っていたE-mobile回線のNexus5がバッテリーも消耗してきてmicroUSB端子が痛んで来たので代替機を検討していました。

どうやらそういう用途には、au版のGalaxy note3(以下SCL22)はsimロックも解除できて便利だそうです。
調べたところSCL22は白ロム価格も18000円程度まで落ちているので購入しました。

各種設定を行うことでE-mobileのsimで

が行えるようになりました。
5.7インチと大きなサイズで、おサイフケータイも付いていて、タッチパネル感度もNexus5やiPhone5s並みだったので、しばらく使っていこうと思います。

もしメイン端末を買い替えるなら2万円くらいの格安スマホを買うのも手ですが、SCL22の白ロムも十分以上に便利です。試していませんがdocomoや各種MVNOのsimでも動きそうです。

続きを読む

Unity本のおすすめ 2016年版

概要

izm-11.hatenablog.com この記事の内容をそろそろアップデートしておきたくなったので Unity5世代向けに書きます。
ドットインストールさんのUnity入門ビデオが、Unity4.2くらいで止まってるので、何か良い無料のビデオ教材があると嬉しいのですが…

始めの一冊

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

Unity5の教科書 2D&3Dスマートフォンゲーム入門講座 (Entertainment&IDEA)

Unityも初めて、プログラミング自体も初めて。何ならゲーム作るのも初めて。という人に向けた一冊として素晴らしくお勧めです。
分かる人に言うなら「C#のひよこ本」みたいな立ち位置です。

Unityのコンポーネント志向の説明が丁寧で、

  • C# で書かれている
  • サンプルが平易で、無理に多機能を網羅せずにUnityの設計思想を説明している
  • スクリプトを「個別の振る舞い」「インスタンシング用」「マネージャ」と大別している。(これは、うまい説明!)

と言うことで、とても良い本です。

書かれているtipsも良く出来ています。

抜粋しますが 「エラーコードが英語で読みたくない」 f:id:izm_11:20160917125324j:plain

「セミコロンのつけ忘れエラーは直前の行をチェック」

f:id:izm_11:20160917125314j:plain

というレベルから書かれています。これはプログラミング自体の入門者をちゃんと対象にする、という著者の思いやりが感じられます。素敵!

余談ですが、全編を通してかわいい猫のイラストが散りばめられています。とても良いです! また、価格も3000円以下なので布教もしやすいです。

Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発

始めの一冊で複数個のミニゲームを作りながらUnityの作法に慣れることが出来ます。
プログラミングはやったことある人がUnityを触るならこの本から始めるのをお勧めします。
Android端末が無くても一応エディタ上で確認出来るので安心です。

素晴らしい点としては

  • 初心者向けでも最初から C#
  • ライトマップから逃げていない

というところです。
しかしプログラミング自体をイメージできていない人がいきなり始めるのは少し敷居が高いかもしれません。
その場合は、上記Unity5の教科書を読んでおくと安心です。

「絶対にコードを書かないぞ!」
という場合はPlay makerと心中するのも手ですが、上記2冊を順に丁寧に追いかけると、プログラミング自体が初めての人でも十分になんとかなります。

中級者を目指す(ゲームを一個作る)

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

Unity5ゲーム開発レシピ ハマるゲーム制作のノウハウ

この本は逆引きtips集としても使えるのですが、頭から順番に進めていくとTPSなロボゲーが完成します。
(例えとして適切かはおいておいて)バーチ○ロンを自分で作る場合に、どんな要素があるのか、それはUnityではどう実現するのか。という事を一冊通して学べます。

ゲームプログラマになる前に覚えておきたい技術

ゲームプログラマになる前に覚えておきたい技術

ゲームプログラマになる前に覚えておきたい技術

で学んだ僕としては、 ロボ物のTPSには人生で大切なことが全部詰まってるんだ!!! と強弁して、これをお勧めしたいです。

あとはUnity4時代の本ですが、同じく一冊かけて一つのゲームを作る系のモンハン的なやつは

Unityゲーム開発-オンライン3Dアクションゲームの作り方

Unityゲーム開発 オンライン3Dアクションゲームの作り方

Unityゲーム開発 オンライン3Dアクションゲームの作り方

も良い本でした。 セールなどで安くなった時に購入して、Unity5対応が無くて困った場合は

Unity5で追試したときの変更点まとめを以前書いているので、参考になれば幸いです。 qiita.com

中級者向け

ゲームの作り方 改訂版 Unityで覚える遊びのアルゴリズム

ゲームの作り方 改訂版 Unityで覚える遊びのアルゴリズム

ゲームの作り方 改訂版 Unityで覚える遊びのアルゴリズム

昔でもイチオシでしたが、フルカラーになってUnity5対応の改訂(mecanim,uGUI)が入りました!SBクリエイティブさんの英断に感謝します。 バンナム本です。 企画のペライチからキーとなる要素を抜き出し、実装して、ゲームを仕立てる。

Unity5 3D/2Dゲーム開発実践入門 作りながら覚えるスマートフォンゲーム開発 と本の構成は近いですが、こちらの本は「Unityの素直じゃない使い方をする」場合にも助けになります。

  • 無限スクロールする背景は?
  • コースやメッシュの動的生成は?

など、素直なUnity入門書では意図的に避けられているけど、使えると楽しい分野のトピックが含まれています。

uGUIではじめるUnity UIデザインの教科書

uGUIではじめるUnity UIデザインの教科書

uGUIではじめるUnity UIデザインの教科書

2016年現在において、OnGUIやNGUIを新規で覚える必要は殆どありません。uGUIから始めましょう。 uGUIの日本語解説本は、この本の他にも数冊ありますが、これだけやれば十分です。よくあるiOS風のUIの実現手法がちゃんと載ってるのでこの本は素晴らしいです。

ただしUnityを触るのが初めて、という人向けでは無いので事前に別の本でUnity慣れしておくと安心です。

Unityエキスパート養成読本

Unityエキスパート養成読本[ゲーム開発の現場で役立つノウハウ満載! ] (Software Design plus)

Unityエキスパート養成読本[ゲーム開発の現場で役立つノウハウ満載! ] (Software Design plus)

特にスマホ向けのエンジニアなら、この本の内容が分かっていると良いような気がします。僕自身はスマホ向け案件にあまり関わっていないのですが、周りでの評判も良い本です。
ググっても出てこない(出てきにくい)内容が多いので、目次を読んでドンピシャの人には凄く刺さる内容だと思います。

Unity 5 Game Optimization

Unity 5 Game Optimization

Unity 5 Game Optimization

プログラマの晴れ舞台(?)、最適化にフォーカスした本です。 特にパフォーマンスチューニングおじさんを目指したり、昔でいうとRPGツクールを買わずにDXLibでゲームを作りだすタイプの人なら、これを読んでおくと頼られると思います。
洋書ですが、根性で読む価値があると思います。
カスタムプロファイラの使い方が開始10ページくらいから出てくるので、そういう本です。

その他

エディタ拡張やシェーダに特化した本や「ライフゲームを作りたい」「タワーディフェンスを作りたい」みたいな各種ゲームに特化した本も出てきています。

そういった本まで流通に乗るというのは、知の高速道路を実感できてとても凄いですね…まさかUnity5時代にもこんなバンバン本が出るとは思わなかったです。

(OpenCVなどは古いバージョンの本がいっぱい出た後、最近のバージョンに対応した本が全然日本語では出なくて不便です…)

以前と比べて、最近は出た本全部読む、みたいなことが出来ていないので、良さそうな本が有ったら教えてください! (特にuNet周りの良い本が欲しいですorz)

デモ用のVR ready PC仕立てた

概要

今の自宅で使っているメインPCがパーツを継ぎ足しながら4年ほど使っていたので、VR Readyで「ある程度軽量で」「リュックに入り」「そこそこ速い」PCを仕立てました。

5kg程度で11.5リットル の容積に収まるような物が出来ました。
これはGTX980搭載の17インチノートの i71100(と巨大なACアダプタ)と比べて(モニタとかキーボード分だけ重いけど安価なので)トントンかなあと思っています。

(以下パーツリストですが、ツクモとかに足を運んで「重量が軽くて容積取らなくてVR Readyなやつ一式!」と頼んだほうが確実だと思います。あとはG-Tuneさんのリトルギア、よく出来てますアレ)

続きを読む

3000円で作るTwitter連動wifi体重計

概要

ESP8266系のボードと体重計をつなげて、体重計に乗ったら自動的にtwitterに投稿する仕組みを構築しました。

正直なところ、以下の2個の記事をまとめただけです。(先人に感謝) qiita.com

qiita.com

  • ESP8266だと例示の赤外線リモコン受信モジュールPL-IRM0101の 5Vが給電しづらい
  • twitter連携との組み合わせが分からない

みたいな方の一助になれば幸いです。

作った後はUSB-ACアダプタで適当にボードごと放置しておけば良いので、PC接続しなくても良くなり、WithThingsみたいな使用感を得られます♪

用意するもの

体重計(2100円)

上記記事にあるように、赤外線式で表示を飛ばしてくれる物が良いです。僕は同様にHashy SALUTEを買いました。2000円程度です。

ボード(700円)

ESP8266搭載の適当なブレイクアウトボードを購入します。VCCから3.3Vが出ている物が良いです。

僕はnodemcu v1.0互換のLolin v3を使いました。700円程度で買えます(届くまで時間かかるかも)(これはUSBシリアルがCH340になっててドライバのインストールが楽なのが好みです)

www.banggood.com

CH340のドライバはこちらです。   http://www.microcontrols.org/arduino-uno-clone-ch340-ch341-chipset-usb-drivers/

類似のボードだとAmazonでこんな風に売ってます。(動作未検証)

赤外線リモコン受信モジュール(100円)

赤外線リモコン受信モジュール PL-IRM1261-C438 akizukidenshi.com

この赤外線リモコン受信モジュールは5V以外にも、3.3Vでも動くのでおすすめです。

TwitterアカウントやThingSpeakアカウントやwifi

これはお任せします。注意点として、Twitterメインアカウントを連携すると 皆さまに自分の体重を大公開する ことになるので、別アカウントにしておく方が無難です…

こうなりますorz

作成手順

ボードセットアップ

まずはnodemcu v1.0をArduinoで書けるように開発環境をセットアップする必要があります。 Arduino IDE1.6.9をインストールして、ボードマネージャで以下のURLを入れてESP8266系を追加します。

  1. File→環境設定→追加のボードマネージャに入れてください。 http://arduino.esp8266.com/stable/package_esp8266com_index.json

その後Arduino IDEを再起動して、

  1. ツール→ボード→ボードマネージャでespと入れて追加(2.30でいいと思います) f:id:izm_11:20160730191946j:plain

こんな感じでNodeMCU 1.0 ( ESP-12EModule).を選びます。 f:id:izm_11:20160718005240p:plain

動作テストに

int count=0;
void setup()                    
{
  Serial.begin(115200);           
  
  Serial.println("Hello world!");  // prints hello with ending line break 
}

void loop()                       // run over and over again
{
 Serial.println(count);
 count++; 
 delay(1000);                                 
}

みたいなコードを書いて、書き込み(アップロード)してシリアルモニタで開いて文字が表示されるか見てみます。(文字化けするときはボーレートを確認してみてください)

この辺りは以下のサイトが詳しいです。

www.instructables.com

体重計読み取りテスト

NodeMCUのピン配置はこんな感じです。 f:id:izm_11:20160718010022p:plain ブレッドボードにNodeMCUとPL-IRM1261-C438を配置して PL-IRM1261-C438の正面から見て

  • 一番左はVCCなので3Vの印字と合わせて刺す
  • 中央はGNDなのでGまたはGNDの印字と合わせて刺す
  • 一番右は信号なので D2 の印字に刺す

と3本だけ結線します。(こんな感じ)

以下テストプログラムで、これを書き込んだ後にシリアルモニタを開き、体重計の信号が受信できそうな場所に置きます。 実際に体重計に乗って、体重が出力されることを確認します。

#define PIN D2

#define TIMEOUT_US 30000

int read_bits(uint32_t *bh, uint32_t *bl) {
  int count = 0;
  uint64_t ret = 0;

  while (true) {
    unsigned long pulse = pulseIn(PIN, HIGH, TIMEOUT_US);
    if (pulse == 0) break;

    uint32_t bit = pulse < 750 ? 1 : 0;
    if (count < 32) {
      bitWrite(*bh, 31 - count, bit);
    } else if (count < 64) {
      bitWrite(*bl, 63 - count, bit);
    }
    ++count;
  }

  return count;
}

void setup() {
  pinMode(PIN, INPUT);

  Serial.begin(115200);
}

void loop() {
  uint32_t bh = 0;
  uint32_t bl = 0;

  int count = read_bits(&bh, &bl);

  if (count == 39) {
    Serial.println(bh & 0xFFFF);
  }
}

wifi接続、ツイッター投稿

手順としてはこのままです。

ESP-WROOM-02(ESP8266)からTwitter投稿 - Qiita

さっきの体重を測る部分と連携して、体重をツイートするコード例は以下の通りです。 ssidとpasswordとthingtweetAPIKeyは自分の環境に合わせて書き換えてください

#include <ESP8266WiFi.h>


#define PIN D2

const char* ssid = "Your SSID";//書き換えてください
const char* password = "Your password";//書き換えてください

char thingSpeakAddress[] = "api.thingspeak.com";
String thingtweetAPIKey = "ADDJNDKAHDK";//書き換えてください

WiFiClient client;

#define TIMEOUT_US 30000

int read_bits(uint32_t *bh, uint32_t *bl) {
  int count = 0;
  uint64_t ret = 0;

  while (true) {
    unsigned long pulse = pulseIn(PIN, HIGH, TIMEOUT_US);
    if (pulse == 0) break;

    uint32_t bit = pulse < 750 ? 1 : 0;
    if (count < 32) {
      bitWrite(*bh, 31 - count, bit);
    } else if (count < 64) {
      bitWrite(*bl, 63 - count, bit);
    }
    ++count;
  }

  return count;
}

void setup() {
  pinMode(PIN, INPUT);
  pinMode(LED, OUTPUT);

  Serial.begin(115200);
  Serial.println("Booting...");
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while(WiFi.waitForConnectResult() != WL_CONNECTED){
    Serial.println("Connection Failed. Rebooting...");
    delay(5000);
    ESP.restart();  
  }

  Serial.println("Connected to wifi");
}

void updateTwitterStatus(String tsData)
{
  if (client.connect(thingSpeakAddress, 80))
  { 
    Serial.println("Connected to ThingSpeak.");
    Serial.println("Posting: " + tsData);

    // Create HTTP POST Data
    tsData = "api_key="+thingtweetAPIKey+"&status="+tsData;

    client.print("POST /apps/thingtweet/1/statuses/update HTTP/1.1\n");
    client.print("Host: api.thingspeak.com\n");
    client.print("Connection: close\n");
    client.print("Content-Type: application/x-www-form-urlencoded\n");
    client.print("Content-Length: ");
    client.print(tsData.length());
    client.print("\n\n");

    client.print(tsData);
    client.stop();
  }
  else
  {
     Serial.println("Connection failed.");
  }
}


void loop() {
  uint32_t bh = 0;
  uint32_t bl = 0;

  int count = read_bits(&bh, &bl);

  if (count == 39) {
    int num=bh & 0xFFFF;
    float weight= (float)num/10;
    String twStr = "Tweeting from ESP8266. my weight: " + String(weight)+" kg";
    updateTwitterStatus(twStr);
    Serial.println(num);
    delay(30000);
    
  }
}

これを書き込んでしまえば、あとは体重計に乗って15秒くらい経って下りるだけで、勝手に連携したツイッターに体重を書き込んでくれます。 レコーディングダイエットや、twitter apiを使った可視化などにも使えそうですね。

補足

NodeMCU系のボードが手元にあったので試しましたが、技適問題があるのでご利用は自己責任でお願いします。 また、他のESP8266系でも実現できると思うので、是非おためしくださいませ。