imog

主にUnityとかの事を書いています

UniRXでuGUIのテキストをアニメーションさせる

UniRXの勉強も兼ねて小ネタ的なやつ。

いわゆるノベルゲーのこういうやつ

これをuGUIのTextがついてるオブジェクトにペタっと貼ると動きます。

UniRXをインポートしていることが前提です

using UnityEngine;
using System.Collections;
using UniRx;


[RequireComponent(typeof(UnityEngine.UI.Text))]
public class TextAnimation : MonoBehaviour {
    [SerializeField]
    private float speed;

    void Start()
    {
        var current = GetComponent<UnityEngine.UI.Text>();
        string rawText = current.text;
        current.text = "";

        Observable.Interval(System.TimeSpan.FromSeconds(speed)).              // speed秒置きに
            Take(rawText.Length).                                             // 元の文字列の長さ分実行され
            Select(_ => 1).                                                   // 実行ごとに都度1を取り出し
            Scan((acc, currentLength) => acc + currentLength).                // 現在の実行回数を計算する
            SubscribeToText(current, length => rawText.Substring(0, length)); // rawから0~length文字取り出してcurrentに投げる
    }
}

実際使うときはボタンとかキーとか外部のアクションで文章を途中で止めたいとかありそう。 購読を一回止めて、再度実行というのがまだわかってないので次にでも書きます。

UnityFukuoka07をやってきた

およそ半年ぶり www.zusaar.com

31人の予定だったが、先日じょぎの後輩とかにお誘いしてみたら意外と参加者が多くて多分40人はいた気がする。Unity初心者がかなり多め(自己申告)

オフィス7Fの大きさ考えてMAX50人にしてたけど実際50人来てたらオールスタンディングだったかもしれない。

今回は、SPAJAMでやったことについて資料を上げて話した

www.slideshare.net

zxingがゼブラクロッシングという無駄にかっこいい略称と知って驚いた。

以下は他セッションの話

EventSystemsの話

www.slideshare.net

長峰さんのEventSystemsとはなんぞやと、活用方法のお話。 前回のrectTransformもだけど、便利だからなんとなーく使ってるくらいの認識の機能をしっかり保管できるくらいまとめ上げられてるの本当にすごいと思う。

自分はEventSystemsは知っていたが後半のUnityEventの方は把握できていなかった。エディタ上からやれるのは最高に便利なので活用していこうと思う。

今回聞きそびれたけどUnityEventのジェネリクスシリアライズした自前クラスとかいけるのかちょっと気になった。

Unityとストリートマップの連携の話

金子さんによるストリートマップAPIを使って、Unity上に実際の地図を表示していく話。 ストリートマップAPIの緯度経度から周辺の地図情報を取るのは面白そうだった。しかも結構早い。

後半に出てた標高APIを使って、周辺の標高情報を取得してTerrainを修正するのはオープンワールド系作るのに活用できそう。というか標高APIなんてあったのかという驚きが大きかった。

地理院地図|技術情報

日本の地形を動的に生成するオープンワールドなんかも面白いかもしれない。

標高APIもストリートマップAPIも通信に制限ないから無限に叩けるらしい。太っ腹!と最初思ったが単純にリスクを考えられていないのではという気持ちになって無駄に心配してしまった。

ユニティちゃんのゲーム作った話

金子さんの教え子の九大生の三人が、一ヶ月無いくらいの期間でUnity初心者からゲームを作ってきた話。並びに作ったもののお披露目会。

トロルを銃で倒すゲーム! => 銃弾が何故か真下に発生してしまい、その銃弾でプレイヤーが少し押し上げられる => 連射したら押し上げられて空に行く => そうだ、銃弾の軌跡で絵を描こう

上記の流れが秀逸すぎて腹筋が痛くなった。 というかそっちの方向性でゲーム作って欲しい。絶対面白い。

アンカンファレンス

Unity関連で気になることを付箋に書いてペタペタ貼ってもらい、それを元に雑談するタイム。 基本主催者4人が質問に答えるような感じだったが、後半は少しづつ主催者参加者含めた誰かが答えれるような感じになれた気がする。

記憶から抜け落ちてなければ、ピックアップしたキーワードは以下

  • 初心者はどうやって勉強したらいい?
  • 広告SDK何使ってる?
  • ゲーム以外でどんな事例がある?
  • アセットストアで販売てどうやるの?
  • UIの解像度がマシンごとにズレまくって困る。
  • Unityのライバル的エンジンは?
  • Unity+MMDてどう?
  • PVとか作りたいけどUnityって向いてる?
  • モーションはツールで作るべき?Unityで作るべき?
  • UnityからWEBページ観れる?
  • Unity+Bluetoothとかできる?

Unityで何ができるかというと割となんでもできると思っているんだけど、Unityの必要があるかどうかは別の話で、アニメーションとかPVとかは自分の慣れている方でやるのが早いなと思った。

Unityは何でもこなすスーパーマンではなく何でも大丈夫と言うイエスマンっぽい。

所感

自分はイベント立ち上げるのは好きなんだけど、継続的にやっていくのが致命的に苦手なので第七回の準備を進めてくれた岩本君にすごく助けられた。ありがとうございます。

また登壇してくださった長峰さん金子さん、九大生のお三方ありがとうございました。

毎度やはり参加人数が凄まじいのでUnityってすごいなと思った。

あと、明らかに初心者ってレベルじゃなさそうなスキルの人が結構いたので次回は登壇してもらえるようにアプローチかけたい所存。

SPAJAM福岡予選の所感

簡単に振り返って http://spajam.jp/2015/result/fukuoka.php

よかったところ

実装の速さが尋常じゃなかった

チームの人の実装速度がマジで速い。こうだろうというふわっとしたところからきちんと動くものが気づいたらできていた。寝てる間に妖精さんが頑張ってくれてたのかもしれない。

UIとかその辺もきちんと考えて作り上げてるから、実装後にデザイナーが入ってどうこうというのがあまりなかった気がする。普段の経験からできているのだろうなあという印象。 もちろんデザイナも仕事が早く、自分が灰色の質素な画面で開発しててmasterを取り込んだ瞬間いきなり背景とかボタンとか揃ってたこともあった。

取捨選択のスピードが程よい

自分の例でいくつかあげると、下記の三点を実装しようと考えていた。

  • 戦闘ログ保存、呼び出し機能
  • QRコード読み取り機能
  • Androidプッシュ通知機能

上記は全部自分がやったこと無いとこだったので、できるかどうかというところがよく見えていなかった。 なので30分程度調べて、目処が立たない場合は諦めるという感じで削っていった。

戦闘ログ保存は、いわゆる放置ゲーにおいてゲームを落として再起動したりしてもゲームが進んでおり、それまでの工程をユーザが見ることのできる機能のことを言っている。

やり方からわからなかったのでチームの人に聞いてみて実際に実装したらあっさりできたので調子こいて実装した。 ちなみに、その際に拙作のライブラリであるNattoを利用し大幅な開発コストの削減に成功いたしました。

github.com

大幅な開発コストの削減に成功いたしました。

QRコード読み取りは、Zxingというライブラリがググったら出てきたのでそれのサンプルコードを元に実装した

zxingnet.codeplex.com

調査から実装まで4時間もかからなかったのでここは凄く楽だった気がする。

一方AndroidのPush通知はどうもネイティブから書く必要があったらしく、今回の時間で作りきれるかというのと、そこに時間をかける価値があるかというのを話した結果お蔵入り。結果30分程度でやめましょうとなった。

そんなこんなを繰り返したので、実装したのに結局使わなかった・・とかめっちゃ時間かけたけど結局実装できなかった・・とかは回避できたと思う。

新しいことにチャレンジできた

上記のQRコード読み取りだったり。ハッカソンは時間が短いから自分の持ってる知識とかで回していくことが多いんだけど、今回は知らないところに足突っ込んで且つ終わらせれたのがよかった。

というか、そもそもゲーム内容決めるときにできるできないという話をしなかった気がする。 それでも上手く回せたのは取捨選択ができていたからかもしれない。

反省点

開発ルールがふわっとしていた

今回git使ってたんだけど、そもそも全員がgitに慣れているという状態ではなかった。

その中で、まあブランチ切っていい感じにやってプルリク出してね〜くらいのノリでやってしまっていたので開発終盤に大衝突(ビッグバン・コンフリクト)が起きた。急ぎでやっていて各々masterに直pushなどが重なった結果である。その他の小衝突(マイクロ・コンフリクト)が発生でタイムロスなどもあったので、これがなかったらもっと作り込めたかもね〜という話を祝賀会でやっていた。

とにかく時間がないので使い慣れたツールで動くのは重要だし、なんならバージョン管理しなくても全然良いのでここは反省点だなと思った。次回はgitに慣れておくか、別手段で行くかで。できれば前者。そしてルールを決めておこう。

開発中に他チームとの交流ができなかった

忙しすぎて他のチームのやってることが見えないのは勿体無かった。ギリギリネタかぶりは無かったけど。

あと学生さんのチームとかで初めてRailsでサーバ立てたとかでメチャクチャ苦労してたみたいな話を交流会で聞いたので、茶々入れに行けばよかったかなと思った。

少し寝坊

ごめんなさい

ちなみに今回短大の同じ弘中研究室出身の後輩たちが数人別チームで出ていたんだけど、自分も含め全員優秀賞以上はゲットしていたので、弘中研究室ハンパないなと思った。八耐ガチ勢マジパない。

他のチームだと KICKHOST チームの作ったアプリが個人的に凄くよかった。 「食事のときに使えるアプリ」というテーマに対して、食事中にスマホ触るんじゃねえよという方針から「食事中の電話を防ぐアプリ」を生み出していた。

Twillo API等を使って、電話の拒否や拒否メッセージの録音をして、あとはボタンひとつであらゆる電話をシャットアウトするアプリ。デザインもプレゼンも完璧で正直これが最優秀だと思ってた。

本選ではもっと効率良い開発体制にして、温泉に入る時間を増やしたい。あと最優秀賞も欲しい。

あと、今回名刺を持っていくの忘れて社会人としてダメな人になっていたので本選では名刺を持って行こうと思う

SPAJAM福岡予選2日目 最優秀賞いただきました

結論から言うと、最優秀賞に選ばれ本選に進むことができた。やったぜひゃっほい。

これの2日目 adarapata.hatenablog.com

前日は4時くらいにほどほどに寝て8時30起床。10時集合予定が見事にちょっと遅刻した。

2日目は自分のメインの仕事が概ね終わっていたので、他の方の手が回らないところを 引き受けたりgit周りで詰まったところを解決したりなんやかんや動き回っていた。

終了手前でmasterブランチが巻き戻ったりコンフリクトして手動マージなど諸々あったが ギリギリまで粘って発表用のビルド完了は開発終了とほぼ同じタイミングでドラマティックだった。

中身は色々あるし、良かった点も反省点もあるけど、正直死ぬほど眠たいので明日くらいに思い出しながら書く。 かなりいい感じのチームだったと思うので、とりあえずは喜びを噛み締めて埼玉での本選に向かうことにした。

ウェイ

instagram.com

SPAJAM福岡予選1日目

初日でした spajam.jp

駅でサンドイッチとおにぎりを購入しつつ集合時間1分前に到着。想定以上にギリギリだった。

参加者は学生が割と多く、短大、大学、高専とか多岐に渡る面子だった。 学生はなんというかバイタリティがすごく、当たり前のように徹夜という選択肢を選ぶ。 僕は過去の経験からハッカソンでは絶対寝るという方針で動いている。 徹夜で書いたうんコード直すの自分だし。

だいたいハッカソン系は自分の得意なスキル活かしてやんややんやするんだけど、今回諸々の事情でやったことないとこばっかやってる。具体的にはQRコード読み取り実装してた。QRコード思ったより楽しいよこれ。 この辺りは終わった後にまとめようと思う。

ちなみに、今回は開発の際に拙作のNattoを強引にねじ込んだ活用している。

github.com

ついに利用事例も生まれてしまった。

レッドブルも0.2本に抑えたので今日は健康的に寝て明日に備える。 明日の自分が全部やってくれる。

モノビットエンジンを触ってみた

Unite2015の時に、モノビットエンジンというネットワークSDKがもうすぐ公開されるという情報が入って二ヶ月ほど、 ついにリリースされた www.monobitengine.com

城とドラゴンとか結構なソシャゲのバックエンドとして使われていて実績は良いらしい。

UnityでサーバサイドのネットワークSDKといえばPhotonが非常に有名だけど、 PhotonサーバのSDKwindowsサーバでしか動かないので個人的には使えなかった。 試しに AWSWindowsサーバ立ち上げてみたけど、あまりの遅さとマネージャーなんたらの面倒さに 2時間くらいでTerminateしてしまった。

一方モノビットエンジンはlinuxサーバで動作するとのことなので使ってみようという気になった。

とりあえず公式ドキュメントを元に触ってみた MONOBIT Engine official document

環境

マニュアル通りに進めて行ったら、ほとんど詰まることなくできたから特別書くこともなかった。

ただ、マニュアルだとVMwareを使っており、WinSCPを使ってファイルを転送したりifconfig叩いてIP確認などの工程があるけど vagrantで作ったらフォルダをマウントしてくれるから転送しなくていいし、 Vagrantfileに config.vm.network "private_network", ip: "127.0.0.1" とかで任意のIP振ってくれるから素直にvagrant使うと良さそう。

とりあえずエコーサーバの出来上がり(echo_sample) gyazo.com

サーバのセットアップはシェルスクリプトで、サーバはC++で書かれている。 C++全然読んだことないからここで苦戦している・・。

MainExecute.cpp が受け口になっているっぽく、ここに { id, message } の形式で送信し、idでイベント内容を 判別してそこにメッセージを流すっぽい。 ちなみにログは echo_sample.log に書き込まれていく。

正直読むの辛いんだけど、多分C++では簡単な部類なんだろうなー・・。 まだまだ入門部分なんでここからが本気っぽい。

C++詳しい人とかと一緒に読みたい

Nattoにバグ報告が来た

ちょっと前に、NattoというUnity用のライブラリを作りました。 qiita.com

UnityでORマッパー的なのを作って、自分用に細々と弄っておりました。 そしたら三月くらいにバグ報告のissueが立っておりました。 github.com

今日issueに気づいてすいませんすいませんってなった。

原因としては、そもそも自作のUnityEditor上でいじいじしたパラメータは保存されていないもので、 明示的に変更を通知して保存してあげようねという話だった。 docs.unity3d.com

しかしながら4.5系のときは普通に保存されていたので、4.6以降で仕様が変わったのかなと思いながらリリースノートを見直してる。

とりあえず修正はすぐできたのでサクッと直した。

DatabaseConfigが保存されない不具合を反映 by adarapata · Pull Request #15 · adarapata/Natto · GitHub

まあ、自分しか使ってないものと思ってたので他の人からissueが立てられるとも思わず、 これがOSSなんやなって思った。

バグ報告が来るのはある程度やること定まっててモチベーション上がるからじゃんじゃん来て欲しい。

ということでNattoじゃんじゃん使ってください。