@numa08 猫耳帽子の女の子

明日目が覚めたら俺達の業界が夢のような世界になっているとイイナ。

Mobile Act Osaka で MVVM について話をしてきました #MobileAct #Osaka

What/Why/How MVVM と題してiOS アプリで MVVM アーキテクチャとは何なのか、何故採用したのか、どうやって実装をしたのかを Mobile Act Osaka #10 で登壇してきました。

mobileact.connpass.com

久しぶりの登壇だったので気合が入った結果10分のLT枠にもかかわらず、20分くらいの資料を用意してしまいました。

大阪に来てからそろそろ3年目を迎えようとしていますが、勉強会での登壇はこっちに引っ越しをしてからは一切やっていなかったのでいい刺激になりました。懇親会でも何人かの方に声をかけていただくことができて、コミュニティの形成や参加という意味でも役に立ったイベントでした。

会場の Osaka Inovation Hub は大阪市から委託された企業で、こういった勉強会や起業家支援など様々な活動を行っている場所なんですね。2回くらいお邪魔をしたことがありましたが、初めて知りました。ぜひ活用をしていきたい。

OSAKA INNOVATION HUB – 世界につながる、 イノベーション・エコシステムのハブ

懇親会では MVVM アーキテクチャに関する質問に加えて、働き方やチーム編成についての質問もいくつかいただきました。その辺りについても、ノウハウや経験があるので、どっかのタイミングでアウトプットをしていきたいですね。特にいろいろなメンバーの集まった今のプロジェクトでは心理的安全性がかなり重要なキーワードになっていると思うので、その辺りについて発表をしてみたい。心理的安全性Night みたいなイベントが求められている?

flutter ポエム

https://flutter.dev/docs/get-started/install https://www.udacity.com/course/build-native-mobile-apps-with-flutter--ud905 https://felangel.github.io/bloc/#/

最近は flutter を触っている。

Dart について

マルチプラットフォームアプリを実装するために Dart 言語の利用を選択した Google や flutter チームの哲学にはもしかしたらスマホアプリエンジニアをスムーズに flutter へ移行させる目的があるのかもしれない。そう感じるほどには Dart 言語は java 言語を継承した言語であると思えた。 良くも悪くも Dartjava に近いため、行末のセミコロンやlet や `val` と言った変数宣言が *できない* など煩わしい点もあるのだが、学習コストは極めて低い。また java で冗長な表現になりがちな無名クラスや無名関数の表現方法についてはシンプルに纏まっていること、言語機能に async await yield と言った非同期/ストリーム用機能が備えられているためモダンなプログラミングを手詰まり無く実装できる。 総合的に見て Dartが選択されたことはスムーズな開発を行う上では適切な手段であったと感じられた。

flutter 本体について

React なんかの知識があればその概念を習得することはたやすい。だいたい同じ。State を持った Widget と State を持たない Widget を作って画面を構成していく。細かいところだけれど、React のように Widget を返す無名関数を作ることはできないっぽい。Widget のサブクラスを作って、インスタンスを生成する必要があるっぽい。 React と大きく違うところは Statefull な widget の State の管理方法。React では Widget の中に State としてプロパティを持たせたが、flutter の場合は StatefullWidget 自体は不変で、外部のコンポーネントからは不可視となる State インスタンスを可変なものとして扱う。この仕組で パフォーマンス上のメリット: Widget の生成や更新は State の変更があったときだけに限定できる プログラミング上の安全性: 外部から State が不用意に更新されることはない と言った恩恵が得られる。

bloc について

flutter と言えば bloc が最もポピュラーなアーキテクチャとして有名である。Business Logic Component パターンと呼ばれて、以下の制約のもと Redux っぽいアーキテクチャーを構成する BLoCの入出力インターフェースはすべてStream/Sinkである BLoCの依存は必ず注入可能でプラットフォームに依存しない BLoC内にプラットフォームによる分岐処理を書くことは許されない 以上のルールに従う限り、他の実装をどうするかは問わない 要は、Bloc という仕組みで Redux の Store に相当する部分からプラットフォーム依存のコードを排除しようという考え。Redux に慣れていればとくに違和感なく受け入れられるが、レビューの際にはビジネスロジックにプラットフォーム依存のコードが入らないように注意する必要がある。lint をいい感じにして import をチェックする仕組みを導入できると良いかもしれない。 懸念としては kotlin/scalasealed class や swift の enum のようにパターンマッチに関する支援機能がDartに用意されていない点。Redux 的なアーキテクチャーなので Event -> State -> Widget の変換が発生するが、パターンマッチが提供されていないためコンパイラでは Event や State のパターン漏れが発生してしまう。また Dart はすべてのオブジェクトは nullable であり、また関数は暗黙的に null を返す仕様となっている。そのため、パターンの取りこぼしが発生した場合には実行時エラーのヌルポが出ることがある。これは Dart のアップデートに期待をしたいところ。

flutter の学習方法

公式のチュートリアルがしっかりしているので、一通りやるのが良い。Udacity でも flutter のコースが公開されているものの、リファレンスを見ながら進めていく必要もあってかなり大変だった。知識が無の状態でリファレンスを読むのは実質難しい。今は bloc を実現するためのライブラリであある、 `flutter_bloc` で公開されているチュートリアルを一通りやっている。実践的なアプリ開発を通していろいろなコンポーネントを一通り触ることができる。これをやった後で Udacity に手を出すのが良いかもしれない。

令和キャンプ

キャンプまとめは DayOut に書いてるのだけど、GW にやったことを残す意味で、こっちにも書いておこうかと。

 

高須町公園キャンプ場

 

GW 中はキャンプ日和の日もあったお陰で、多くの人がキャンプに行ったそう。後からニュースで見たけど、ふもとっぱらもすごかったみたい。

 

かくいう自分も、キャンプ場の目処だけ立てて予約せずに行ったら、行く予定のキャンプ場が全て満員だった。

 

色々と電話をした結果、どうにか開いていたのが三重県松坂市の高須町公園キャンプ場。

 

 

f:id:numanuma08:20190507233029j:image
f:id:numanuma08:20190507233037j:image
f:id:numanuma08:20190507233054j:image
f:id:numanuma08:20190507233051j:image
f:id:numanuma08:20190507233041j:image
f:id:numanuma08:20190507233058j:image
f:id:numanuma08:20190507233045j:image

 

パームガーデン舞洲

 

奥さんの体調が万全じゃ無いため、屋外キャンプは避けてるけどキャンプしたいなー、ということでパームガーデン舞洲

 

トレーラータイプのキャンピングカーに宿泊できるので、夜露に濡れることも無いし設営や撤収も無い。

 

用意された肉を焼くバーベキューも上手に焼けて、満足度の高い連休明けにできました。

f:id:numanuma08:20190507233540j:image
f:id:numanuma08:20190507233531j:image
f:id:numanuma08:20190507233544j:image
f:id:numanuma08:20190507233536j:image
f:id:numanuma08:20190507233549j:image
f:id:numanuma08:20190507233521j:image
f:id:numanuma08:20190507233528j:image

クモ膜下出血で入院をした話

起きたこと

スノーボード中の事故でクモ膜下出血になり、3日間入院をしました。実際に何が起こったのかをまとめて、やっておいて良かったことや今後に向けて改善をしたいことについてまとめます。

事の起こり

2018-2019 のウィンターシーズンは俺の中で空前のスノボブームが訪れて、ぼっちや友達、奥さんと一緒にゲレンデで滑りまくりました。シーズンも終わりに近づいた3/8-9も、東京から id:sseze を呼び寄せて岐阜にある「鷲が岳スキー場」へ行きました。   ski.washigatake.jp

初日は散々滑って2日目。軽い筋肉痛を覚えつつ、でも滑っているうちに体も温まってくるやろ、くらいの感覚で滑り出し。リフトで頂上まで登って鷲が岳の隣のホワイトピアたかすのメインのゲレンデに降りて行った所で事故は起きました。

その時の様子

3/9 は土曜日でゲレンデはなかなか混んでいました。俺たちはゲレンデ入り口で滑り降りた後の合流地点について打ち合わせた後、それぞれスタート。ボーダーやスキーヤーの間を縫うように滑って、そう言えばキッカーがあったから飛んでいきたいなと思いキッカーの方を見たのが最後の記憶です。その後は気がついたら BURTON のフリースを着たおじさんに支えられながら歩いていて「あなたは人とぶつかりました!」って言われていました。

何が起きたのか

どうやら別の人とぶつかったらしいです。そしてそのまま気絶。ぶつかった人がゲレンデのスタッフを呼んで介抱をしてくれたらしいです。

ぶつかった相手のことは全く覚えていません。どうやら俺が「大丈夫です」と答えたらしく、相手はそのままどこかに行ってしまったらしいです。

直後のこと

BURTON のフリースを着たスタッフの人に支えられつつ、いつの間にか id:sseze も合流していてホワイトピアたかすのレストランへ歩いて向かいました。このとき、自分でボードラックにボードを立てかけたような気がします。ただ、このタイミングで意識や記憶はかなり混乱していて`

  • ここがどこなのか
  • なぜここにいるのか

が分かりませんでした。一応自分のことと id:sseze のことは分かったので大きな不安はありませんでしたが。

失った記憶を取り戻すため、スマホの写真を見返してようやく意識と記憶が帰ってきた感じがありました。車でゲレンデに来て2日目だと言うことを思い出すのに、10分くらいはかかったと思います。

最初の対応

ゲレンデのスタッフの人は俺と id:sseze が席についたのを見てどっかに行っちゃいました。仕方がないので、自分で体に大きな怪我がない事を自分で確認。骨が折れたりとかは無さそうだなと思いました。筋肉痛による痛みはありましたが、なによりも頭が痛い。気絶もしていたらしいし、頭を強打してるはず。ここで思い出されるのが声優の塩沢兼人さんです。

ブリブリざえもんやマ・クベで有名な塩沢さんは階段から落ちたあと気絶、意識が帰ったあと6時間くらいして容体が悪化して亡くなられたそうです。

ja.wikipedia.org

この事を覚えていた自分はすでに脳が内出血をしているであろうこと、放置したら24時間もあれば死ぬかもしれないことをリスクとして捉えて病院探しをしました。

 id:sseze が家族に連絡しろよとか言ってましたが、そんなことより我が身の安全と思い近所の病院を検索。救急車の検討もしましたが、呼ぶべきなのか分からないし、岐阜には #7119 が無いので自力で向かうことに。鷲見病院ならスノーボード、スキー外来があることがわかり、そこに向かいました。

sumihosp.or.jp

病院でのこと

そこそこに混んでいました。後から聞いた話、この日だけで入院患者は3人居たそうです。CTの結果外傷性くも膜下出血と判明。ただ、出血自体は小さくてほぼ止まっている可能性があるそう。しかし、悪化することもあるし家に返すことは出来ないので入院をする流れとなりました。人生初の入院。

入院をしてから

基本的に安静にしている必要があり、トイレに行くときも付き添いが必須。id:sseze が居てくれたので楽でしたが、一人の時はし瓶を使いました。これはこれで慣れたらトイレに行かなくても用が足せて便利。

病院のご飯は思っていたよりも美味しかったです。味噌の味付けが大阪よりも濃くて、名古屋文化の影響を感じました。後、肉や揚げ物が多い。えびふりゃー。

退院

予定通り3日目には退院できました。特に検査もなく、体に異常がないなら退院して良いよとお医者さんに軽く言われた程度。費用は4万5千円ほど。医療保険が降りるけど、それなりにでかい出費となりました。

振り返り

今回、ヘルメットを被っていたため大事に至らなかった可能性があります。ヘルメットも万能ではないですが、 60km 近く出して滑るスポーツを行う上では必須のアイテムだったかなと思います。

また、 1day 保険に入っていたため、仮にぶつかった相手に治療費の請求や訴訟などを起こされても対応ができたかと思います。セブンイレブンですぐに入れるし、シーズン中何度も滑りに行くようならこういう保険には入っておきたいです。ただし、今回は3日で退院だったので 1day 保険からの一時金はありませんでした。

ehokenstore.com

今回はゲレンデに id:sseze と2人で来ていたのも大きいです。やはり怪我をしたときに1人だけだと冷静な判断や対応ができない可能性もありました。そしてなにより心細い。それなりに危険の伴うスポーツであることを自覚して、2人以上で行くほうが良いですね。

今後に向けて取り組みたいこと

2018-2019 シーズンはもう終わりなので次のシーズン以降のこととなりますが、例えばぶつかった相手の連絡先は交換するようにしたほうが良かったです。今回はどっちが悪いとかそういうのは何もわかりませんし、事故の目撃者の情報も得られていないのでなんともですが、場合によっては医療費の請求や逆にこっちが責任を取る必要があったかもしれません。

今回は自家用車での旅行でしたが、車を運転できる人間はメインドライバー以外にも最低1人は用意をしておいたほうが良さそうだなと思いました。 id:sseze は運転はできるのですが、俺所有の自家用車ということで保険の対象外になってしまっていました。各社から出ている自動車の 1day 保険も、車両保険をつけるには7日以上前から申し込みをしておく必要があるとのこと。片方の運転が困難になったときにもう片方に運転をしてもらえるように準備を整えておくべきでした。

あと、今回のケースでは救急車を呼んでしまっても良かったそうです。その辺りの判断がよくわからなくて自力で病院に行きましたが、移動中に事故るリスクを考えると救急車のほうが良かったと言えるでしょう。

最後に

Twitter で入院をしたことをつぶやいたら、様々な方からお見舞いのメッセージを頂戴しました。全てにレスはできていませんが、目は通してます。ご心配おかけしましたが、元気にやってます。いちおう、ちょっと間をおいてから MRI での検査を行う予定です。

これに懲りずに来シーズン以降も滑りに行きたいな。

LGBTを読み解く を読んだ

この本を手にとったきっかけは、2018年の年末に読んだブログだった。

razokulover.hateblo.jp

はてぶのホットエントリーでみたのだけれど、本文中に気になる一文があった。

「自分は寛容な人間なのでLGBT?とかいうやつにも寛容だぜ、理解してるぜ」とか「何でも受け入れるよ僕は」みたいな、知ったかぶりな態度の人は意外と多いんじゃないかなと思う。 良心的であることや寛容であることに満足して、その先のもっと詳しい部分を知ろうとしない態度。 これこそがマジョリティ的な態度であり、本当の意味での理解を阻害してしまっている

この文章を読んでまさに自分のことじゃないだろうか?と恐怖を覚えたのがきっかけ。性的指向についてはマジョリティに属する自分がマイノリティのことを正しく理解せず、無意識のうちに傷つけているのではないだろうか?と思った。

この本はメインタイトルが「LGBTを読みとく」だけれど、どちらかと言うと副題の「クィアスタディーズ入門」の方が主題で、「クィアスタディーズ」という非常に大雑把に一言でまとめると、「セクシュアルマイノリティについていくつかの視点からセクシュアルマイノリティそのもの、あるいはマジョリティなど性に関する事柄を考察する」方法を学ぶための本だ。

つまり、この本を読んでもセクシュアルマイノリティを理解できるわけでも、傷つけないように振る舞うことができるわけでもない。この本に書かれているクィアスタディーズによる考察や分析を行うことで過去に発生した現象や事件、または文学や映像作品などを考察することができるようになる。もうちょっと具体的に書くのなら、「今日の自分の発言は、セクシュアルマイノリティに対する差別的な発言ではなかっただろうか?」と夜眠るときに布団の中で反省や考察ができるようになる、と言える。

この本は「クィアスタディーズ入門」とあるようにやはり入門書にすぎなかった。この本を読んで、実際に世の中で起きている意識的あるいは無意識的なセクシュアルマイノリティに対する差別や共感について考察を行い、さらに参考文献として紹介している本を読んで知識を身に着けて自分の振る舞いを正していくための最初の足がかりとして役立つ本だと言える。

2018年のまとめ!振り返り!!

デ・ジ・キャラット20周年

何はなくともデ・ジ・キャラット20周年だった2018年。プリパラに出会ってしまったり、みれぃちゃんにぷりぷりぷりになったりしたけど、やっぱり一番可愛いのはでじこちゃん。

f:id:numanuma08:20180702203438j:plain
20周年ワインおいしかった

プリパラ

2018年はプリパラに出会った年でもあった。みれぃちゃん最高。

このへんのエモい思いは酔った勢いでブログにした。

numa08.hateblo.jp

リモートワークの話

numa08.hateblo.jp

完全リモートワークになってから1年が経過しました。最近、リモートワークラボの方にインタビューをしていただきました。

www.remotework-labo.jp

www.remotework-labo.jp

リモートワークに関してのメリットやデメリット、これから改善をしてみたい点やアイデアについては別でブログを一個書けるくらいにはネタが有るのですが、何はなくとも通勤を全くしなくても良いという状況を作り出すことができたのが最高です。電車通勤は3年くらいで音を上げて、コベリンに入ってからは主に徒歩圏内で通勤できる場所に住んでいましたが、やはり仕事が終わって疲れ果てた状態で帰宅してから晩御飯の準備や家事全般をするのはただただ苦痛でしかなく、そう言ったことを一切しなくても良い環境であることは何事にも代えがたいものだと思います。

食洗機

とは言え、家で仕事をしていると家事や何やらが捗るのかと言えば必ずしもそうではなく、やっぱりやらなければいけないことをやることは面倒くさいと感じます。そこで、2月には食洗機を導入。

f:id:numanuma08:20180202203114j:plain
食洗機

乾燥機

料理を作ることは好きだけれど、片付けをするのは嫌いというぐーたら思想を体現化したこの白色の箱には毎日非常に助けられています。というか、一家に一台設置されていたほうが良いんじゃないだろうかと思えてしまう。食器を洗う時間は例えば1回の食事につき20分くらいは大きく見積もってもかかってしまうと思うと、昼夜と作っている我が家では40分近くかかっていたという計算。1日で40分、1年だと243時間なので10日ちょっとくらい人は食器を洗っているわけです。この間にできることは多いなと思い、PCの前に座ってコードを書くでもなく、本を読むでもなく、畳に寝転がってYoutubeなどを見る始末。心のリラックスができていると思えば良い買い物でした。

さて、食器を洗う手間が省けたなら次に目をつけるのは衣食住の中でも衣でしょうか。来た洋服を洗う必要があるわけで、洗濯をするのは日課として行っていますがこれを物干しに干すのが面倒くさい。晴れている日ならば良いものの、雨の日ならば部屋干しが必要となるため一部屋利用する必要がある。これはどうにかしなければ、ということで洗濯乾燥機を検討したのが9月くらい。ただ、どんなに部屋の寸法を図ってみても小型の洗濯乾燥機が入らない。こればっかりは引っ越ししなければ解決ができないなと思い、乾燥機単体の導入に方針転換。良い感じの写真は無いのだけれど、10月に購入。最初は洗濯機から乾燥機に移す手間はどうなのか?と思っていたけれど、実際にやってみればなんてことはない。30秒もあれば余裕で終わる。しかもうれしいことは、乾燥機と洗濯機が別になっているので乾燥しながら洗濯ができる。洗濯乾燥機にはこれができない。普通洗い&乾燥機で良いものを先に洗ってから、デリケート洗いが必要なものを後から洗うことで、洗濯の手間や物干しの手間を大幅に短縮できるわけ。物干しと洗濯にやっぱり20分くらいかかっていたものとすれば、1年で10日くらいの節約になっていると言える。部屋干しをしなくなった部屋の中で本を読むでもなく、プログラミングをするでもなく畳で寝転がってYoutubeなどを見る始末。心のリラックスができていると思う次第。

読んだ本

読書録をつけるぞ!!!って毎年言っている気がするけれどできてない。できるだけブログに記録は付けていると思うけど。

numa08.hateblo.jp numa08.hateblo.jp

レディ・プレイヤー・ワン、映画も最高だったね。映画ではメカゴジラガンダムの構図で「俺はガンダムで行く」という名台詞が生まれたけれど、原作ではレオパルドンエヴァが登場していて、それはそれで良かった。メカゴジラが三式機龍なので、この「わかってない」感じのチョイスを悪役がするのが、作品に対する愛やロマンを持っていない悪者っぽくて愛しさすらある。

numa08.hateblo.jp numa08.hateblo.jp numa08.hateblo.jp numa08.hateblo.jp numa08.hateblo.jp

増田で話題になってた本。災害シミュレーションだけれどこの本を読んだあとに起きた北海道の地震とそれに伴う停電で、この本に書かれていたこととおなじような出来事が発生して、シミュレーションとしての完成度の高さがあったように思う。

numa08.hateblo.jp

numa08.hateblo.jp

numa08.hateblo.jp

numa08.hateblo.jp

アウトドア、旅行

f:id:numanuma08:20180224131052j:plain

淀川の河川敷で焚き火をするところから始まって、6月くらいから本格的にキャンプをしてたのだけれど、夏は異常な暑さ&雨で全然キャンプへ行けなくて、結局10月〜11月に今までのうっぷんを晴らすかのようにキャンプをしまくった。

f:id:numanuma08:20181025144112j:plain
阿蘇カルデラ
f:id:numanuma08:20181030104559j:plain
噴火する桜島
f:id:numanuma08:20181029175715j:plain
無限焼酎

会社でキャンプへ行ったりもしたね。

2019年

まとめを書いて思ったけれど、コードを書く以外の色々なことをやるようになってきていると思う。2018年の github 活動を見ても、そんなに無い。そのぶん、本を読んだりアウトドアをしたりスポーツをしたりと言った部分に時間を使うようになった。人生はインプットを多めに取り入れていきたいという思いもあるので、このペースは継続していきたい。

今年はトライアスロンに挑戦してみたいなぁとか、スノーボードをもっと上手に滑れるようになりたいなぁとか、家族に新メンバーを迎え入れたいなとか色々とやりたいことや挑戦したいことはあるのでこの気持を大事にしていこう。

ただ、2018年は一人遊びや家族で遊ぶ機会が多すぎたような気もするので、もっと外に出ていろいろな人と出会うようにしていきたい。

「ポップステップげっちゅー みれぃプリ!!」をするアニメーションを作ったよ MagicaVoxel + Blender + Unity

この記事は プリッカソン Advent Calendar 2018 - Adventar 12/23 の記事です。

昨日は id:saken649 さんの 「形態素解析を用いて、夢川ゆいのユメ語録を再現してみる試み」でした。

syn-station.hatenablog.com

南みれぃとぼく

みれぃちゃんが私自身にとってどういう存在だったのかは、以前ブログに書きました。

numa08.hateblo.jp

過去の自分を投影してそして過去の自分を受け入れられる存在としてみれぃも好きだって言える。俺の中のみれぃはそんな存在なんだ。

今見返してもエモさの塊だけで文章になってない、エモエモな記事ですね。ともかく、みれぃちゃんは自分自身を投影できるそんな存在です。

やっぱり造形でしょう

さて、思いの丈を表現するのなら、やっぱり造形物にしてしまうのが良いでしょう。という訳で、できあがったものがこちら。

プリパラ2期84話「ポップ・ステップ・ぷりぷりぷり!」 のみれぃちゃんを思い出しながら見てください!!

みんな大好き MagicaVoxel を使いました。アニメーションは Blender で行い、最終的に Unity に組み込みました。

ephtracy.github.io

家に「ねんどろいどこ~で 南みれぃ マジカルピエロコーデ」があるので、それを参考にモデリングを行いました。

f:id:numanuma08:20181021103429j:plain
みれぃ

ちなみに、このフィギュアは Amazon のほしいものリストに入れていたら、 [twitter:@NorsteinBekkler] が差し入れで送ってきてくれたのだけれど、ギフト扱いになっていない荷物でマーケットプレイス出品だったため

「えっ!?俺、自分でも記憶にないうちにオーダーしてた??それとも神??神様なの!?女神様!!!ジュリィありがとう!!プリチケ配達人になったんだね!!ついに俺のところにもプリチケがきたんだ!!そ、そうだ、ライブ!ライブしたい!!歌いたい!踊りたい!!おしゃれなコーデでランウェイを歩きたい!!それが今の夢。今叶えたい夢。パン!ご飯!!麺類!!ひゃっほぃ」

という感じでテンションが上りました。

ともかく、ポチポチと Voxel を組み上げてできあがったものがこちら。

f:id:numanuma08:20181223042335p:plain
みれぃ

「絵心は死んだ!もういない!!だけど、俺の心にこの胸に!!1つになって生き続ける!!」

自分の中では及第点かな?と思えるモデリングができたので満足です。

ちなみに、 MagicaVoxel の使い方は id:henteko07 さんの本が最高に詳しいです。

ボーンを組み込む

最終目標はアニメーションをすることなので、できあがったモデルデータにボーンを組み込んで動かすことができるようにします。ボーンの組み込みは Blender だけでもできると思いますが、今回は Maxiamo を使って自動生成してもらいます。

Mixamo

MagicaVoxel で obj 形式で出力を行い、出来上がった .obj, .mtl, .png を1つの zip にまとめます。

f:id:numanuma08:20181223043110p:plain
エクスポートされたファイルを zip にまとめる

zip ファイルができたら Maxiamo に Adobe アカウントでログインをして、キャラクター一覧ページにある Upload Character からさっき作った zip ファイルをアップロードします。

f:id:numanuma08:20181223043319p:plain
Upload Character を選ぶ

f:id:numanuma08:20181223043351p:plain
zip ファイルをアップロードする

f:id:numanuma08:20181223043431p:plain
アップロード成功

無事にアップロードに成功したら、次は関節の位置を決めます。丸い関節ポインターを動かして、モデルの適当な位置に配置します。

f:id:numanuma08:20181223043553p:plain
関節の配置

また、指は不要なので「Skelton LOD」から「No Fingres」 を選びます。

f:id:numanuma08:20181223043643p:plain
指の関節は不要

あとは Maxiamo が自動的にボーンを設定してくれます。ボーンの設定に失敗することが多々あって、今回は次の対応を何回か行いました。

  • 関節同士の位置を遠ざけた
  • スカートや髪の毛など、浮いているパーツと関節を遠ざけた

対応が良かったのかどうかはわかりませんが、何度かチャレンジを繰り返したらうまく行きました。

maximo で適当なアニメーションを設定して、動作確認。

ポップステップげっちゅー するプリ

アニメーションすることがわかったら、 設定をしたアニメーションは一旦削除して、fbx 形式でファイルをダウンロードします。maximo のダウンロードボタンから「Format」 を fbx、 「Pose」を T-Pose としてダウンロードします。

f:id:numanuma08:20181223044450p:plain
ダウンロードする

ダウンロードした fbx ファイルを Blender の File -> Import -> FBX と進んで、インポートします。

f:id:numanuma08:20181223044607p:plain
インポートする

ボーンを動かしてアニメーションする

インポートできたらボーンを動かすことでアニメーションを設定します。Blender を今回はじめて使いましたが「何かの値を変える」→「キーフレームに設定する」→「間が補完されてアニメーションになる」という仕組みなんですね。ボーンの操作をしやすくするため、 Armature -> Armature の設定から「Display」を Stick に変更し、X-Ray にチェックをつけました。

f:id:numanuma08:20181223045140p:plain
Armature の設定

f:id:numanuma08:20181223045200p:plain
ボーンが見やすくなる

アニメーションの設定を行っていくため、 Dope Sheet -> Action Editor を開き、1フレーム目を選択します。

f:id:numanuma08:20181223045452p:plain
1フレーム目を選ぶ

3Dオブジェクトが表示されている方の画面では、 Armature を選んだ状態で左下の Edit ModePose Mode に変更ます。こうすることでボーンの編集ができるようになります。ボーンは右クリックで掴んだらそのままドラッグで移動、Rキーを押したら回転の設定、もう一度Rキーで移動に切り替え、という操作で編集が可能です。alt+Gで移動のリセット、alt+Rで回転のリセットができます。また、Aキーで全てのボーンを選ぶことができるので、この状態でalt+Gやalt+Rを使えば、編集のリセットができます。

f:id:numanuma08:20181223045931p:plain
ボーンを設定してポーズを決めよう

ポーズが決まったらIキーを押してInset Keyframe Menu -> Rotation を選び、キーフレームにポーズを追加します。

f:id:numanuma08:20181223050044p:plain
キーフレームを追加する

そして、次のフレームとして20フレーム先を選んでポーズの決定、キーフレームの追加、20フレーム先を選択・・・という手順を繰り返します。今回は20フレーム間隔でやったけれど、もうちょっと短い間隔でやってもよかったかも。アニメーションの動作確認はDope SheetTimelineに変更することで、操作コンソールっぽいのが出てきて操作ができました。

f:id:numanuma08:20181223050431p:plain
アニメーションの確認は Timeline から行う

Unity でインポート

アニメーションもできあがったしここで完成でもいいですが、もうちょっと色々なことができるように Unity に組み込むところまでやります。

テクスチャーの出力

Blender で編集をしたモデルを Unity に組み込んだところ、テクスチャーが無くなってしまったようではんぺんみたいなみれぃさんが表示されてしまいました。

f:id:numanuma08:20181223050731p:plain
「パプリカ学園校則第55301条!みれぃをはんぺんみたいに表示してはならない!!」「はんぺんみたいな委員長も素敵です」

流石に辛いので直します。テクスチャーをちゃんと画像として出力しておいて、 Unity のマテリアルで設定すれば良いようです。Blender で出力したい 3Dモデルを選び、テクスチャーっぽいマークのアイコンのタブを選び、 Image -> Sourcesave an image packed inthe .blend file to disk を押してテクスチャーの画像を保存します。

f:id:numanuma08:20181223051229p:plain
テクスチャーっぽいアイコンを選んで、 Source を見つける

f:id:numanuma08:20181223051129p:plain
テクスチャーを保存する

モデルの出力

3Dモデルとアニメーションを出力して Unity で利用できるようにします。File -> Export -> FBX を選んで fbx 形式で出力し保存します。

f:id:numanuma08:20181223051403p:plain
fbxで保存

Unity で表示する

Unity 上でテクスチャーの画像ファイルと、fbxファイルを Assets に追加します。Assets で右クリックをして Create -> Material から新しいマテリアルを作ります。新しいマテリアルを選び、Inspector の Albedo の左側の四角□にテクスチャーの画像をドラッグ・アンド・ドロップで設定します。これで、テクスチャーを表示するマテリアルが作られました。

f:id:numanuma08:20181223051732p:plain
新しいマテリアルの Albedo にテクスチャーの画像を設定する

fbx を読み込んだときに Prefab として追加された3Dモデルを選択して、 Inspector の Remapped Materials->On Demand Remap-> palettemat にさっき作ったマテリアルを設定します。

f:id:numanuma08:20181223051930p:plain
Prefab にマテリアルを設定

ここまでできたら、ちゃんとしたみれぃちゃんをシーン上に追加できます。

f:id:numanuma08:20181223052008p:plain
やっぱりみれぃはこうでなくっちゃだめプリ!

最後にアニメーションの設定です。Assets 上で右クリックをして Create -> Animator Controller を選択して、新しい Animator Controller を作ります。Animator ウィンドウ内で右クリックをして Create State -> Empty を選びます。新たにできた State を選んで Inspector 上で Motion に fbx を読み込んだときにつくられたアニメーションを設定します。

f:id:numanuma08:20181223052319p:plain

そして、この Animator Controller をシーン上にある3Dモデルの Animator コンポーネントController に設定します。

f:id:numanuma08:20181223052434p:plain
Controller に設定する

あとはシーンを再生することでみれぃちゃんが動きます!!やったぷり!!

終わりに

今回、生まれて初めて Blender を触りました。Unity でテクスチャーがつかない現象が発生していて、それを解決する方法がわからなくて困り果ててた・・・。

自分の好きなキャラクターをモデリングしたりして動かすことができるようにするのは、めっちゃ楽しいのでみんなやると良いと思う。

でじこちゃんでもなんかやろうっと!!