もぐりの日記

雑日記

Unity 1 week game jamで盛大に遅刻した話

Unityroomさんのイベント、Unity 1 week game jam 第13回「さがす」に投稿しました。
これはその、備忘録のような何かです。

つくったもの

unityroom.com ノベルゲームです。と書いていたんですが、たぶん一般にはアドベンチャーゲームと呼ばれるジャンルのものです。 読み物も主役なのでアドベンチャーノベルということでひとつ。

やったこと

以下の内容は、拙作のネタバレを含みます。

day 1~ day 3

前回の1weekで、"なんとかの詩人"氏の私の尊きタピオカを浴びろ!!を遊ばせていただいて、爆笑したので、なんかこういうのやりたいなと漠然と考えが進みました。

unityroom.com

テーマが"さがす"だったので、館を探すクローズドな何かがやりたい。
館と言えばミステリかホラーでしょ、"鬼虫兵庫"氏のシロナガス島への帰還めちゃめちゃ面白かったし。

shironagasu.tabinomichi.com

そういう感じで行きたいな、などと憧れをそのままに走らせることを決め。
なんとなく思いついたことをガーっとパワポに書き出して方向を固めつつ、企画書っぽい何かをしたためるなどしてたら半分が過ぎました。

day 4 ~ day 7

話の筋はできたので、素材もろもろが揃うかどうか、実際どんな感じになるかをUnityでバーッと作りました。 なんとかの詩人氏は宴オンリーで作ってらっしゃったようですが、私、宴持ってないし、まぁ最低限の機能ならできるだろと思ってやってました。 うまいこと実装できた感があるのは、

  • テキストウィンドウ/バックログ
  • テキスト送りタイミングで、テキストに埋め込まれたオレオレコードからのBGM/SE/立ち絵制御など

辺りで、まぁそんなに珍しいこともなく組めたのでよかったです。
BGM制御は、例えば<BGM 0>みたいな文字列が出てきたら0番BGMかける、みたいなのをリアルタイムにregexで読み読み遷移してたので、パフォーマンスがちょっと気になってはいたんですが、このくらいの規模なら気にならなかったのでそのままです。気になるなら事前にパースしていい感じに軽量なフラグに直すとか考えてました。

逆にマズかったのが文章と文章のツナギで、例えば描写部分「客室、埃をかぶっている。」みたいな文が出た後に何をするかとか、そういうのをゴリゴリにハードコーディングしてしまっていて、リアクティブなスパゲティってやつだと思う何かができてました。
企画段階で割と画面遷移を固めてたハズが、この後の工程を経て、例外(e.g.ゾンビ戦,時間経過による魅了描写)が多くなりました。

ゴリゴリ遷移を決めうちで書くより、テキストアセットに遷移先とかのステート持たせてイベント発火させた方が自由度高くていい感じだったなと思ってます。あとのフェスティバル。

day 8 ~ day 9

遅刻開始。最低限の機能が確保できたので、実際に流すテキストを描き始めます。遅いが?

企画段階で考えていた登場人物が、

  • 吸血鬼をシバいて不死になりたい館主
  • 魅了に汚染されていく/そして最後にエサになる使用人
  • 哀れ喰われた探索者A
  • なんと脱出魔術師探索者B
  • シバかれたので館主ムカつく吸血鬼さん

で、館に残ってるのが吸血鬼になりそこなった館主と、館の魅了の核になってる吸血鬼さんだけ。
考えてたエンドが2つで、ノーマルが自分にかかってる魅了を解除して脱出、グッドというかトゥルーが吸血鬼をナントカして、根本的に館の魔術をなくすというもの。
吸血鬼は人間に勝てる相手ではないので、ビビろうが何しようが開放一択で、もし拘束中に攻撃してたらワンパンやり返してくる筋で書いてました。

いざ書いてみると、プレイヤーに吸血鬼さんをボコらずに開放する理由が何もないことに気が付いて、軌道修正。 理由がないというのは、むしろボコる理由がある(吸血鬼さんは拘束されている/吸血鬼さんは人間をゾンビに変えられる/吸血鬼さんは人を喰う/手元には吸血鬼に有効な武器)ということです。 館の禍根を絶とうというモチベーションなら、吸血鬼を開放することで人類にとって新しい脅威が野放しになるので、まだ入ってから対処できる魅了のままの方がよくない?という疑問が正しいものに見えたという話。

殺せるなら殺す>ダメなら逃げる>何か狂ったら開放、みたいな3択順序が見えて、じゃあ何に狂ってるんだ……と。

そこで思いついたのが"逃げ"の概念。「人類の脅威になりうるから殺す、は逃げなんですよね」という方針。
館の魔術を解こうとしてる時点で、逃げない人なんですよねプレイヤーの「僕」さんは。自分が助かりたいだけなら、館から自分が出て、後のことは知らないってするのが一番のはずなので。
てことは、最後まで逃げない選択がTrueになると嬉しいよな! ということで、その辺の描写を追加。

とはいえ、人類の脅威を排除しようとするその心意気は、ある意味で自己犠牲的な"攻め"かもしれないので、そういう意味で間違ってないよって仕上げたつもりのGoodが誕生。 根底は逃げだけど、その勇気はたたえるスタイル。吸血鬼は死ぬし、ゾンビは館から出られないので、一番怪異を外に出さないエンドではあります。この「僕」は人類を守ったのでGood。

他方True、開放が逃げじゃない、つまり吸血鬼相手にヒヨった訳ではなく前向きにリスクを飲む動機が欲しくなり、吸血鬼さんの人格が可弱く。 封印状態で弱っている=吸血鬼化する前の人間に近い状態と捉えることで、彼女自身の"逃げ"=自殺/停滞願望を見つけることができたので、それを盛り込むことに。 こうして生まれたのが使用人B(ローラ)さん。"逃げない"ロールモデルでありつつ、かつ、吸血鬼の人となりをそれとなく伝えるポジション。

吸血鬼が可愛そうだから助けるんじゃなくて、彼女にはそうする権利があるから助けるんですよ。ってしたかったんです。ですよ。

これでちょっとマイルドになりすぎたので、吸血鬼さんは脅威だぜ、お前はとんでもねぇものを開放したぜってテイストをちょいたししたり、そもそも殺した方がよくね?ってなるような使用人Aとの触れ合いを足したりしました。すんなり開放選択は、それはそれで、なあなあの逃げになりかねないので。 とはいえこの辺は上手く徹底できてなくて、反省ポイントです。

day 10 ~ day 12

テキストが一通りそろったので、戦闘だったりエンディング演出だったりという部分を本実装。 バラバラと足りない機能や物足りない演出があったので、こまごま直しました。

微妙に手間取ったのが、テキストをアセットに落とし込むところ。テキストはmarkdownで適当に書いてたので、機械的にパースできなくて、手打ちで一つ一つアセット化するしかなく、厳しい作業になってしまって。 元から多少構造的に書いていれば、楽でしたね。

この辺、宴とかだとExcelシートから抜いてるっぽく、もともと構造持ってる状態でテキスト書いていくのはやっぱり正攻法なのかなーみたいなことを感じました。

day 13

投稿

完走した感想

こんなぎりぎりに投稿したのに、評価期間内で100overの閲覧をもらえてうれしかったです。

課題

  • なぁなぁで助けた場合の選別選択肢or条件の設定 (哀れみとか、そういうのじゃない、前向きな選択を強調する選択肢)
  • スパゲティをほぐす
  • 締め切りに間に合わせる
  • ジャンルを調べる(ノベルじゃなくてアドベンチャー)
  • インタラクティブな要素を増やす(探索などに選択要素を)
  • ナウでエモいビジュアル

蛇足

GitHubでプロジェクト公開してます。参考になるものはないと思いますが……まぁ反面教師として……

github.com

【正月】この冬コタツでワールドトリガーを読め【充実】

全国3000万人のTUTにかかわりのある皆様こんにちは。これはTUTAdC21日の記事です。 adventar.org

今日はTUTでは年内最後の授業日でした。時の流れは早いもので、AdCも終わりが見えてきて、ああクリスマスなんだなぁとか思っていると、賞味期限ぎりぎりのケーキが店に並び、TVCMはお正月を写そうとか言うようになりますねぇ。

今回は、そんなお正月休み(与えられるものとする) におすすめの作品を紹介します。

【トリガー】ワールドトリガーとは【オン】

誰が呼んだか「遅効性SF*1」、ジャンプ本誌で連載開始、今はSQで連載中のマンガです。 ワールドトリガー.infoのあらすじは筋が通りすぎてるので、適当なサービスで1話、できれば1巻を試し読みする方がおすすめです。

f:id:sumogri:20181215233912p:plain
W主人公の空閑遊真(左)と三雲修(右)*2

ざっくり言うと、異世界からの侵略者 近界民(ネイバー) と、この世界の守り手 ボーダー の戦いのお話です。 「まぁよくある異世界との交流&バトルかー」なんてのは、結構吞気してる感想。この作品のキモは ロジカルな集団戦 にあります。

【全力で】ワートリの集団戦【まあまあ】

ワールドトリガーの世界では、一人ひとりの戦闘力は大差がないです。たとえば戦闘力が53万あったり、既に卍解を折っておいたりというチート的な強さはありません。あるのは、現実世界で言う柔道の白帯と黒帯のような熟練度の差だけです。なので、個人戦闘力に限界のあるこの世界では、「戦略・戦術」が占める割合がとても大きいです。いかに熟練の戦士であろうとも10人に囲まれれば負けますし、弱い奴でも環境がそろえば強者を下します。

淡々と文字で書くと、まぁそうだよな、となるだけの話ですが、この描写が大変ロジカルで引き込まれます。

ワールドトリガーの集団戦が真価を発揮するのは"B級ランク戦編"(10巻~13巻)。ボーダー隊員が1~4人ずつのチームを組んで3~4つ巴のバトルロイヤル模擬戦をする話が続くシーズンです。「へぇ?でも修行パートじゃないの?」そう思っていると足元掬われることに。

Bランク戦編は作戦立案&ブリーフィングの描写から始まります。ボーダー身内戦なので、相手も自分もある程度情報を持ってる状態で戦うのは当たり前。事前にわかる有利不利をどう覆すか?の準備段階です。 戦闘員は、近接攻撃を行う攻撃手(アタッカー)、中距離が得意な銃手(ガンナー)/射手(シューター)、遠距離専門な狙撃手(スナイパー)とそれぞれ兵種がわかれていて、隊によって構成もまちまち。強みを生かせるよう悩み抜きます。

f:id:sumogri:20181216003514p:plain:w300 f:id:sumogri:20181216003704p:plain:w300
ブリーフィング風景 この時点でも各隊の特徴が出てくる*3

準備が済むといよいよ本番、模擬戦闘です。これがまたロジカル。ランク戦は正隊員の昇級試験であると同時に訓練生の経験値でもあるので、実況解説つきで観戦する視点を織り交ぜながらの描写がなされます。

f:id:sumogri:20181216005333p:plain:w300f:id:sumogri:20181216005444p:plain:w300
実況解説 ブリーフィングを第三者視点でまとめたり、戦況を俯瞰するマップが使われる *4

もちろん戦闘描写もばっちりすごい。特にアタッカーが切り込む様は気持ちがいい。読者も事前に戦術を共有しているからこその集中力・テンポの良さで引き込まれます。

f:id:sumogri:20181216011333p:plain:w400
戦闘描写 何気ない所作に意味があることも……*5

戦闘が終わるとどうなる?知らんのか?デブリーフィングが始まるんですね。ここでは事前に予測されなかった事象やそれに対する各隊員の行動の意図をまとめたり、試合のターニングポイントを振り返ったりします。普通なら冗長に感じる所ですが、事前に予測をしっかり立てている上、戦闘中の隊員のアドリブもまたロジカルなので、再構築されていく達成感がこみ上げます。

f:id:sumogri:20181216014935p:plain:w400
デブリーフィングの様子 今日より強くなるために振り返りは欠かせない *6

このランク戦の展開だけでもワールドトリガーというマンガの魅力が伝わるかと思います。

そう、 ロジカル なのです。

【玄界の進歩も】集団戦を支える技術【目覚ましい】

ところでTUTはUTなので、学生は支える技術なんてものが好きだったりします。

ワールドトリガーの世界での基幹技術は「トリオン」にまつわるものです。トリオンとは作中に出てくる不思議エネルギーで、人のもつ見えない臓器で作られるとされています。生み出せる量には個人差があります。

戦闘員はこのトリオンを燃料にする武器、「トリガー」を使って戦います。ボーダーのトリガーは、戦闘体と呼ばれるトリオンでできた仮の体、脱出機能(ベイルアウト)、レーダーや無線などを基本サポートします。これに加えて個人で選択できるトリガーチップを装備します。チップは、たとえば銃や剣といった武装、外套やシールドといった補助的な装備が該当します。

f:id:sumogri:20181216024943p:plain
狙撃手用トリガー 状況に応じて使い分ける*7

トリガーチップはメインとサブ*8で各4つ選択し、戦闘中はそれらを切り替えつつ戦います。これは、戦闘中に同時に使えるトリガーは二つまでということを意味します。また、トリガーチップはセットするだけでもトリオンを消費するので、持っていく装備を厳選することにも意味があります。

f:id:sumogri:20181216030043p:plain:w400
トリオン量とトリガーチップの容量の概念図 *9

ボーダーのトリガーの特徴は、何と言っても「組み合わせ」にあります。トリオン量にもよりますが最大8種類の兵装を持ち込めるので、単純に考えても\binom{n}{4}^{2}程度のバリエーションが個人単位で存在します。これにチーム戦術まで加わるわけです。そうなると、もう組み合わせはめっちゃすごい*10ことになります。

こういう風に「無限の可能性」みたいなことを言い始めると、たいていのヒトは「え、でもフィクションでのそれって後出しじゃんけんじゃね?」とか思いますね。新たなカード生み出してるんじゃないよ、と。ご安心ください。確かに新しい兵器は出てきますが、そこにあるのは人類の進歩の歴史です。剣の強い奴に銃で挑むのは道理ですよね? 一時の気合より、緩まず備える方が強い世界観は揺るぎません。

ほかにもいろいろなトリガーがあったり、トリオン技術があったりするのですが、紹介し尽くすのは野暮というものです。

これら設定が物語に さらなるロジック を与えていくのは、 おわかりですね?

【ぼんち揚げ】おわりに【食う?】

ということで、正月にワールドトリガーを読みましょうという話でした。クリスマスでもいいよ。 この記事に含まれているワールドトリガー成分は10%以下なので、こんな程度でクラっと来てる人はぜひ読んでみてください。遅効性SFパワー があなたを襲うこと間違いなしです。

【つまんない】蛇足【ウソつくね】

ところで金曜日といえばアニメ「やがて君になる*11」の放映日ですね? TUT生のみなさまにおかれましてはリアルタイム視聴なさっていることと思い、あえてここでお勧めすることはありませんでした。 ワールドトリガーとは全く毛色の違うお話ではありますが、これも ロジック にあふれた作品です。おすすめ。

f:id:sumogri:20181220025542j:plain:w300
やがて君になる 原作漫画もおすすめ

明日は @ot0eu さんの「記事の内容の予定などを入力してください」になります。デフォルト、普通への執着……あぁ……たまりませんね……

*1:HN/野菜炒めさん作。10巻発売記念のキャッチコピーコンテストのグランプリ大賞。1巻を対象に作られたものだけれど、作品全体に通る名キャッチコピーだと思う

*2:オフィシャルデータブック BBF P.4より

*3:ワールドトリガー 10巻 P.157 P.163より

*4:ワールドトリガー 10巻 P.172 P.179より

*5:ワールドトリガー 11巻 P.18より

*6:ワールドトリガー 11巻 P.62より

*7:ワールドトリガー 14巻 P.78より

*8:利き手と反対の手に該当する概念、左右に持ち分けるイメージ。それぞれにセットできるトリガーに制約はない。サブだからといって補助的トリガーしかセットできないわけではないということ。

*9:ワールドトリガー 19巻 P.82より

*10:めっちゃすごい

*11:TVアニメ「やがて君になる」公式サイト

Unityでの設計の話 -鉄血篇-

この間のTUT-LTでコンポーネントとは何かを、めっちゃ抽象度高く喋りました。 この記事はその補足というか、喋っただけで資料になってない話を書いていきます。静的LTです。

www.slideshare.net

(幣チームの)ゲーム開発ではこんな感じに仕様が降って沸くので、それに対応してみる、継承ベースな設計と集約ベースな設計とをそれぞれ追ってみて、ここがこう難しいよね、みたいな事を喋らせてもらいました。

話のキモは、オブジェクト指向で「オブジェクト」という枠に押し込めたいのは「流動要素」で、決して現実世界の「物」なんかじゃあないよって事でした。 今回の場合、流動要素とはゲーム世界での物体(車/バイク/アイテム)の「振る舞い」そのものでした。なので、そこを切り分けて「オブジェクト」にしました。

じゃあ、どうやって流動要素を見極めるんだ! という質問をいただいたので、それについて書いてみます。

その前に、幣サークルでのゲーム開発手順を軽く説明すると、

  1. 各個人がA4一枚に企画書いて持ち寄り
  2. やりたい企画に参加(この時点で1企画2-4人位になる)
  3. チームで企画をブラッシュアップ
  4. 適当に分担して設計&実装、時間があれば3に戻る
  5. 完成

という感じです。今回のLTで再現したのは3-4の繰り返し部分です。核になるゲームアイデアはあれど、具体的になるのは4の直前ということになります。 仕様が変わるのは2巡目以降の工程3なので、如何にこれを先読みするか?が鍵です。

一つは、初回の3をきっちりやることです。つまりは、このゲームの面白さは何か? 何が自分たちにとって譲れないか? ということを固めることです。これは他のチームメンバーと共通認識を作るためにも大切です。譲れないものが固まると、そのために調整すべき事柄が見えます。

幸い(?)、うちのサークルでは、プランナーとプログラマーがちゃんと分業しているわけではないので、変更の痛みを無視した要求が飛ぶことは稀(のはず)です。これは逆に、プランナー的な仕事の質を求められない可能性を意味してもいます。面白さが担保されず、なんだかよくわからないものが出来上がることがあります。

もう一つは、先読みを諦めることです。3-4を回すためのプロトを作って、ある程度仕様が固まるまで待つ方式です。ゲームの企画において幣サークル民はほぼ素人である一方、プログラミング/ソフトウェア開発については企画ほど素人ではないため、実際に作ってしまう方が掴みやすいです。

しかし、恐ろしいことに(??)、プロトができると、「わーいwできたw」「実質完成」などとのたまい、気が抜けがちです。また、学業優先で進めていると、思ったほど3-4のサイクルが回せるほどのテンポで開発ができない事も多々あります。

どちらを取るにせよ、流動要素を抜き出すには、要件を固めるほか無い、というのが私の回答です。 なぜなら、設計とは要件の影であり、要件を実装可能にするものだからです。では要件とは何か、これはどうすれば引き出せるのか。これは企画の進め方そのものを考えないといけません。

というのも、例えばこれが受注開発で、クライアントとのコミュニケーションで作るなら、それを如何に円滑にするか?ということにもなりうるし、幣サークルの事案であれば、如何に自分達が納得できるものを余暇の時間内で組み上げるか? になるわけです。

幣サークルの場合、最もネックなのは、サークル民は忙しいという事実です。これは幣学の入学年次的にも仕方ない話です。なので、如何に手軽に実装するか、の早道である「使い回し」がし易いモデルを求めて、いろいろな設計パターンを取り入れてみています。その一つがLTで紹介したコンポーネントモデルです。流動要素を見極めるのも、変更にかかる労力を最小にしたいがためです。

そんなこんなな、設計すると、やがて楽になるよって話をしました。したかったです。

蓋を開けると、なんだか設計というより幣サークルの紹介みたいな内容になりました。 熱血編ではUI設計の話をします。たぶん。

技科大祭展示VRゲーム製作記録

adventar.org

TUT-AdC 2日目の記事です。 「UnityでVRをとりあえず動かした話」改め、「技科大祭展示VRゲーム製作記録」です。
本年度技科大祭のコンピュータークラブで展示していたVRゲームの製作記録になります。
開発環境はWindows10、Unity5、Oculus Rift + Touchです。

つくったもの

杖と盾で戦うVRシューティングゲームを作りました。 敵を倒し尽くせばゲームクリアという単純なものです。


UnityでVRをとりあえず動かした話

製作記録

大まかなスケジュール

製作は、4人グループで行いました。大まかな流れは、

  • 5月:企画決定
  • 6,7,8月:モックを作りつつ、仕様を詰める
  • 9月:完成させる

です。この記事では、8-9月中に行われたVR対応機能の実装について触れていきます。

VR対応

対応させる段階別に、それぞれ見て行きます

  • ヘッドトラック
  • 手の表示
  • 触る/握る/使う
  • 握られる/使われる

ヘッドトラック

UnityはVRをサポート*1していて、ヘッドトラックはチェックボックス一つで実現できます。
客注リンク先の「VR サポートを有効にする」を参考に“Virtual Reality Supported” オプションを有効にすると、VRヘッドセットに合わせて、メインカメラの回転とポジションが上書きされるようになります。

手の表示…の前に

Touchコントローラーを使っていくために、Oculus Utilities for Unity*2,Oculus Avatar SDK*3,VRTK*4というアセットを導入します。
前者2つはOculus developersのサイトから、VRTKはアセットストアから入手できます。

インポートできたら、VRTKについているサンプルシーンや、ドキュメントなどを参考にセットアップをしていきます。

手の表示

  1. 空のシーンに、空オブジェクトを2つ作成
  2. 一方の子要素に、Oculus Utilities と Avatar SDK からインポートした、OVRCameraRigとLocalAvatarをおく
  3. OVRCameraRigにアタッチされている、OVR Manager の Tracking Origin TypeをFloor Levelに変更
  4. 2.で子要素を追加したオブジェクトに、VRTK_SDKSetupをアタッチ,Quick SelectをOculusに設定
  5. 2.で選ばなかった方のオブジェクトに、VRTK_SDKManagerをアタッチ,Auto Populateを押す

これでコントローラーに追従する手が表示されるはずです。

触る/握る/使う

前項で表示した手に、握る/使うといったアクションができるようにしていきます。

  1. 前項で、VRTK_SDKManagerをアタッチしたオブジェクトの子要素に、Left,Rightという名前で空オブジェクトを作る
  2. それぞれを、VRTK_SDKManagerのScript Aliasesに設定

ここまでの作業でヒエラルキーはこのようになります。ここでVRTKがSDKManager、VRPlayerがSDKSetupをアタッチしたオブジェクトです。

f:id:sumogri:20171202022554p:plain

ここで追加した、Left,Rightに手で行えるアクション機能を乗せていきます。
たとえば、触る/握る/使うの機能を乗せたLeftのInspactorは

f:id:sumogri:20171202023516p:plain

となります。

ここまでの設定で、手の側の設定が一通り完了します。試しに、サンプルシーンの16番にある剣をもってきてみると、握れるはずです。

握られる/使われる

最後に、サンプルシーンにあるような、握れる/使えるオブジェクトを作っていきます。
例として、今回作ったゲームの杖にアタッチしたスクリプトを見てみます。

using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using VRTK;

public class IntaractableStick : VRTK_InteractableObject{
    [Header("Stick Option")]
    [SerializeField] private int magicIndex = 0;
    [SerializeField] private Transform magicGeneratePoint;
    [SerializeField] bool followToEnemy = true;
    private Raycaster raycaster;
    private VRTK_ControllerReference controllerReference;
    private MagicManager magicManager;

    protected void Start()
    {
        raycaster = gameObject.GetComponent<Raycaster>();
        magicManager = AurorPlayerController.PlayerObject.GetComponent<MagicManager>();
    }

    public override void StartUsing(VRTK_InteractUse currentUsingObject = null)
    {
        var magic = Instantiate(magicManager.MagicPrefabs[magicIndex],
            magicGeneratePoint.position,
            magicGeneratePoint.rotation);

        if (followToEnemy) FollowToEnemy(magic);

        VRTK_ControllerHaptics.TriggerHapticPulse(controllerReference, 0.5f, 0.5f, 0.01f);

        base.StartUsing(currentUsingObject);
    }

    public override void Grabbed(VRTK_InteractGrab currentGrabbingObject = null)
    {
        controllerReference = VRTK_ControllerReference.GetControllerReference(currentGrabbingObject.controllerEvents.gameObject);
        VRTK_ControllerHaptics.TriggerHapticPulse(controllerReference, 0.7f, 0.25f, 0.01f);
        base.Grabbed(currentGrabbingObject);
    }

    public override void Ungrabbed(VRTK_InteractGrab previousGrabbingObject = null)
    {
        controllerReference = null;

        base.Ungrabbed(previousGrabbingObject);
    }
}

肝心なのは、VRTK_InteractableObjectを継承している点です。 これを継承し、StartUsingやGrabbedといったメソッドをオーバーライドすると、それらに対応したアクションがなされたときに実行されます。

inspectorから見てみると、こんな感じになっています。

f:id:sumogri:20171202025254p:plain

掴みについての設定や、使えるタイミングなど設定できることが見て取れます。
これ以外の機能、たとえば、左手でつかんだものをそのまま右に持ち変える、持った時の手とオブジェクトの位置関係を調節するなどは、別のスクリプト(VRTK_SwapControllerGrabAction等)をアタッチすることで実現していきます。

このようにして、もろもろ実装していくと、とりあえず動くものが出来上がります。

まとめ

長々と Oculus Rift + Touch でとりあえず動かす話を書き連ねてきました。
VRTKにはすぐに使えるサンプルが多数収録されているので、それらを見て行くことでもいろいろできることがわかっていくと思います。
VRというと、ハイスペックPCとお高いHMDが欲しくてなんとなく敷居が高いイメージかもしれません。 しかし、このように気軽に動かすものが作れるとなると、ちょっと近くに感じませんか?感じますよね? Oculus Rift + Touchも当初の価格から随分値下げされ今では5万円とお手頃(?)になっているので、これを機に買ってみるのもいいかもですね!
といったところで、記事を終えたいと思います。

ちなみに、今回紹介したゲームを含めた技科大祭展示作のゲームCDを、コミックマーケット93[金曜日 東地区 "ク" 34a]とよぎぃそふとにて頒布します!どうぞよろしくお願いします!

明日は@naruhodo2015さんによる、「JRA銀行から出金する方法について(中京2日目11R)」です! お楽しみに!
果たして昨年の預金を引き出せるんでしょうか!?私気になります!

TUT-CCのマスコットキャラを目立たせたかった

TUT-CCのマスコットキャラ

TUT-AdC、14日目の記事です。
TUT-ConputerClubのマスコットキャラを、Blender初心者が3D化している話です。

www.adventar.org

TUT-CCのマスコットキャラとは

遡ること1.5年前、コミケに参加することになった幣サークルは、サークルカットを募集しました。
次々と投稿されるシンプルで、洗練されたデザイン。採用という狭き門をくぐり抜けるための血で血を洗う死闘があったかどうかはわかりませんが、 出来上がったロゴには、なんともかわいらしいキャラクターが描かれていたのでした。

f:id:sumogri:20161214001154p:plain

マスコットキャラ認知されてない疑惑

ところで、このマスコットキャラは一般に、どころかサークル内でも認知されてない気がします。うっかりすると新教務システムのマスコットキャラの方が有名です。これはいけません。可愛いものは愛すべしです。
認知度を上げるにはどうすればいいでしょう。それは人前に出ることです。サークルのロゴとして技科大祭のパンフレットに出演する奥ゆかしさも捨てがたいですが、この子にはもっと前に出てもらいましょう。
幣サークルにはゲームを作成しているグループがあります。このゲームは新入生歓迎会や技科大祭で展示するほか、コミックマーケットでも頒布されます。ここを活躍の場にできれば、この子はより有名に、愛されるようになるでしょう!

ました工法

ということで、作製中の3Dモデルがこちらになります。  

GitHub - sumogri/mascot: TUTコンピュータクラブのマスコットの個人的3Dモデル化

球とかキューブとかの組み合わせでさっくり作ってあるので、モデリングについてのあれこれは割愛します。ラティスモデファイヤはいいぞ。

このモデルには、ヒューマノイドリグを設定してあります。なので、fbxなりを経由してUnityにエクスポートすればUnityちゃんのモーションのようなヒューマノイド用モーションが適用できます。

使用例

せっかくなので、Blender上でポーズさせてみようと思います。

f:id:sumogri:20161214005355p:plain はい。

まとめのような言い訳

同じポーズを取らせてみるとひしひしと感じるのですが、足のサイズ感とか顔の縦横比率とかお尻のもっちり感とか可愛かった部分がうまく再現できてませんね。すみません許してください。
きっと来年のAdCまでには元気に走り回るマスコットくんの姿が見られるでしょう。

次回は@NU_Panさんの「DTMか音楽関連」の記事です。お楽しみに!

使用ツール

3Dモデリング:blender 2.77
テクスチャ :GIMP 2

参考

Unityマニュアル,BlenderとRigify の使用https://docs.unity3d.com/jp/current/Manual/BlenderAndRigify.html

今日の天鳳.3

1日休めば取り戻すのに3日かかるのだったら30日休んだんで3ヵ月くらいかかりますね(確信)
もともと感覚で打ってるのに拍車がかかってて笑えないじぇ
ターツ優先度とかオリとかどっか飛んでってるとしか……

1局目

牌譜:http://tenhou.net/0/?log=2016040500gm-0089-0000-8fc01e14&tw=2

東場 特になし
南1
11巡目
234577m67p468s ポン自風 打8s
ここで下家が竹染って気づいてないし警戒もしてない
6mドラ受したいのはわかるけどそれも打2mで何とかなる
ここで竹切りは下家にエサやるだけだし順目も巡目だし67p落としでよかった(?)
14順目
3457777m67p6sポン自風 ツモ8m 打7m
打7mではなくツモ切りor降りて67p切り

2局目

牌譜:http://tenhou.net/0/?log=2016040612gm-0089-0000-2bb6a530&tw=3

東1
5-6順 45s切り
9-10順 9s対
南4
n順目 23s切り
まあ運がよかったとしか
オーラスとか1-4sで十分なのに聴牌とらなかったり
1-4sだったら出てなかったっぽいのは結果論かなぁって

まとめ

勝てないからつまんないじょ~

今日の天鳳.2

忙しいし一戦だけ
現在:R1515 二段

一戦目

牌譜:http://tenhou.net/0/?log=2016022700gm-0089-0000-45bb6398&tw=0

総括

前回とは打って変わってチャンスまみれのドラまみれ。
リンシャン出来なくてもドラ増やせるしカンしていこうぜ。ただし乗るのは他人の手牌だけどな。
結果論だけど東場の下家に上がられなくてよかったなって。

東1/2/3二本場/4一本場

牌譜見るまで染めに気づけないのどうにかしたい。
一段目で二色の456とか切ってくれないと染めって気づけない。まあ切ってても気づけないときあるけど。
東4一だったら10順目手出し東とかでおや?っと思っとくべきなんだろうな?どうなんだろ。
東1の白対子落としとかもタイミング違う感ある。結果的に対面染めじゃなかっただけであれ染めだったら普通に危険な切り方だよなって。

おわり

安直なカンはしないほうがいいって教えたはずです。
f:id:sumogri:20160227020939p:plain