UnityでNodeGarden その1

unity01

UnityでProcessingで作ったのNode Gardenのようなものを作って見ようとしているのですが、いくつか分からないことがあります。

エッジはどうやって作ればよいのでしょう。

ノードをつなげるエッジは、Spring Jointを使って実現できそうですが、プリミティブオブジェクトをコードで伸縮させるのは面倒そうです。それともパーティクルのようなものでエッジを実現すればよいのかわかりません。

レイキャストができるので、それで照射して一定区間なら、その光線に対してパーティクルを設定するなどができそうな気もします。

上記からできる出来ないは別にして、課題ができました。とりあえずパーティクルが面白そうなのでパーティクルを調べてみます。

  • パーティクルを調査
  • レイキャストを調査
  • ジョイントを調査

ひとまず線を引くということでよければ以下が参考になりそうです。

Unityで背景を単色に変更する方法

solidcolor

手っ取り早いのは、CameraのClear Flagsを Solid Color にしてBackgroundで色を指定する方法です。他には[Window]->[Lighting]でLightingタブから環境を変更する方法もあります。

クリアと聞くと、消しゴムで消したり、黒板で消すイメージがありますが、Clear Flagsで指定されている状態にすることをクリアと言っています。初期設定では、Skyboxが指定されているので、何もオブジェクトがないプロジェクトの最初の状態がクリア状態になります。元々OpenGLやDirectXからきている用語なので、クリアなのに、空が表示されるという違和感がある状態になってます。

 

Unityで何もないところから、スクリプトでオブジェクトを生成する方法

unity01

敵や弾を好きな時に生成したい

シューティングゲームの敵の出現や、弾や、迷路の自動生成など、スクリプトからゲームオブジェクトが生成できると幅が広がります。比較的短い説明で分かりやすい解説である実行時のプレハブのインスタンス化がマニュアルに載っていました。

この解説はページ内の文字数が多いように感じますが、実際は、3つのよくありそうなシナリオでのUnityの設定の仕方とソースコードが書かれています。初めての人は、一番初めのレンガを自動生成する方法を見ればよいだけなので、読むドキュメントとソースコードは少ないです。

シナリオ1.ひとつの “レンガ” から壁を作成するために、複数回異なる場所に作成する
シナリオ2.ロケットランチャーが発射時に空飛ぶロケットプレハブをインスタンス化します。プレハブはメッシュ、Rigidbody、Collider、および子ゲームオブジェクトと軌跡に Particle System を含みます。
シナリオ3.ロボットがバラバラにいくつもの部分に爆発します。

 

 

 

ゲーミフィケーションについて少しづつ調べてみる

ゲームを作る前にこういう記事を読み過ぎると良くないですが、クラッシーロードをどう考えて制作したかが書かれていました。

http://www.inside-games.jp/article/2015/03/04/85579.html

その中でリテンション、バイラル性、エンゲージメントループという聞きなれない言葉が出てきました。

リテンションはretentionで、保持、維持するの意味なので、いかにつなぎとめるかというやつですね。また、バイラル性は、Viralでウィルスのように、いわゆる「口コミ」で広がることなので、YoutubeやTwitterで拡散されていくように作り上げるのは素晴らしいことです。これら2つの用語は何となくわかりますがエンゲージメントループはいまいちわかりませんでした。

エンゲージメントループとは何か調べる

wikipediaで載るほどの用語定義はされていないようですが、ゲームというよりマーケティング分野で使われてきた言葉なのかもしれません。

 エンゲージメントを得る事の必要性

今回のSMWSFの様々なセミナーを通して最も良く耳にしたフレーズ、それは「Engagement(エンゲージメント)」である。直訳すると少しニュアンスが違ってしまうので,ここでは、提供したコンテンツに対してファンが自らの時間をコミットして何かしらの行動(シェアやコメントなど)を起こしてくれる、というような意味合いで理解していただきたい。実際,コンテンツを投稿してクリック数を得る事は比較的容易であり、そこから頭を一捻りさせればいけないのは、聴衆から何らかの反応を得る事であるということがプレゼンターの皆が口を揃えて言っていた事であった。

http://blog.btrax.com/jp/2012/02/19/social_media_week_san_francisco/

なぜ「Turntable.fm」はユーザーを夢中にさせるのか

上記で、「エンゲージメントループ」について書かれています。ゲーム分野で数々の著書を持つAmy Jo Kim氏が提唱した言葉

気になるマーケ用語 【エンゲージメント】【エッジランク】

エンゲージメントを”約束”、”契約”のように訳してしまうと理解が難しくなるようで、絆や繋ぎとめるなどの訳し方のほうがよさそうです。以下はTwitterについてですが、こちらも参考になります。

『Twitterのエンゲージメント率』とは?Facebookのエンゲージメント率との違いを徹底解説。

かなり用語に揺れがありそうなので、なぜ「Turntable.fm」はユーザーを夢中にさせるのか を読んでみます。

ゲーミフィケーションの基礎を理解したほうが良い

エンゲージだけで、Google検索で調べるのではなく、なぜ「Turntable.fm」はユーザーを夢中にさせるのか を読んで全体を把握したほうが理解が深まりました。Amy Jo Kim氏は、「エンゲージメントループ」を、いろいろな仕組みや用語定義をしたうえで、それを繰り返しすることで、ユーザーをつなぎとめる方法として「エンゲージメントループ」を提唱していました。

ゲームを作る際、例えば少し前の2Dプラットフォーマーだと、作成してそれがファミ通などの情報誌で知れ渡って、友達通しで面白いねで終わりました。しかし現在は、ユーザーがSNSやYoutubeでコミュニケーションできる時代なので、ゲーミフィケーションで概念や用語、問題の整理を行い、それをゲームに組み込むことで人気のあるゲームに仕上げられる可能性があるので「ゲーミフィケーション」を取り込んでいきましょうという感じなのかもしれません。

確かに「ユーザーのフィードバックを受けてより面白くする」と言葉を書くことができますが、「それじゃ、フィードバックを受けるとはどういう行為があって、またそれを繰り返してもらうにはどうすればよいか。」などはゲームプログラミングやゲームアルゴリズムとは全然別で、自分でやみくもに考えるよりも、一度「ゲーミフィケーション」を土台として取り組むことで効率よくマーケティングのとっかかりになりそうです。

 

 

インディーゲーム「イニシエダンジョン」

inishie01

インディーゲームが分からないのでいろいろ調べていたら「あなたが選ぶ今年のベストフリーゲーム」で、イニシエダンジョンを見つけました。Flashベースなのですぐにプレイ出来て、ローグライク系のハック&スラッシュでかなりはまります。

仲間を30人引き連れて、相手をボコボコにする爽快感があります。また死んだ場合に他のプレイヤーが、ゾンビ状態を撃破することで救済する仕組みがありゲームの魅力の一つとなっています。操作性もストレスがなく、無料で遊べるのはおどろくばかりです。

 

「Dungeon Souls」が面白そう

 

派手なアビリティと高難度のアクション、ローグライク要素ありのフリーゲーム『Dungeon Souls』

ゲームを作っていきたいですが、いろいろインディーゲームの情報源も調べていきたいです。automaton.amで少し前の記事ですが、「Dungeon Souls」が面白そうなので調べてみたら、いくつか賞をとっている有名なゲームのようです。

現在は、デモをindiedb.comで配布して、Steamなどで販売しているようです。 Nuclear Throne, Risk of Rain, Overtureに影響を受けているようです。確かにアイテムの表示がRisk of Rainのようです。

 

Unity5.3で始めて作ったRoll-a-Ballを配布してみます。

Unity5.3ではじめて作った記念に配布

Unity公式球転がしチュートリアル をUnity5.3で作成しました。チュートリアルには配布の仕方などがなかったので、勉強もかねて記念にロリポップで配布してみます。この球転がしゲームはzip圧縮したら44MBぐらいでした。最近はSteamなどや基本無料のオンラインゲームもたくさんあるので、ダウンロード時間に関してはこの程度の容量なら問題なく配布できそうです。

https://hajimete-program.com/games/RollABall.zip

exeファイルを作成して配布したり、WindowsStoreやAndroidへの配布は問題なさそうですがWebGLに関しては問題がありそうなので、ちょっと書いてみます。

WebGL版で3Dゲーム配布する際の問題点

普段いろんなブログやSNSなどを使うためにブラウザを使っていて、リンクをクリックすると数秒以内にそのサイトが閲覧でき、Youtube動画もすぐ再生できます。そしてこれが当たり前となっているので、WebGLのゲームをクリックして起動するまでに数十秒待たされるとすごくストレスになります。

さらに最悪な場合は、海外のサイトでぐるぐるダウンロードアイコンが回るだけでどの程度でダウンロードが完了するか分からない場合です。これはUnityの問題ではなくWebGLの仕組みの問題で、いろいろ対策はあるのかもしれませんが、分かっていてもものすごいストレスなので、現時点ではSteamやWindows StoreやGoogle Playストアのように、ユーザーにアプリをダウンロードしてもらい、それを実行することでゲームが開始されるという独立した2段階ステップで配布するほうが良いのかもしれません。

itch.ioではUnityで作った2Dゲームがブラウザーベースで配布されている

  • https://kevin-pauly.itch.io/space-eater
  • https://itch.io/games/tag-3d

海外で有名なフリーソフトサイトitch.ioで、Unityで作った2Dゲームをいくつかブラウザーでやってみました。2Dの場合は比較的容量が少ないためブラウザーでできるものが多かったです。3Dになるとダウンロード形式が多いようです。

 

Unityでoutput_log.txtを出力しない方法

unity21

メニュー->[Edit]->[Project Settings]->[Player]で、PlayerSettingsインスペクターが表示されます。ここで、User Player Logのチェックを外すとoutput_log.txtログファイルは出力されなくなります。

Unityで配布用のexeファイルを作るときに、Build and Runや自分で試しに動かすとexeファイルと同じ場所に、output_log.txtを出力します。Windows10のデフォルトだと、”C:UsersPublicDocumentsUnity Projectsプロジェクト名ビルド先フォルダー”に出力されますが、出力先を変更した場合は、そのディレクトリー情報が、このファイルに出力される場合があります。開発者の環境のディレクトリー情報などが表示される場合があります。またビデオカード情報やディスプレイ解像度も表示されます。なるべく情報を公開したくない場合はOffにしてしまうのが良いでしょう。

 

Unityでデフォルトをフルスクリーンにしない方法

メニューから[Edit]→[Project Settings]→[Player]でインスペクターに、PlayerSettingsが表示されるので、”Default Is Full Screen”のチェックを外すと、デフォルトでWindowモードになります。また解像度指定も可能になります。

unity11

ここで、製作者の名称やログ出力の設定なども可能なようです。マニュアルも日本語であるので細かい設定が気になる人は確認してみるとよいでしょう。

http://docs.unity3d.com/jp/current/Manual/class-PlayerSettingsStandalone.html

いくつかすぐ使いそうな項目としては以下などでしょう

  • User Player Log ユーザーログ出力
  • Display Resolution Dialog 解像度変更ダイアログの非表示
  • Allow Fullscreen Switch フルスクリーンの無効化