主なコンテンツ

〜主なコンテンツ〜

1. Unityで製作したゲームと製作Tips
  1. 三月精チャレンジ(東方Project二次創作)
    1. 作り方
  2. 英語学習2D(オリジナルスマホアプリ)
2. UE4
3. ゲームアプリ見学
4. Bitbucket & SourceTreeでの一連の流れ
  1. 前半
  2. 後半
5. Tips
  1. UnityのTips
  5. SQL文のTips
  6. Final IK
  7. GearVR+Unity

2016年3月31日木曜日

個人製作のゲームアプリ見学【シミュレーション系】(札束ぶた牧場)

■札束ぶた牧場(アプリば

オタク狙いの少々アレな雰囲気とは裏腹に非常に良くできている。システムが上手い上に、バランス調整が絶妙。一般受けする題材を選び、ソシャゲのようなキャラクターの成長システムやバトルにおける相性の概念を取り入れていたら、かなり化けていたのではないかと思う。


ゲームを起動させるとボイス付きの開幕ジャブがあるが、チュートリアルは端的で丁寧。この手のゲームにしては珍しく、茶番少なめでストレスがない。チュートリアル時のカーソルもそうだが、普段のマップも農作物が時々跳ねたり、家の煙突から煙がポップしたりと画面が単調にならないよう、積極的に動きを取り入れている。

なお、度々「ぶた」というキーワードが出てくるが、なぜかゲームに全く絡んでこない。


クッキークリッカー系のゲームなのだが、農作物等を収穫してから再度収穫できるまでのクールタイムが15秒程度なので少し待てばすぐに再収穫できる。この他、農場にいる女の子をタップするとお金を巻き上げ貰うことができたり、時々お金が落ちているので拾ったりすることができる。

これだけなら単にクリック対象が増えているだけなのだが、この作品では「コンボ」という概念があり、お金の入手を絶やさなければ更にお金が貰えるようになっている。そのため、農作物などのクールタイムに他の要素でコンボをつなぎ、再度農作物を入手し…というループが可能。簡単に1000コンボ以上出すことができ、500コンボ毎に報酬がもらえるなど芸が細い。


キャラクターという名の設備。レベルを上げると戦闘攻撃力も上がるし、収穫できるお金も増える。序盤はレベルを上げるためにお金を使うと、収穫できるお金がすごい勢いで増え始め、お金を使っているはずなのにお金が増えるという不思議な現象を楽しめる。


アプリ起動時に放置していた時間分の収穫を貰える。この額がかなり大きいので、ゲームを起動時に貰った資金でキャラクターのレベルを上げたり、設備を購入しようという気になる。そして、レベルを上げたらバトルをしようという気になり、バトルが膠着し始めたら農場で収穫できるものを収穫しようという気になり、収穫で手に入れたお金でまたキャラのレベル上げや設備を購入しようという気になる。

この一連の流れがすんなり受け入れられるので、他のボタン(つまり「レイドボス」や「ショップ」「図鑑」)も見てみようという余裕が生まれる。


図鑑ボタンを押すと、マップというものがあることが分かり、まだまだ遊べるということが分かる。


バトルは自動戦闘であり、見ていない間もずっと戦い続けていくれている。モンスターが知らないうちに倒されているということはザラ。ただしアプリを閉じている間の攻撃間隔は0.5時間毎になる。このあたりの調整が上手い。攻撃エフェクトも一般的な斬撃だけでなく、目玉焼きをぶつけるキャラがいるなど見ていて面白い。



知らないうちに倒してしまうので、敵グラフィックが無駄になっているのではないかと思ったが、これらはモンスター図鑑に記載されていくのでコレクション要素としてうまく活用されていた。


売られている設備を全て購入し、戦闘でボスを倒すと牧場の拡張ができるようになる。これをすると、新しい設備が入荷される。段階を追って、新しい項目を増やしていくところも上手いと思った。

小目的を提示してモチベーションを維持することと、先を読ませず飽きさせない線引きが上手い。

最後に

  • アプリを開くと放置分の収穫が貰えるので、アンインストールする理由がない。とりあえず最後まで遊んでみようという気になる。
  • 普通にやっていれば詰まることなく3~4週間ほどで全員カンストして、やることがなくなるとのこと。
  • 課金する理由がないので、制作者側もネタで課金要素を取り入れた雰囲気があるが、機種変更でデータが引き継げないので炎上している。割と盲点。

2016年3月30日水曜日

個人製作ゲームアプリ見学トップページ

思いの外、スマートフォンのゲームデザインは難しい。
  • 画面は縦、横どちらにする?
  • グラフィックなどの素材はあるのか?
  • 個人で作れる作業量か?
  • 操作しやすいか?指で見づらくならないか?
  • ユーザー(特にライト層)に優しいか?チュートリアルが作り込めるか?
  • 画面に変化はあるか?
  • 中断しやすいか?
ちょっと煮詰まってきたので、先人に学ぶシリーズを始めようと思います。時に参考にし、時に更に新しい案に結びつけたり。

レビューしたゲーム

  1. 周回強化系
    1. Quick Rogue
    2. ひまつぶフロンティア
  2. RPG系
    1. 彼女は最後にそう言った
    2. 時空物語
    3. ダンジョンダイブス
    4. バトルトロッコ
  3. パズル・フリック系
    1. BRICK & TRIP
    2. 魔道姉妹跳ぶ
  4. クイズ系
    1. アニメクイズ
  5. シミュレーション系
    1. えみちゃんシリーズ(よだれ系女子料理店経営シミュレーション)
    2. 境界のアルケミスト
    3. 再生!カラカラ惑星
    4. みどりのほし
    5. アメリカのやぼう
    6. 札束ぶた牧場
    7. 進撃の勇者
    8. 魔王の城
    9. ゆっくり育てていってね

総括(共通性が見えた所)

  • クリッカー系
    • 設備購入で増える速度が加速
    • リアルタイムでインフレ気味に増えていくのが面白い
    • 1つの通貨で完結するので、システム的にすっきりしている
  • 放置育成・生産系
    • フリックで素材を集めるタイプが多い。素材は時間回復。
    • レシピを集めていくタイプが多い。生産は放置。
    • 作ったアイテムを販売してお金を稼ぐタイプが多い。販売は放置。
    • 時間経過は、ゲーム起動時は進展が見られるほど速く、アプリを閉じている間は遅くしたほうがいい
    • 共通する重要そうな点
      • 何をやればいいのか分かりやすいこと
      • 常に到達可能な目標が提示されていること
      • 直感的であること
      • 視覚的に楽しめること
      • ストーリーは軽視できない
        • なんらかの破綻があると、ゲームと無関係なおまけ程度のストーリーであったとしても、冷めていなくなるユーザー層が存在する
        • 逆にストーリーが良ければ、それだけでついてくるユーザー層がいる。小説を見るような感覚でDLしている?
      • 先が読める、一連の作業の繰り返しであることが知覚されると飽きる
        • 新天地、新展開、新要素のような変化が必要
        • もしくは飽きられたタイミングをゲームの寿命と割り切る
      • アプリ起動時に何かを与えて、それを何かに使わせる導線は非常に有力
      • 今回レビューするにあたって、Youtubeに動画が上がっているものは紹介しやすかった。演出などは動画でないと伝わらないので、ゲームアプリを作ったらYoutubeにアップロードしておくと何かの拍子にインフルエンスするかもしれない。

      個人製作のゲームアプリ見学【パズル・フリック系】(魔導姉妹跳ぶ)

      「Rド、iPhone」で引っかかったゲーム第一弾。これを起点に開拓していきたい。

      ■魔導姉妹跳ぶ(作者様HP


      • 起動後に出てくる画面が左上の物であり、何をやれば良いのか分からない。よく見ると一番下に「遊び方」の項目があるのだが、説明やチュートリアルはゲーム中に受ける物だという先入観がある。
        • プログラマーからすると無駄と思えるような「ゲームスタート」しかない画面や、それを押すとチュートリアルが始まるといった要素がいかに重要か再認識させられる。
        • 初めてプレイするのに、説明もなしに選択肢やボタンが複数あるのはストレス
      • アプリをDLする画面のスクリーンショットを見ているため、「姉妹」の付いている項目がゲームスタートの意味であり、playableキャラの数を指定させていることは何となく分かる。
      • 姉妹を押してみると、お金を持っていないのにショップに飛ばされ更に混乱が深まる。アイテムを買ってから出撃するゲームであることは、すぐに察しがつくが、この辺りで投げそうになる。この画面は、色合いやデザインが良くて好印象。
      • タイトルにある「遊び方」の説明は非常に親切。キャラクターがポンポン跳ねており、見ていて楽しい。
      • ゲームシステム
        • ブロック崩しに近い
        • ボールとなるキャラは物理挙動に従いポンポン跳ねる
        • アイテムなどは画面上方にあるのでキャラクターを上に押し上げていく必要がある
      • 最終的な感想
        • フリックで作成した線には制限時間があるのだが、この制限時間が絶妙にシビア。線を用意してもキャラが落下してきたときに消えてしまう。これによりキャラをまた一から押し上げなければならなくなる。
        • さらにMPという概念があり、線を無限に引くことができない
        • 初回のゲームでとりあえず遊んでみて獲得した通貨は17。ショップで一番安い武器は500。さすがに遠すぎる。モンスターを見ることなく、この時点でやめた。
        • かなり作り込んであるのにもったいない
      • 改善すると良さそうな点
        • タイトル画面からアクションパートに入るまでの導線に、不用意な分岐(選択肢)が無ければ良かったと思う
        • フリックで作成する線にMPの概念や制限時間がなく、キャラとぶつかって消滅か再度フリックで消えるという仕組みなら良かったと思う
        • キャラがポンポン跳ねるのを見ているだけで楽しく、アイテムを獲得したときなどにテンポの良い演出が入れば良かったと思う
        • 「ひのきのぼう:10通貨」くらいの程よい目標が小分けにあると良さそう


      2016年3月29日火曜日

      個人製作のゲームアプリ見学【シミュレーション系】(アメリカのやぼう)

      ■アメリカのやぼう(ファミ通




      • 群馬のやぼうの2作目
      • 内容
        • 放置することで星が溜まり、その星をフリック操作で集めてレベルを上げる
        • レベルを上げると1つの星から得られる数が増える
        • 自分の州より星の数が少ないところを自分の州に変えることができる
        • 州を獲得するとレベルの上限が増える

      個人製作のゲームアプリ見学【パズル・フリック系】(BRICK & TRIP)

      ■BRICK & TRIP(ファミ通



      • 白いキューブをフリックすると、その強さに応じて転がっていく。このキューブを赤いブロックまで運ぶのが目的
        • 感覚の延長として画面内の物が動くと気持ち良いのかもしれない
      • 次第にギミックが増えていく。最終的な難易度は難しめ。
      • 専門学校の講師の方が合間合間で作成。約1年ほどかかっている。
      • 前作の「ういろう」も似たような雰囲気があり、こちらも小学生くらいの子供に好評とのこと(ただ、こっちのゲームもちょっと頭が疲れそう…;)

      個人製作のゲームアプリ見学【シミュレーション系】(みどりのほし)

      個人じゃなかったけど、この括りで

      ■みどりのほし GreenThePlanet(iPhoneAC番外レポート



      • Apple注目ゲームに選ばれた作品
        • スマホゲーム市場では何がヒットするのか手探りであるが、確かにこういうゲームは遊ぶ人多いだろうなというのは分かる
        • タップ操作、直感的、暇つぶしに良さそうと思えるゲームデザイン
      • 可愛らしいデザインと、星を爆破して回収するのが気持ち良いとのこと
        • むしろ、いかに爽快感・楽しさを得られるか、またそのための演出に主眼を置いた作品にも思える
      • 1画面で完結するような省エネなゲームデザイン
      • この手のジャンルはクッキークリッカーのような、クリッカー系とも評されている模様
      • 終わりどきがなく、ついついやり続けてしまうタイプの作品
        • 音楽や雰囲気を楽しむゲーム
        • 放置ゲームに分類されているが、隕石がなくなったらやめて、気が向いたらまた雰囲気を楽しむようなゲーム。一般的な放置ゲームっぽさはない気がする。
      • 隕石を破壊→破壊した破片からエネルギーを回収→惑星を緑化が基本的なルール
        • 破壊し続けると隕石がなくなる。放置するとまた溜まる。
        • 破壊できなかった隕石は、惑星を周回して耐久力の減った状態でまたやってくる
        • 緑化が完了すると次の惑星に移動。完了までもそこまで時間はかからない。
      • 開発配信はPUMOという元ハドソンのスマートフォン事業部の方が代表のベンチャー企業(参考

        個人製作のゲームアプリ見学【シミュレーション系】(再生!カラカラ惑星)

        ■再生!カラカラ惑星(ファミ通Appレビュー



        • 時間経過で回復するスタミナを使って、緑化し、街を掘り起こし、街を反映させる
        • 道に沿って緑化していけば何とかなるようにできている
        • チーム製作で半年ほどかかっている
        • 最後の段階でウィークポイントの改善に力を入れている
          1. 常に何をやれば良いか分かるよう、目標を小出しにする
          2. 序盤の単調さを解消するため、広範囲緑化を実装
          3. マップに動物を配置したり、貢ぎ物を持ってくるキャラクターのグラフィックを変えることで、単なるデータのやり取りという印象を持ちにくくしている
        • ユーザー評価ではアクトレイザーに近く、開発者は無人島物語を参考にしたとのこと
        • ユーザー評価こそ良いもののDL数は伸び悩んでいるとのこと。ただ、その後のテコ入れがあったのかレビュー数は1000件を超えているので十分なように思える。
          • スマートフォンでゲームをするという人口には、一般的なゲームユーザーとは異なる特徴がある模様
          • まぁ、この手のゲームは現実の友人との話題の種にはなりにくいか
          • 概要を聞いて魅力を感じるかというと微妙な線。ジェネレーションギャップのような感性の違いはありそう
          • ただ、それを言い出せば「あのヒット作とは何が違うの?」ということに。色々試してみて傾向を掴むしかなさそう。

        個人製作のゲームアプリ見学【RPG系】(彼女は最後にそう言った)

        ■彼女は最後にそう言った(ファミ通Appレビュー


        • 2015年に各所で取り上げられた作品
          • 人気Youtuberによる効果?
          • 2015年ファミ通Appアクセスランキング1位
        • ドット絵ベースで探索しながらストーリーを追う形式
          • 前作は戦闘に特化したので、今回はストーリーに特化したとのこと
          • 破綻しないように細かいところまでルール決めして作られている
          • ループしながら次第に謎が解けていく
          • 最初は謎の手紙が届き、次に記憶がよみがえり、そして犯人を探し、最後に誰が手紙を書いたのかという謎に迫る上手い作り
          • 1時間でクリアできるとのこと
        • このゲームを気に入ってくれた人にとってクリアで終わりにならないよう、サブイベントも用意されている。クイズが人気だったとのこと。
        • チーム製作で作っており、各分野がかなり丁寧な仕事をしている
          • 製作期間は約半年。チーム製作且つドット絵ベースでも作り込むと時間がかかる

        個人製作のゲームアプリ見学【シミュレーション系】(境界のアルケミスト)

        ■境界のアルケミスト(ファミ通Appレビュー




        採集:素材集め
        錬金術:アイテムを錬成
        販売:錬成したアイテムを売る
        研究:2種類のストーリーを進める
        記録:実績、ストーリーログなど


        • 時間のある時に素材を集めて、アイテムを作って、それをお店に並べる形式
        • アイテムの製作はマイクラのような3x3のテーブル形式
        • アイテム生成は放置、販売も放置というタイプ
        • アイテムを売るとお金が手に入り、そのお金で研究して(=ストーリーを読み進めて)いく

        実際にやってみた感想

        • タイトル画面はお洒落でかっこいい
        • ストーリーが人を選ぶ内容なのは想像がつくところだが、ゲーム開始後に何をやるゲームなのか全く分からなかった。
          • チュートリアルとして各ボタンの説明はあるのだが、ゲームサイクル自体の説明がない。各要素が何のために存在するのか全く分からないレベル
          • これならいっそ、「遊び方」の説明書をゲーム内においてくれた方がまだ良かった
          • 前情報からやることは分かっていても、販売のやり方が全く分からなかった。作ったアイテムを商品として売る方法が本気で分からない。



        • 素材はタップして集めるのかと思ったが、「回収」ボタンを押すと一括回収されるものだった。タップして楽しむタイプのゲームではなかった。
        • ファミ通のレビューにもあったが、錬金術のやり方がすごくやりにくい
        • ちゃんとプレイするつもりでDLしたが、全く手が出せずにアンインストールした。これをプレイできている人がどういう人なのか知りたいレベル。
        • 広告に同業他社のゲームが表示されており、そこに面白そうなゲームがあったので移動した。広告をタップさせるのに成功しているので良いのかもしれないが、プレイヤーが流出しているのは果たして良いのだろうか?

        個人製作のゲームアプリ見学【シミュレーション系】(えみちゃん経営シリーズ)

        ■えみちゃん経営シリーズ(ファミ通Appレビュー



        • 料理店経営シリーズ
          • レシピを開発し、空いた時間に食材を集めて、料理を店頭に並べる
        • 女性を中心にヒットしている。海外でも注目されている。
          • 食欲に忠実な女性(自分と重ねることでカタルシス)
          • リアクションが面白い
          • 興味を惹くような料理が次々に現れる
          • 食材をなんでもくれるおじいちゃんがいる(ユニークなおっさん、おじいちゃんキャラは意外と10代の女性にウケがいい)
        • グラフィックに力を入れており、シリーズを増すごとに演出が強化されている
        • 月9的なストーリーが面白い

        個人製作のゲームアプリ見学【周回強化系】(ひまつぶフロンティア)

        ひまつぶフロンティアファミ通App




        • ひたすら右に行くだけという手軽なゲームデザイン
        • 倒したモンスターがペットになってついてきたり、ジョブを育てながら使い分けたり、武器が7種類あったり、アプリを閉じている間は自動回復したりと、シンプルながらかなり深いシステム
        • モンスターやジョブなどの図鑑はかなり細かい
        • 主人公は一人だが、ジョブを変えるとことで女性になったり、モンスターになったりと上手く視覚的な飽きを避けている
        • この作品はひまつぶシリーズの3作目。前作不評だった操作の面倒さを解消するため、ステ振りや装備の組み合わせによるスキル等を削っている。
        • カスタマー評価は現時点で5件のみで、しかも駄目出しが目立つ。かなり洗練されたゲームデザインだが、ユーザーの嗜好が変わってきている印象あり。

        個人製作のゲームアプリ見学【周回強化系】(Quick Rogue)

        Quick Rogue



        • その手があったか!と感心するほど、省エネな戦闘インターフェース
        • 変わらない背景をループするだけ
        • カスタマー評価1500越え、星4.5
        • 数少ない敵グラをサイズの大小で差別化したり、同じ外見でもLvを変えたりで上手く活用している
        • ひたすら敵とぶつかって自動戦闘
        • 縦画面に配置された無駄のないGUIとゲームデザイン

        2016年3月27日日曜日

        iCloudのキーチェーンをiPhoneと連動させたら思いの外面倒だった件

        基本的には公式のガイド通り。承認をするとiPhoneにSMSが届くはずなのだが、何故かこれが来ないバグが多発している。

        この場合は、MacとiPhoneの両方でiCloudの電話番号設定が正しいことと、普通のSMSが受信できることを確認し、それでも異常が見られなければAppleサポートセンターに問い合わせとのことである(参考)。

        2016年3月26日土曜日

        GyazoとFacebookでのgifアニメ投稿

        '15/5/29の対応により、Facebookに.gifで終わるURLを張り付ければ自動的に再生されるようになった(参考)。…はずなのだが色々と仕様があるようでちょっと詰まった。その際、Gyazoというサービスも見つけたので併せてTipsをまとめる。

        ■Gyazo

        PCのスクリーンショットを撮影し、すぐにサービスのストレージに保存するというサービス。撮影しなくても、ファイルをアプリケーションのアイコンにドラッグすれば、それをアップロードすることもできる。ただし、無料会員の場合は2ヶ月間にその画像は削除される。まさにFacebookのような短期的な投稿向け。


        保存した画像のシェア>Directを選ぶと、.gifで終わるURLが取得できる。これをFacebookの投稿に張り付ければ、投稿上で自動的にgifアニメを再生してくれる。

        ■Facebook上の仕様

        ただし、初回は画像の中央にGifと書かれた丸いボタンが現れるので、それをクリックする必要がある。このボタンが現れるのも、投稿から少し時間が経ってからの模様。

        2016年3月24日木曜日

        Google翻訳の意外な機能

        Google翻訳を使っていたら、単語をハイライトすると右下に統計や類義語などが表示されることに気づいた。unreasonableは辞書には「無理」という意味では載っていなかったので、ちょっと面白い。



        まぁ、全文を通して考えるとどれも合わないのかな。多分、ここではunreasonableは「分別のない(言動をする)」だと思う。間違っていたらご指摘ください。


        機械翻訳は、いっそ単語の意味はユーザーにリストから選ばせるのはどうだろうか。それで、正しい訳語の組み合わせをユーザーに作らせればいいんじゃないかな。

        2016年3月22日火曜日

        海外から見た日本語

        Following Verbの意味を調べていたら、何故かマンガの一コマみたいなのが引っかかった。開いてみたら、海外の人が日本語について質問していた。日本語難しすぎワロタ。そしてこれは何のマンガなんだw



        なお、Following Verbの意味は まだ不明。Linking Verbと同じらしいけど、getやincreaseもLinking Verbというのは少しピンとこない。次に挙げる動詞」。Following Exampleなら「次に挙げる例」。

        ちなみに今回偶然見つけたHiNativeは「ネイティブスピーカーに語学や文化を教えてもらえるサービス」らしい。日本語のサポートもばっちり対応している。会社概要見てみたら、住所は恵比寿で平均年齢は29歳。代表取締役は中国の人っぽい。世の中は広いなぁ。

        なお、"おくわけ"の質問には日本人が回答しているけど、これがちょっとズレていて、結局イタリア人が英語で日本語について教えるというシュールなことになっている。ネイティブスピーカーが自分の国の言語や文化に詳しいとは限らないということか。


        〜更に見つかったもの〜

        following verbを調べているだけなのに、妙に面白いものが見つかる。このシリーズ全部見てみたい。ちなみに掲載先の学習内容は結構しっかりしたもの。

          

        このマンガはLearn Japaneseというところで掲載されているものらしい(教科書があって、それをコピーしているのかもしれないけど)。頑張って日本語を勉強してくれている海外の人がいるのは有難い限り。

        ちなみに最後のマンガのWhat's the point?は「それにどんな意味があるっていうんだい?」で、女の子は「ROUMAJI(ローマ字)よ、ROMANJI(ローマン字)じゃないわ」と言っている。オチはおそらく「日本語を学ぶ意欲が感じられないし間違えてばかりだから、ひらがなよりもローマ字使っていればいいじゃない?…ということをあなた自身が言ってくれたわ」ということだと思う。

        Learn Japanese | Tae Kim's Guide to Learning JapaneseLearn Japanese | Tae Kim's Guide to Learning Japanese

        2016年3月21日月曜日

        UnityでLive2Dを使ってみる with Mac(その1)

        とりあえず、マニュアルにある講座に従いながら、詰まった点を抜粋。なお、マニュアルはLive2D Cubism 2.0 以前と以降の二つがある。あとMacはあくまでβテスト版なので、Windowsで使ったほうが無難。

        ■公式マニュアル「Unityでグリグリ動かしてみよう

          • モデルを変更する際、Cubism Modelerを使うよう言われるが、このソフトはCubism Editorに内包されている
          • Macの場合はJavaのインストールが必要
            • OSXがYosemiteの時にJava8で動作していたが、OSXをEI Capitanに変えたら今度はJava SE 6のインストールを要求された
            • 上記ポップアップが現れたら「詳しい情報...」を押せばAppleのJava提供ページに移動できる

          • Macの基本設定では、ファイル名末尾に.bytesを書き足してもファイルの形式変更はできない参考)。そのため、チュートリアルのようにハルのモデルをミクのモデルに差し替えることができない。落としたSDKのsample\SampleApp1\Assets\Editor\Live2DImporter.csを使うとmocファイルをインポートした時に自動でバイト形式に変換してくれるエディタ拡張ができる。(参考

          ■公式マニュアル「ハジメテノ Live2D」('14記念セミナー)

          • Unityに関する話は④から
          • 動画が見切れているので特設ページのスクリプト閲覧必須
          • Cubism Modelerで2Dの絵にポリゴンを割り振り、パーツごとの動きを-n~nの範囲で細かく設定する
            • モデルファイル(.cmox)をダブルクリックしてソフトを起動しても、モデルデータは自動で読み込まれない。都度、ドラッグ&ドロップでモデルを読み込む必要がある。
          • Cubism Modelerで作ったモデルをCubism Animatorに読み込み、歌う動作などのアニメーションを作る
            • リップシンク機能を使えば、読み込んだ音楽ファイルの音の強弱で口の開閉を自動で行わせることができる
            • 瞬きなどの汎用性のある動きは「テンプレート」として保存すると、好きな時にその動作(キー設定)を配置できる
            • Unityで使うのは.mtn形式のファイル(参考:マニュアルの基本操作の冒頭の説明)。何故かこの書き出しについての映像資料がない
            • Cubism Animatorで.mtnのインポートができるはずなのだが(参考)、何故かできない。ver.2.1なのに何故かダメ。そのため、Cubism Viewerでモーションのチェックを行った。
              • 原因判明。プロジェクトとシーンを作り、モデルデータを先に読み込んでおく必要がある(参考)。
          • Cubism Viewer
            • .mocをドロップするよう要求されるが、
              • ドロップ後もこのウィンドウは残る。そしてこのウィンドウを閉じると確認なしにCubism Viewerが終了する。
              • 読み込むのはmocファイルとそのテクスチャファイルのみ。モーションフォルダは別途ドロップして追加する必要がある。(参考
          • モーションの「再生」を押すことで、その動きを確認できる(参考
          • プロジェクト>サンプルにある「表情:笑顔」などを選ぶと、自動的にそれらしい動きを作ってくれる。便利。

          • Live2DのSDKを使うため、プロジェクトにLive2DUnity.dllをインポートする。動画ではLive2Dというフォルダを作り、その中に格納している。
          • ver.2.1で追加されたシェーダーはResourcesフォルダ内に入れないと、「Live2DModelUnity.Draw()」でエラーとなる(参考
          • 必要になるNameSpaceは、live2dlive2d.framework。後者は何に使われるのかまだ分からないので調査中。
          • Startにて、Live2D.init()で初期化する。必ず最初に呼び出す必要がある。
          • テクスチャの「ゴミ取りツール」はCubism Modelerに統合された(参考)。Java7が以上必要(Java8推奨)。
          • setPalamFloatで、目や首の向きなどを変更できる

          • パラメータIDはCubism Modelerで確認できる(参考
          • Live2DModelUnityが何故かリファレンスに無いALive2DModelクラスが抽象基底クラスとなっており、Live2DModelXXXXはそのサブクラス(参考)。Unityの場合も、基本的なメンバはALive2DModelを参考にすれば良い。
          • モデルがオブジェクトより前面に表示されてしまうのは、OnRenderObjectで描画しているケース。描画モードをデフォルトのDrawMeshNowからDrawMeshに変更し、Updateで描画するようにすれば解決できる。(参考:参考先の「描画方法を変更する」を参照)
            • …とあるが、 setRenderModeメソッドがリファレンスに見つからない
            • 試しにサンプルにて、モデルの前面にオブジェクトやuGUIを置いてみたが、前述の問題は起きなかった
            • サンプルの描画はOnRenderObjectで行っているので、おそらく仕様が変わったのだと思う
          • カメラのProjectionがOrthographicになっていないと、パース(遠近法)により表示が崩れる


          • モーションについて
            • public TextAsset[] mtnFiles; // mtnファイル
            • private Live2DMotion motion; // Live2Dモーションクラス
            • private MotionQueueManager motionManager; // モーション管理クラス
              • startMotionの第二引数はメモリ管理(C#の場合は気にしなくていいとのこと)
              • モーション管理クラスは複数生成して、モーションの途中で別なモーションを割り込ませることなどもできる


          〜参考〜

           〜追記(2016.4.15)〜

          Live2Dについて、有志の方がwikiを編集してくださっている模様。こちらに勉強会などの情報もまとめられていました。感謝。
            02_イベント/勉強会 - Live2D Trick wiki02_イベント/勉強会 - Live2D Trick wiki







            〜追記〜

            >>次へ(その2)

            2016年3月19日土曜日

            書籍「オンラインゲームのしくみ Unityで覚えるネットワークプログラミング」の解読


            表題の書籍は、PhotonやUnityMultiPlayerでの同期が幅を利かせている中、ソケットプログラミングで同期をするという硬派なもの。2014年初版なので少々古いためかもしれない。優しげな外見と中身に反して、サンプルコードを用意していることを伝え忘れたまま、どこでどう定義されたのか分からないクラス・メンバをどんどん使い始める魔本。Unityやゲーム業界の変革が早すぎるため、色々と手が回らずに出版される書籍がけっこう多い。

            立ち読みの時点で、ソケット通信APIの具体的な使用方法の説明が一切無いなど気になる部分があったが、面白そうなので調べながら読み進めてみることにした。私は完全に素人なので「バッファ」って何?というレベルからスタートする。流し読みした限りでは、ソケット通信=P2Pという印象を受けている。この印象が正しいかどうかはいずれ分かるということで。それにしても現状技術書は内容を立ち読みで確認しないと怖くて買えないので、大型書店のない田舎人には辛い状況。

            〜その他〜

            • サポートページ
              • 実はここにソースコードがある(何処で説明があった…?)
              • Unity5用のコードは解凍すると1.2GB程になる
              • キャラクターは商用利用OK、再配布不可
            • バンナムフェア
              • 書籍購入特典があるが、別にパスワード等は無いので誰でもDLできる
            •  現時点での感想('16.03.21)
              • サンプルを試してみたがエラーが出る パソコン2台でサンプルを起動させ、正常に動作することを確認した(詳しくはこの記事の後半に記載)

            〜以下、初心者目線での書籍の補完


            ■用語

            第2章
            • バッファ:
              • 処理する速さの異なる端末間でデータのやり取りをする際、一時的にデータを溜めておくためのメモリ領域(参考
            • 受信バッファ:
              • 受信側のバッファ
            • バッファサイズ:
              • おそらく別名ウィンドウサイズと呼ばれているもののこと。バッファが保存できるデータの量。
            • バッファオーバーフロー:
              • ウィンドウサイズより大きなデータが来ること。溢れたデータはロストしてしまう。TCPは送信データのサイズと受信バッファのサイズを比較して、問題ないことを確認してから送信する。
            第3章
            • イーサネット
              • LANの代表的な接続方式。ちなみにイーサはetherと記載し、古典物理の光の仮想物質「エーテル」から来ている(参考:wikipadia)。
            • イーサネットポート
              • 端的に言えばLANの差込口のこと
            • エンドポイント
              • ネットワーク接続の末端にあるデバイスのこと(参考
            • ローカルエンドポイント
              • おそらくエンドポイントのうち、自分側のデバイスのこと。対義語はリモートエンドポイント(参考)。
            • ドメイン
              • インターネット上にあるコンピューターを特定するために、特定のルールに基づいて作られた文字列のこと(参考
            • イントラネット
              • インターネット標準技術に基づく企業内ネットワーク(参考
            • インターネット標準技術
              • SMTP、POPなどを用いたメールシステム
              • HTTPを用いた情報閲覧システム
              • NNTPを用いたニュースシステム
            • DNS(重要!!)
              • ドメインネームシステムの略(参考
                • ホスト名を元にIPアドレスを調べる
                • 他のパソコンとIPアドレスが被らないよう、ネットワーク接続されたパソコンのIPアドレスを登録して管理する
                • 参考先から抜粋
                  • JPNIC Web(http://www.nic.ad.jp/)をWebブラウザで見る場合、実際にはwww.nic.ad.jpのIPアドレスである202.12.30.144という宛先IPアドレスに対して通信が行われることになります。そのためhttp://www.nic.ad.jp/を指定するかわりにhttp://202.12.30.144/とすることも可能です
                  • しかし、このようにIPアドレスで相手先を直接指定することは、Webサーバ等のIPアドレスをなんらかの方法ですべて記憶しておく必要があり、現実的ではありません。
                  • そのため、より人間が覚えやすく使いやすい「名前(例:www.nic.ad.jp)」で指定できるようにするためのしくみが必要となります。DNSはそれを実現するためのシステムです。

            ■C#でのソケット通信

            第3章
            TCPサーバーの待ち受け
            • 名前空間で必要となるもの(参考
            • 実際に使用されていたもの(要サンプルコード確認)
            • System.Net.Sockets
            • System.Net
            • StartListener(int port)としているが、サンプルでは引数を取ることを止め、m_portという定数のメンバを用いている。以降のページでも、このm_portが用いられている。このポート番号は50765で固定(何でこの番号なのか不明)。
            • Stateは自作の列挙体で、主にUpdateで処理の分岐に使われている


            • p39のコードにあるm_isConnectedはサンプルに存在しない使わなくなったメンバ。接続状況はBool代数ではなく、前述のState列挙体を用いている。
            TCPクライアントの接続
            • System.Net.Sockets
              • Socketクラス
                • Socket.NoDelayプロパティ
                  • Socket が Nagle アルゴリズムを使用するかどうかを設定・所得できる
                  • 使用する場合はfalse。それ以外の場合はtrue。既定値はfalse
                  •  Nagle アルゴリズムとは小さなパケットをバッファリングして(溜め込んで)から送信する仕組み。これにより、細切れの通信が回線を圧迫することで生じる遅延や損失、再送信となるリスクを抑える。
                • Socket.SendBufferSizeプロパティ
                  • 送信時に一時的保管するデータの大きさ。これを0にすると、おそらく相手の状況に関わらずデータを溜め込むことなく送信し続ける。
                • Socket.Connectメソッド
                  • 指定されたリモートホストへの接続を確立する。IPアドレスとポートでホストを指定する以外にも、色々な引数が使用可能(要リファレンス確認)。
                • Socket.Send メソッド (Byte[], Int32, SocketFlags)
                  • 送信データは基本的にByte型の配列
                  • 引数の取り方は様々。書籍ではバイト数とフラグを指定して送信しているが、今回の例ではここまで指定する必要は無いように思える。
                  • プロバイダーの最大パケットサイズを越えると、送信されずエラーを返す
                  • 受信相手がデータを保存するのに十分なバッファーを持たない場合は、ブロッキングモードを解除していない限り、送信はブロックされる
                • SocketFlags列挙体
                  • ソケットの送受信動作を指定する
                • Socket.Receive メソッド (Byte[], Int32, SocketFlags)
                  • 戻り値はInt型
                  • Send関数同様、引数の取り方は様々
                • Shutdown メソッド
                  • ソケットでの送受信を無効にする
                  • おそらく送受信を無効にした上で、現在ソケットのバッファにある送受信は全て実行される
                • SocketShutdown 列挙体
                  • Both:送信と受信の両方を無効にする
                  • Receive:受信を無効にする
                  • Send:送信を無効にする
                • Closeメソッド
                  • ソケット接続を閉じ、関連するリソースを全て解放する
                  • 送信側、受信側それぞれで呼び出す必要がある
            • 「Byte型→文字列」への変換と、「文字列→Byte型」への変換について(参考
              • Byte型→文字列
                • System.Text.Encoding.UTF8.GetString(bytesData)
              • 文字列→Byte型
                • System.Text.Encoding.UTF8.GetBytes(str);

            ■動作チェック

            実際に通信できているか確認するためには、通信相手のIPアドレスが必要となる。よって2台のデバイスで作成したプログラムを起動する必要がある(多分、スタンドアロンアプリとしてビルドすれば、同一パソコン内でUnityとアプリ間で通信させることも可能だと思う)。

            ここでは第4章のサンプルで確認を行った。サンプルを再生するとIPアドレス入力画面が表示される。ここで表示されている文字列はhostAddress.ToString()によるもの。表示されているIPアドレスを互いに入力し合うとちゃんと通信ができた。



            • System.Net
              • IPHostEntryクラス
                • ホストのIPアドレス情報コンテナークラスを提供する
                • DNS(ドメインネームシステム)クラスのヘルパークラスとして使用される
                • AddressList プロパティ
                  • ホストと関連付けられたIPアドレスのリストを取得・設定する
                • HostName プロパティ
                  • サーバーのプライマリホスト名を取得・設定する
              • Dnsクラス
                • インターネットのDNSから特定のホストについての情報を取得する静的クラス
                • GetHostEntry メソッド (String)
                  • ホスト名と関連付けられたIPアドレスを照会する
                  • ホスト名に関連するすべての IP アドレス候補が取得され、AddressList プロパティとして設定される
                • GetHostName メソッド ()
                  • ローカルコンピューターのDNSホスト名を取得する


            〜参考〜