【ボウリング】ラウンドワンのキャンペーンボールを購入しました!

というわけで、最近ボウリングにハマっているりべるんです。
ラウンドワンのキャンペーンボールを作るべく通い続け、5つ溜まったので本日作ってきました!

DSC_0225

山梨県内にラウンドワンは石和にしかありません。
家からは車で30分ほどです。

フロントに「キャンペーンボール作りたい」と伝えたところ、「予約してないの?」的なことを言われました。
数日前に電話したら「金曜日の15時に来店頂ければ~」と言われたので来たのですが、なかなかにつっけどんな対応ですね。

しばらく待つとドリラーの方がきたので、いろいろ話をしながらボールを決めていきます。
マイボールについては知識0だったので、言われるがままに設定・ドリルしてもらいました。
+1080円で薬指と中指にフィンガーグリップを入れてもらいました。

DSC_0228

出来上がったマイボールがこちら!
重さは12ポンド、アクアブルーでイルカ模様の入ったラウンドワンボールです。
普段は11ポンドで投げていましたが、マイボールは大抵1つ上の重さにするとか何とか。
実際持ってみると重く感じず、むしろちょうどいいくらいな感じでした。

空いていたためか、インストラクターの方にティーチングもして頂くことができました。
基本的なフォームや投げ方、マイボールで注意する点等を教えて頂けました。
その甲斐もあってか、今日は9ゲームやってアベレージ127、ハイスコア161と自分の過去記録を大きく更新することができました。

いろいろ話をするいい機会だったので、気になってたアレのことも聞いてみました!

DSC_0226

DSC_0227

所謂「リスタイ」です!
こういうの装備すると「本格的にボウリングやってる人」な感じになります。
調べてみると手首を固定するためのものなので、むしろ初心者向けらしいですね。
レンタル用があるとのことで、試用させてもらいました!
良くも悪くも手首がガッチリ固定されるので、コントロールがしやすくなった・・・気がする。

DSC_0230

こういうの付けてると格好いいですよね!
ということで、アドレナリンをドバドバ出しつつ購入してしまいました。
道具に頼っている感もありますが、あまり気にしない人なので遠慮なく使います。

DSC_0229

最終的に買ったものは以下になります。
・マイボール (キャンペーンボール)
・フィンガーグリップ
・マイバッグ
・リスタイ

ラウンドワン会員登録費と合わせて5000円程度でした。
これからボウリングが楽しめると考えれば、初期費用としてもそこまで高額ではないと思います。
少なくともゴルフとかよりはリーズナブルですね。

まとめ

そんなわけで、ラウンドワンでキャンペーンボールを作ってきました!
マイボール・マイシューズが揃ったので、より一層ボウリングが楽しくなりそうです。
仕事がひと段落している今だからこそ、定期的に通って上達したいところです。

ちなみにゲーム開発は全く関係ない記事です。
というか、Unityの話題だけでは持たなくなってきたので、いっそ日記的なものも混ぜていこうかと思っている感じです。
なので、ゲーム開発で面白いことがなかったらこんな記事を載せていきます!

【Unity】階層構造のタグを持ったオブジェクトの一括取得

というわけで、今回はUnityのタグとオブジェクト取得のお話です!
「階層構造のタグ」という表現が正しいのか分かりませんが、タグ名を / で区切った状態のことです。

shot2ss20160607190337887

流れ的には以下の記事の応用といった感じです。
コメントで頂いた「特定の親(子)タグを持ったオブジェクトの取得」について考えみました。

【Unity】タグの階層表示と判定方法について

※本記事では利便上、タグ名を / で区切った上位を親タグ、下位を子タグと記載します。

特定のタグのオブジェクトを取得

今更ですが、特定のタグを持ったオブジェクトの取得方法のおさらいです。
GameObject に関数があるので、それを使えば簡単です。

GameObject testObject = GameObject.FindWithTag("hoge")
GameObject[] testObjects = GameObject.FindGameObjectsWithTag("hoge");

普通にタグを付ける場合、このあたりの API を使えば十分です。

特定の親(子)タグを持ったオブジェクトの取得

ここから本題で、タグを階層構造にした場合の親(子)タグを判定し、そのオブジェクトを取得する方法です。
上記の Unity の API では、/ 込みの完全なタグ名を指定しないと取得してくれません。
そんなわけで、現状では自力で実装するしかないようです。

やや強引ですが、シーン上の GameObject を全取得し、1つ1つのタグを判定すれば何とかなりそう。
ということで、TagUtility クラスに getParentTagObjects() という関数を追加してみました!

using UnityEngine;
using System.Collections;
using System.Collections.Generic;

public static class TagUtility {

    /* 中略 */

    public static GameObject[] getParentTagObjects(string name) {
        List<GameObject> gameObjects = new List<GameObject>();

        foreach (GameObject obj in GameObject.FindObjectsOfType<GameObject>()) {
            if (getParentTagName(obj.tag) == name) {
                gameObjects.Add(obj);
            }
        }

        return gameObjects.ToArray();
    }
}

「シーン内の GameObject を全取得する」方法は Unity コミュニティに載っていたので、こちらを参考にしました。
http://answers.unity3d.com/questions/329395/how-to-get-all-gameobjects-in-scene.html

取得した GameObject を foreach で回し、オブジェクトのタグを比較していきます。
オブジェクトから親タグを取得するには getParentTagName() を使います。
このあたりの実装は冒頭で記載した記事をご参照下さい。
簡潔に言うと、GameObject から親タグを取得して返すものです。

親タグが引数のタグ名と一致している場合、List の中に放り込んでいきます。
最後に return で List を配列に変換して返します。

実際に使う場合は以下のような感じ。
TagUtility クラスは静的なので、どのクラスからでも呼べます。

using UnityEngine;
using System.Collections;

public class TagTest : MonoBehaviour {

    void Start () {
        GameObject[] gameObjects = TagUtility.getParentTagObjects("StageObject");

        foreach (GameObject obj in gameObjects) {
            Debug.Log(obj.name);
        }
    }
}

親タグ名が「StageObject」のものを取得し、そのオブジェクト名を出力してみます。
今作成しているステージで実行したらこんな出力になりました!

shot2ss20160607190745464

今回はテストなのでコンソールに出力するだけですが、foreach で回せば一括で処理が行えます。
ただし「シーン内の GameObject を全取得」という時点でパフォーマンス的にはよろしくないです。
なるべく使用は控えめで、かつ Awake() や Start() 内などで初期化するときにだけ行うように注意する必要がありそう。

この勢いで子タグを持ったオブジェクトの取得も実装してしまいます。
TagUtility クラスに getChildTagObjects() を追加します。

public static GameObject[] getChildTagObjects(string name) {
    List<GameObject> gameObjects = new List<GameObject>();

    foreach (GameObject obj in GameObject.FindObjectsOfType<GameObject>()) {
        if (getChildTagName(obj.tag) == name) {
            gameObjects.Add(obj);
        }
    }

    return gameObjects.ToArray();
}

if 文で呼び出す関数が使うだけで、あとはほとんど一緒です。
使用方法は親タグの場合と一緒なので割愛します。

まとめ

階層構造を持ったタグからオブジェクトを取得する方法を考えみました!
オブジェクトを一括で取得して操作する時などに使えそうです。
ただ重そうな処理なので乱用は控えたいところです。

東京方面 (上野動物園) へ行ってきました!

というわけで、久々・・・でもない「行ってきました」シリーズです!
今回はタイトル通り、東京方面へ遠出してきました!
主な狙いは上野動物園です。

会社の出張なども含めると、月に1回くらいのペースで行っていたりします。
山梨から東京も割と手軽に行けちゃうということでしょうか。

出発~板橋駅まで

今回会いに行くのは前に契約で山梨に来ていた会社の同僚です。
同僚といってもほぼ友人と同じような関係だったりします。
いつも通りハイウェイバスで新宿まで向かいます。

CIMG1784_R

CIMG1783_R

最近新宿バスターミナルが新しく「バスタ新宿」となったそうです。
写真は正面と3Fから撮ったものです。
新宿駅南口とすごく近いので便利かも。

CIMG1785_R

新宿から埼京線で板橋駅まできました。
東口には岩が特徴の円形ベンチがあります。
同僚と合流し、ラウンドワン板橋スタジアムへ向かいます。

ラウンドワン板橋スタジアム

「なんで東京きてボウリングなのよ」と言われそうですが、前に「ボウリングスコア51」といったところ、かなり馬鹿にされてしまったためです。
山梨で特訓を重ねて見返してやろうという魂胆です。

【スコア】

ゲーム 自分 友人
1ゲーム目 71 47
2ゲーム目 72 86
3ゲーム目 94 48

東京雰囲気違って投げにくい!(ぁ
3ゲームやって何とか勝つことはできましたが、やけに低レベルの戦いです。
自分はだいたい90~110くらいはいけてたのにガタ落ちしています。
どのボウリング場でも150くらいは出せるようにしたいです。

ついでにラウンドワンのスタンプが5つ溜まったので、マイボールが作れます!
今度作ってこようと思います!

CIMG1787_R

上野まで移動後、はなまるうどんで食事をとりました。
初めて来ましたが、麺にこしがあっておいしかったです。

上野動物園

前から行きたかった上野動物園!
来たのは小学校の修学旅行以来です。

CIMG1791_R

メインゲートは改修中のため通れませんでした。
仮設っぽいチケット販売所から入場します。

入場料金は大人600円。
どこぞの夢の国と違って入園料はかなりリーズナブルです。

狙い目はアザラシ、カンガルー、リスです
どうでもいい動物はさらっと流しました。

以下、撮ってきた写真です!

CIMG1810_R

CIMG1811_R

CIMG1813_R

ゼニガタアザラシです!
ずっとアシカの周りを泳いでいました。
アザラシとしては珍しく鳴き声を連呼していて印象深かったです。

CIMG1816_R

「アザラシとアシカの違い」です。
未だに混合している人がいるので、しっかり覚えておきましょう。

CIMG1819_R

CIMG1821_R

カワウソとゾウです。
カワウソはよく動く、ゾウはかなり遠くにいるで撮りにくかったです。

CIMG1830_R

ニホンリス!
小さい上に速いので、上手く撮影することができませんでした。
頬袋があったり、尻尾が長かったりとリスっぽかったです。

CIMG1839_R

CIMG1840_R

CIMG1841_R

CIMG1848_R

アカカンガルーです!
ある意味上野動物園に来た本命だったりします。
自分の好きな動物トップ3に入りつつある哺乳類です。
他の動物と比べると活発で、じゃれあったり跳ね回ったりしていました。

【Blender】モデリング練習メモ 「カンガルー」編

ちょっと前に自作ゲーム用にカンガルーをモデリングしましたが、やはり本物とはだいぶ違いますね。
まんま本物の方が良いというわけでもないので、気にしないようにします。

DSC_0224

お土産としてカンガルーのぬいぐるみをチョイス。
アザラシは既に同じものが家にあったので見送りました。
親カンガルーも子カンガルーも可愛いです。

CIMG1849_R

最後にペンギンです。
コウテイペンギンが飼育されていた気がしましたが、これはケープペンギンらしいです。

その他

秋葉原のレトロゲームショップ「スーパーポテト」へ行ったり、渋谷のディズニーストアへ行ったりもしました。
が、どこもこれといった収穫はありませんでした。

特に「パニカムトーキョー渋谷店」や「ディズニーストア渋谷店」にチップとデールのTシャツがなかったのがショックでした。
店員さん曰く「人気があってすぐに売れてしまう」とのこと。
2016年のサマーフェスティバルでチーデーのTシャツが販売されるそうなので、TDRで狙ったほうがよさそうです。

まとめ

そんなわけで、東京方面へ遊びに行ってきました!
山梨では味わえないことばかりで、東京の各所を回るのは楽しいです。
その分足が猛烈に痛くなりますorz

【Blender】モデリング練習メモ 「カンガルー」編

というわけで、Blender のモデリング練習シリーズ第3弾です。
今回のお題は「カンガルー」です!

shot2ss20160601232702749

最もポピュラーな陸上の哺乳類ですね。
ゲーム的にはアシストキャラクターの扱いで、プレイヤーが乗って操作できるような感じにします。
大きな体格でパンチとキックをメインに戦うインファイターです。

専門学校の卒業研究に作ったゲームでは、操作キャラクターとして選択できる1匹でした。

shot2ss20140524211929015

今見ると全然カンガルーに見えなかったりします。
カンガルー最大の特徴の袋があるので何とか・・・といったところでしょうか。
今回はもっと現実のカンガルーに近づけつつ、パンチやキック、ジャンプができる見た目を目指します。
育児嚢も付ける予定なので、性別はメスになりそうです。

モデリング

やる前から分かっていたことですが、カンガルーをモデリングするのは非常に難しいです。
やらないことには始まらないので、下手な自分にめげずに作っていきます。

最も難儀するのは頭~胴体~尻尾に掛けてのバランスです。
これをフィーリングでやるのは無理があったので、さくっとゲーム的なカンガルーを描いてみました!

kangaroo

絵の上手い下手はさておき、モデリングの補助くらいにはなりそうです。
今まで通り Plane に Mirror モディファイアを付け、伸縮を駆使して形を作ります。

shot2ss20160531232336384

ひとまず完成したのがこちらです!
ボクシンググローブや靴、上着部分は別オブジェクトで、それ以外は全て1つの面から作られています。
所々気になる部分はありますが、概ねカンガルーっぽくなっているのではないでしょうか。

shot2ss20160531232420671

カンガルーの尻尾って結構長かったりします。
胴体部分はエルード→拡大/縮小の繰り返しで何とかなりますが、胴体~尻尾の部分を伸ばしていくのが難しかったです。
多少面が伸びてしまうのを覚悟で「エルード→X軸に回転→移動させて微調整」を繰り返して作っています。

腕は後々アニメーションで動かすので割と適当です。
脚も同様ですが、ぴょんぴょん跳ねるにはやや小さいかもしれません。
WeightPaint を設定する時にまた考え直す予定です。

育児嚢の作成

カンガルーといえばコレという人も多いのではないでしょうか。
「育児嚢」と呼ばれる、子供を育てる袋ですね。

胴体から辺を伸ばして作りたいところですが、丸みのある袋を胴体から伸ばして作るのはかなりきついです。
妥協して UVSphere の上半身を削除したもので代用します。
大きさと位置を整えた後、Solidify モディファイアで少し厚みを付けます。

shot2ss20160531232457839

袋だけあればカンガルーに見えると思いましたが、やっぱり子供が入っていてこそな気もします。
ということで、親カンガルーをそのまま小さくしたものを少し調節して入れてみました。
作り方は超手抜きですが、それっぽい雰囲気にはなった気がします。

ボクシンググローブ

腕に付けるボクシンググローブをモデリングします。
親指があって握っているようなグローブが出来れば良いのですが、そんなテクニックはないので丸いシンプルなもので妥協します。

shot2ss20160531232551519

UVSphere に「Decimate」モディファイアを追加し、「Un-Subdivide」で適度に頂点数を減らします。
腕の形状に合うように頂点移動や拡大・縮小します。
装着部分は Cylinder を切り抜いたものに Solidify モディファイアを掛けて厚みを出します。

何かパッとしない気もしますが、ひとまずボクシンググローブです!

上着部分

そのままカンガルーでは味気ないので、首~胴体にかけて服を着せてみます。
Cylinder をエルードで伸ばしつつ、胴体に合うように拡縮を加えていきます。

shot2ss20160531232734960

形作った後、腕の部分を開けていきます。
Subdivision Surface を適用した状態で、穴を開ける中心となる頂点を削除した後、周りの頂点を移動させて調節します。
面倒なら boolean モディファイアで Cylinder を選択してぶち抜いても綺麗に開けれます。

余談ですが、親から「カンガルーが服着るのって変」とか言われました。
モデリング練習ですが、ゲームキャラの作成も兼ねているので無粋な突っ込みです。
主人公勢からして「マントを付けたウサギ」や「ストールとフード被ったリス」なので尚更ですね。
「ガチ動物」よりは多少人間味がある方が愛着が沸く・・・と自分は考えます。

部分的なマテリアルの設定

こいつは近いうちにアニメーションを入れて Unity へインポートする予定なので、マテリアルの設定もしてみました。
今まで「1つのオブジェクトに複数のマテリアルを設定」のやり方が分かりませんでしたが、プロパティのマテリアルからサクっとできるようです。

shot2ss20160601230758028

マテリアルを設定する面をエディットモードで選択状態にします。
その状態で適用するマテリアルを選択。
予め+ボタンからマテリアルを追加しておくと楽です。

shot2ss20160601230831050

エディットモードの場合、「Assign」「Select」「Deselect」の3つのボタンが表示されます。
Assign ボタンを押すことで、選択中の面に対してマテリアルが適用されます。
Select ボタンを押すとマテリアルが適用されている範囲を選択状態にし、Deselect は逆に選択状態を解除します。

shot2ss20160601232702748

現時点で Unity へインポートするとこんな感じになります。
ちょっと色が濃いのと、思った以上に縦長な体格が気になるところです。
とりあえずアニメーションを入れて雰囲気を見てから修正する予定です。

まとめ

そんなわけで、今回はカンガルーのモデリングに挑戦してみました!
今までの練習で作ったモデルの中では上出来な方かと思われます。
やや現実のカンガルーに近い気がするので、もっとゲームのカンガルーっぽくしていくつもりです。

Blender 関係のサイトのモデルを見ると非常に上手で、自分の作成物だけやけに低クオリティな気もします。
まあそのうち上手くなる・・・と信じたいです。