hildsoftの裏庭

メインでは書かない種類の雑記です

メインPC更新(第三世代Ryzen)

f:id:hildsoft:20190721005651j:plain

約7年ぶりにPCを更新しました。

それまではコスパ重視で2~3年おきにミドルクラスを買っていたところ、当時円高の影響やSSDを試したいとの思いで背伸びしてCore-i7を買いました。

電源の交換やグラボの更新はしましたが、メインのPCとしてここまで長い間使ったのは初めてです。まさかこんなに現役で使えるとは……。

PC性能の成長と共にコンテンツの増大があるため、ハイエンドクラスを買っても処理能力が制約となり、持って3~4年というイメージでした。

ここ最近はコンテンツの肥大化も緩やかで、買い替えなくても性能的にはまだ十分使えるレベルなのですが、故障のリスクも考えて1,2年ほど前から買い替えを検討していました。

去年、一昨年はメモリやグラボが高く、買い替えを見送っていたわけですが、Zen2世代のRyzenのコスパやSSD、メモリの価格下落がタイミングよく被って絶好の買い時が来たのです。

スペック更新

-
CPU Core-i7 3770 Ryzen7 3700X
マザーボード ASUS P8H-77-M ASRock X570 Steel Legend
メモリー DDR3-1600 32GB DDR4-3200 32GB
ストレージ Intel330 180GB*2(RAID0)
Crucial MX500 500GB
WD Black SN750 1TB
Crucial P1 1TB
グラフィックボード Quadro M2000 GeForceRTX 2070
電源 Corsair 550W Seasonic 650W

これにケースとOSを足して、23万弱というところでした。

予想よりCPUとMBが高くなってしまったことと、GPUに力を入れ過ぎてしまったことで買い替えを検討したときよりも高くなってしまいました。

GPUの買い替えは必要になるかもしれませんが、5~6年くらいはこの構成で行く予定ですから、年4~5万円くらいだと考えると満足度とコスパは高いです。

パーツ選定

CPU

Zen2の登場で9th世代のIntel製品を超えてきたので、10th世代の発売が遅れているIntelは選択肢に入りませんでした。

CPUを選ぶ基準として、性能が最低条件を満たし、予算を超えない範疇で、発熱は低ければ低いほど良い、の順で検討し、 第三世代Ryzenのスペック表から3600か3700Xがバランスが取れていて良いなーと思い3700Xを選択。


マザーボード

( ゚∀゚)o彡°ASRock!ASRock!

今回は初のASRockです。

今まではASUSをメインで使ってきましたが、久しぶりの自作で久しぶりにAMDのCPUを使うので情報収集しているとB450 Steel Legendという高耐久性に全振りしたMBがあるというじゃないですか。

しかもX570版も出るという。そこでASRock製品を調べれば調べるほど変態(と称賛される)メーカーなのが伝わってきました。

というのも、それ以外のモデルでも部品からして高耐久なんですね。どれを選んでも最低3年以上はしっかり動くレベルのこだわり。

その中でも高耐久なCreatorかSteel Legendが需要にピッタリなのですが、CreatorはCPUと同時発売ではないことと、値段的に高そうなので見送りました。

今考えると、1万円ちょっと足すだけで、ヒートシンクも大きく無線Lanも付いてくるTaichiでも良かった気も……。


メモリー

ZenやZen+世代のRyzenではメモリクロックがCPU性能のボトルネックになるらしく、なるべく高クロックのメモリーが良いみたいでしたが、 Zen2世代ではあまり関係ない模様。

しかしなるべく性能は落としたくないので、JEDEC準拠で第三世代RyzenのDDR4-3200品の中から定評のあるMicronチップ品を選択。

通常用途では16GBでも足りますが、複数のソフトを立ち上げると時々16GBをオーバーするので余裕をもって32GBに。

4枚差しだとクロック数が落ちるので、デュアルランク2枚品。


ストレージ

個人的には結構こだわりの大きなポイントです。

昔からストレージの遅さは気になっていて、SSDの登場でようやく解放された感があります。

その前のPCでもHDDをRAID0で使っていました。

7年間もストレス無くPCを使えたのも、CPU以上にSSDにお金をかけたからだと思っています。

なので、今回もストレージは可能な範囲で良い物を選択しました。

X570からはPCI-E Gen4対応でSSDも対応品が出ているのですが、発熱と価格の面で今回は除外。

SSDは高速化のためにキャッシュや並列処理など複合的な技術が使われていて、NANDの容量によって読み書き性能も変わってきますので注意です。

最終的にメインにTLCのNVMe、読み出し専用にQLCのNVMeで価格も控えめに。

Crucial SSD M.2 1000GB P1シリーズ Type2280 PCIe3.0x4 NVMe 5年保証 正規代理店保証品 CT1000P1SSD8JP

Crucial SSD M.2 1000GB P1シリーズ Type2280 PCIe3.0x4 NVMe 5年保証 正規代理店保証品 CT1000P1SSD8JP


調査不足で後から存在に気付いたのですが、シリコンパワーのNVMeもTLCで良さそうです。

レビュー記事などが少なく、若干の不安は残りますがコスパは最高だと思いました。


グラフィックボード

PCでは軽いゲームくらいしかしないのですが、VRには興味があるので対応できるようなグラフィックボードを選択しました。

Radeonを外したのは、3DCG系のツールと相性があまり良くないからですね。個人的な経験則ですが、HD7770でハマったので……。

RTXのSuperが正式発表される前に、2070が処分価格になっていたので6月の時点でポチっちゃいました。今選ぶなら2060Superかも。

このクラスのグラボは発熱が大きめなので、コンパクト型のボードは避け、静音化のためにファンもなるべく低回転のものが良いのでヒートシンクが大きいモデルを。

この辺はケースや負荷をかける時間など環境や用途によって優先順位が変わるかと思います。


電源

電源はあまりケチらない方が良いです。

前はケチって安い物を買ったので、3年経たずに壊れて結局2個分の値段で割高となりました。

OEM供給を探すのが面倒なので、明記しているowltechのSeasonic電源。

容量は構成を見て650Wもあれば足りそうだったので650Wにしておきました。

余り大きすぎても負荷の低い通常使用時にロスが大きいので、X570+3700X+RTX2070構成なら650~750Wで十分でしょう。

不要なケーブルは邪魔になるので出来ればフルモジュラー、価格を抑えたいのであればセミモジュラー。


その他

魅せるPCにする予定は無かったので、ケースはそれほどこだわらず、大きさ、シャドウベイ、価格で選びました。

Corsair Carbide 275R

Fractal Design Define C

NZXT H510

NZXT H510 ミドルタワー [ Black & Black ] CA-H510B-B1

NZXT H510 ミドルタワー [ Black & Black ] CA-H510B-B1


OSはWindows10 Proを選択しましたが、Windows10からは無印でもメモリの制約もほぼないので、開発用途でもなければ無印で十分でしょう。

Amazonで購入する場合は、信用できるショップ(Amazonが販売等)から購入するようにしましょう。

Amazonの在庫が切れている場合はプライムからの販売になったりするので注意が必要です。

個人販売の場合は不正ライセンス品のリスクが上がります。

安いからとフリマアプリ等で購入すると登録できなかったり、犯罪行為をする人に個人情報が流れたりしますので、リスクに見合うだけの価値は無いと思います。


組み立て

一般的な自作の手順は省略します。

X570チップの冷却

f:id:hildsoft:20190721023153j:plain

大型のグラフィックボードを使うと、このようにX570やM.2スロットを覆うヒートシンクとファンの開口部をの半分くらいを埋めてしまいます。

窒息環境と言われているみたいですが、空気の流れを遮断し、放熱しにくい環境のようです。

しかし、この辺はMBメーカーも当然分かっていることで、対策をしています。

f:id:hildsoft:20190721023142j:plain

ファンの上下にスリットがあり、ここを空気が通るようにしているみたいですね。

通常のシロッコファンとファンの形状も違っているので、空気の流れ方も違うのでしょう。

発熱は小さくは無いですが、動作上問題のない温度までは下げられるようです。

SSDに負荷をかけても60度程度で止まりました。


グリス

f:id:hildsoft:20190721025603j:plain

純正CPUファンにはグリスが付いていますので、初回の組み立てでは別途グリスを買う必要が無いのはIntelもAMD一緒ですね。

しかし、AMDのこのグリス、結構量が多いので塗り直すことにしました。

自作erの中では有名な熊グリスこと、thermal grizzlyのKryonaut。

KryonautとHydronautと2種類あります。

f:id:hildsoft:20190721024355j:plain

Kryonautの特徴としては

  • 液体窒素使うならこっち(空冷水冷で使ってもOK)
  • Hydronautより耐久性に劣るので塗り直しが必要(2年おきくらい?)
  • Hydronautより粘土が低く塗りやすい

のようです。

価格はKryonautの方が少しだけ高いですが、大きな差は無いです。

チャック付きの袋があるとは言え、何度も開け閉めすると空気に触れるため、必要な分を買うのが良いと思います。

1gもあれば3回は塗れるので、普通は一番小さい物ですね。


EPS12V電源ケーブル

f:id:hildsoft:20190721083433j:plain

CPUの近くにコネクタがあり、裏側から配線して右から取り出すケースなので少しだけ長さが足りませんでした。

650W電源で8ピン1本しか無いので、4ピンの方は挿していません。

OCや消費電力の大きいCPUだと必要ですけど、3700X程度では無しでも問題ないみたいです。

余裕を持たせる意味ではあった方がいいのですが。

オウルテック EPS12V用電源変換ケーブル 30cmOWL-CBPU061

オウルテック EPS12V用電源変換ケーブル 30cmOWL-CBPU061


MemTest86

f:id:hildsoft:20190721092549j:plain

ハンマーテストを除いて4Passしました。

DDR4-3200の32GBで3時間程でした。

メモリー関係の不具合は原因の特定が困難なのと、最終的に交換するしかないので初期不良交換できるうちに早めに1回チェックしておきたいところです。


大ざっぱなスペック比較

やっと本題です。

マシンを買い替える時は、どの程度の効果があるのか気になるものです。

高くてもそれだけの効果があれば買う価値がありますし、安くても期待した成果を上げられないなら無駄になってしまいます。

自作するときは他の方が書いているブログやtwitterなど、どの程度のパーツでどの程度の性能が出るかという情報は一つでも多く欲しいので、このブログも購入を検討している方が少しでも参考になれば幸いです。

何度も実行したわけではないので、目安程度に。


構成

-
CPU Core-i7 3770 Ryzen7 3700X
マザーボード ASUS P8H-77-M ASRock X570 Steel Legend
メモリー DDR3-1600 32GB DDR4-3200 32GB
ストレージ Intel330 180GB*2(RAID0)
Crucial MX500 500GB
WD Black SN750 1TB
Crucial P1 1TB
グラフィックボード Quadro M2000 GeForceRTX 2070
電源 Corsair 550W Seasonic 650W


消費電力(ワットチェッカーでシステム全体)

- 差分
アイドル 65W 80W +15W
cinebenchR20(マルチコア) 130W 160W +30W
cinebenchR20(シングルコア) 85W 90W +5W
FF漆黒ベンチ 150W 280W +130W


ベンチ(1920x1080のデスクトップ高品質設定で1回のみの計測)

- 差分
cinebenchR20(マルチコア) 1362 4561 +3199
cinebenchR20(シングルコア) 289 493 +204
FF漆黒ベンチ 5471 16814 +11343


まとめ

性能面

性能は飛躍的に上がったのでこれでまた5年は使えるハズ!

特にマルチの性能と電力コスパは旧マシンと比べて凄いの一言。


消費電力

全体的にかなりの性能向上があるので、消費電力も少し上がっている感じ。

X570は消費電力が高いと言われているけど、この程度なら十分許容範囲。

アイドル時はもう少し消費電力落とせたら嬉しい。


温度が高い箇所がある

f:id:hildsoft:20190721095200j:plain

ベンチなど負荷をかけると温度が少し気になる。

SYSTINとTMPIN7ってどこのセンサーなんだろう?

耐久性や安定性のためにもう少し温度下げたいなぁ。

【ネタバレあり】自作脱出ゲーム、「カラージェム」のレベルデザインで考えたこと

あけましておめでとうございます。

出来れば去年で書き上げたかったのですが、ゲームのリリース自体がギリギリだったため年明け1発目の更新です。

f:id:hildsoft:20180101125348j:plain

脱出ゲームの製作

去年(2017年)末、初めて脱出ゲームを製作してUnityroom様の方で公開しました。

脱出ゲーム カラージェム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

AndroidやiPhoneを意識した縦長の画面構成ですが、スマホ向けのリリースは今のところ予定にありません。

開発後記はこちら backyard.hildsoft.com

以下、ゲームのネタバレを含みますので、まずはゲームを楽しんでから見ていただけると幸いです。





今回のゲームの配置図と攻略情報

主要オブジェクトの配置

まずは今回作ったゲームのイベントやアイテムの配置図から。

部屋は二つです。

f:id:hildsoft:20180101131956j:plain

部屋1

f:id:hildsoft:20180101132009j:plain

部屋2

攻略までの流れ

  1. 宝箱の鍵を手に入れる

  2. 宝箱を開けて、ジェムを手に入れる

  3. ベッドの下の赤インクを回収

  4. 部屋2の巻物の後ろに隠されているジェムを回収

  5. 赤インクをセット

  6. ジェム加工装置で赤、黄、緑のジェムを作成

  7. メイン装置で、ヒント1のとおりにジェムを並べて下段の扉を開ける

  8. ジェムと青インクを回収

  9. 青インクをセット

  10. ジェム加工装置で青、緑、桃、黄のジェムを作成

  11. メイン装置で、ヒント2のとおりにジェムを並べて上段の扉を開ける

  12. 部屋の鍵を回収

  13. 部屋1の扉から脱出

若干の手順は前後して行動できますが、基本はこの流れです。


ゲームの楽しさを覚えてもらい、操作の壁を取り除く

脱出ゲームの面白さ

開発ブログでも書きましたが、脱出ゲームの面白さは

「クリアすることよりヒントから謎が解けた時が楽しい」

にあり、それが楽しいからプレイすると思うのです。

なので、クリックしていれば何となくクリアできたり、理不尽な設定を持ち込むことは避けようと思いました。

脱出ゲームの操作性

脱出ゲームはアクションゲームのような繰り返しやるものでもなく、思考するゲームだと思っているので、操作性はなるべくシンプルにして操作説明無しに遊べることを目指しました。

最初の情報

f:id:hildsoft:20180101134715j:plain

ゲーム開始時点での画面です。

この状態で何ができるでしょうか?

f:id:hildsoft:20180101135037j:plain

まずいきなり壁や何もないところだけをクリックする人はいないと思います。

なので、ゲームに関する情報を与えられていないユーザーは上図のどれかをクリックすることになると思います。


ここで「それぞれの操作がどのように反応するか」、を少しずつ覚えてもらうのです。

  • 上部ボタン:無反応
  • ドア、ドアノブ:ドアに接近
  • 置物1:上手くクリック出来たら接近(意味は後述)
  • 置物2:無反応
  • 下部ボタン:視点の回転

この画面で全ての操作をしなくても、何度か操作を行うことで、ユーザーは下記の操作を覚えることでしょう。

  • クリックすることで接近でき、得られる情報が変わるものがある
  • 上部のボタンは特に意味は無い
  • 下部のボタンは今いる部屋を見回すことができる
  • クリックしても反応しない物もある

その他の操作についても、何かアクションをしたときに何らかの反応を与えて少しずつ操作を覚えてもらうことになります。

f:id:hildsoft:20180101140731j:plain

例えばドアをクリックしたときに、ドアへ接近するわけですが、そのあと元の位置に戻る操作は下部のボタンをクリックすることになります。

「ドアをクリックした」事により「ドアに接近した」結果、「下部のボタンが変わった」ので、接近したドアを調べる人もいれば、何もせず下部のボタンをクリックする人も居るでしょう。

大事なのは、いずれ下部のボタンをクリックするようにユーザーを導くことなのです。

ゲーム慣れしている人とそうでない人へのアプローチ

上で挙げた情報というものは、ゲーム慣れしている人は何の意識もせず自然と行動するものです。

それまでのゲーム経験値があるから、こういう行動を取ったらこうなるだろうという予測ができるため、最初から意味のありそうな行動を取る可能性が高いです。(この先入観を逆手に取って問題を作るのも面白いですが、これを理不尽だと感じる人も居るのでバランスは難しくなりそうです)

脱出ゲームに関して言えば、簡単だった、難しかったという判断より、理屈や仕組みをヒントから想像できてその通りに動作したということが楽しさにつながると思っているので、かける時間は人それぞれで構わないのです。

大事なことは、仕組みを理解したうえで解いてクリアすることなのです。

では、脱出ゲーム慣れしている人と、そうでない人、どちらも楽しめるようにするにはどうしたら良いでしょうか?

今回作ってみて思ったことは、ヒントを増やして初心者ユーザーでもクリアできるようにするということです。


上の方で

  • 置物1:上手くクリック出来たら接近(意味は後述)

と書きました。

f:id:hildsoft:20180101143132j:plain

脱出ゲーム慣れしている人は、何のヒントも無しにこういう所をクリックするんですね。

f:id:hildsoft:20180101143219j:plain

結果、鉢植えに接近して宝箱の鍵を見つけることができます。

でも、この操作をいきなり全てのユーザーに求めるのは酷というものです。

そこで、気づきのきっかけを作ります。


気づきにくい特殊な操作

脱出ゲームは、ぱっと見で分からないような場所に物を隠すことが多く、それを探すのも一つの楽しみです。

しかし、そういうゲームだと分からない人にも楽しんでプレイしてもらうために、隠し場所をクリックするという操作を覚えてもらわなくてはいけません。

そこで、今作ではこのような仕組みを導入しました。

f:id:hildsoft:20180101144417j:plain

部屋2から部屋1へ移動する際に、サブリミナル的に赤い物がチラっと見えます。

何度か移動していると気づくこともあると思います。

それを補助するために、視線が分散しないよう前面になるべく物を置かない工夫もしています。

少し分かりづらいヒントですが、2Dではなく3Dで脱出ゲームを作っているからこそ使えるテクニックです。

これに気づいたら、「ベッドの下を見る」という操作を探そうとしませんか?

f:id:hildsoft:20180101145355j:plain

ベッドの下の隙間をクリックするとこうなります。

これでアイテムが隠されているということをユーザーは理解してくれます。

このヒントに気づかなかった場合でも、このゲームはクリックするとズームする場所とそうでない場所があるという仕様で、複数の場所にそういう仕掛けがあるため、いずれ気づくことになるでしょう。


ゲーム特有の特殊な操作

実生活の経験から得られる知識や、他のゲームの経験から得られる知識など、ユーザーによっては様々なのでゲーム特有の装置については、なるべく多めにヒントをちりばめたいものです。

f:id:hildsoft:20180101151132j:plain

f:id:hildsoft:20180101151239j:plain

今回の場合はこの二つの装置ですね。

いくつか工夫をちりばめたので、具体的な工夫は後述します。

この装置を見てどのような情報を得るか、どのように操作してみようと思うか、やはり人それぞれです。

作る側として大切なのは、ユーザーが何らかのヒントを基に解答に近づけるようにガイドをすることだと思います。

使い方の説明書を書くのではなく、手探りで使っているうちに仕組みを連想し理解していく事で面白さに繋げていきます。


上記の点を踏まえて工夫したこと

ズーム操作

クリックするとズームするところが9か所あります。

隠してあるアイテムを取るためのズームだったり、装置を操作するためのズームだったり、用途は異なります。

隠してあるアイテムを取るためのズームは正確にクリックする必要があり、なるべく適当なクリックでは反応しないようにしています。

これは偶然でクリアしても面白くないからです。もちろん隠しているアイテムはズームしないと取れません。

また、探すためのズームという操作を覚えてもらうために、装置やドアなど意味ありげで大きな判定のものも用意しました。


見えるけど取れないアイテム

f:id:hildsoft:20180101155152j:plain

装置2の下の部分です。

取れそうな物をわざと遮って置くことで、これは取れる物(クリアに必要な物)かもしれないという認識ができるとともに、何か別途操作が必要だと認識してもらいます。

取れるものだと認識したら、似たようなものは取れると認識しますので、別の場所で見かけると自然とクリックするように誘導します。

今回は半透明なガラスで遮りました。ゲームによっては高所に置いたり、手の入らなそうな狭いところに置くなどの工夫も良いですね。


アイテム入手

f:id:hildsoft:20180101161401j:plain

恐らく最初にユーザーが手に入れるアイテムです。

ゲーム内で隠されずに配置されており、さらに回転しているので一番見つけやすい物だからです。

f:id:hildsoft:20180101161645j:plain

これをクリックすると画面上から消え、上のアイテム欄に収納されます。

その際、枠と背景色が変わります。

これは選択状態を意味しますが、他と違う(入手したアイテム欄や使えるアイテムだから色が変わっているという可能性もある)ことが意識できれば良いくらいの認識です。

もう少し分かりやすくするには、selectedなどの文字の説明を入れても良いかもしれませんが、文字を入れないスタンスで開発していたので今回はいれていません。(最終的に時間的な問題からクリア表示は文字にしちゃったんですけどね……。)

入手したタイミングでパッと表示を切り替えるのではなく、ボタンの大きさのアニメーションや、音を鳴らすなどの工夫もあると良いですが、今回は時間の都合でカットしました。


簡単な装置

f:id:hildsoft:20180101160539j:plain

宝箱は恐らく殆どの人が知っている装置です。

このゲームでは道具を選択するという概念があるので、鍵を選択していないと宝箱は開きません。

それを理解してもらうために、簡単な仕組みとして用意しました。

適切なアイテムを選択状態にして、適切な個所をクリックする。

この流れを実際の宝箱という装置から使い方を連想して操作してもらうことで、ゲーム内の「道具を選択」という概念を理解してもらいます。


似たアイテム

f:id:hildsoft:20180101163836j:plain

インクタンクの設置画面です。

緑だけは何かアイテムありますけど、赤と青は空だということが分かります。

f:id:hildsoft:20180101163937j:plain

となると、これ怪しいですよね?

でも取れません。

このように配置するだけで、

  • このアイテムは取れるはず
  • 何か操作をしないと取れない
  • 取れたら1枚目の青いところに使うんだろう(使うところの予想がつく)
  • 赤い物もどこかにあるだろう

と情報が増えて連想できる範囲が広がります。

日常の生活空間にあるようなものなら用途の想像もつきやすいですが、ゲーム内特有なものは製作者の方で使い方の誘導をすると理不尽だと感じることも減ると思います。


装置の連動

f:id:hildsoft:20180101170038j:plain

装置を連動させる場合は、何らかの関連性を持たせると連想しやすいです。

赤インクを手に入れてセットした状態です。

隣の装置の赤いランプが付いています。

f:id:hildsoft:20180101170828j:plain

最初は付いていなかったものです。

ユーザーが気づくタイミングがいつになるかは分かりませんが、連動しているんだという認識は場所や色、形などで何らかの関連性を持たせることでユーザーの発見を促します。


装置の使い方 その1

このゲーム独自の装置なので、使い方を説明or誘導する必要があります。

f:id:hildsoft:20180101172414j:plain

クリックしたくなるような形状や大きさを意識しました。

反応したorしなかった時の音やエフェクトも用意したかったのですが、時間の都合で出来る範囲での工夫です。

なるべくパネルの操作に気づいてほしかったので、最初に緑のインクは設定して使える状態にしておき、ジェムも設置しておきました。

今考えてみると、黒いジェムではなく緑のジェムを置き、取得するとパネルの色を消す方が良かったかもしれません。


装置の使い方 その2

f:id:hildsoft:20180101173613j:plain

謎解きのメイン要素となる装置です。

こちらの装置に解答の通りにジェムを並べることで下にある扉が開きます。

ここでは正解したかどうかが分からないので、ボタンを押したときに判定の音を用意しました。

設置したときに自動判定ではなくボタンを押して判定する方法を採用したのは、ランダムで正解されることを避けるためです。

ボタンを押す手間を加えることで総当たりでの解答にたどり着く試みを起こさせない方法です。

ここでもジェムを設置してもらうために、装置1にあるオブジェクトと同じものを用意しています。


謎解き部分

今回は謎解き部分は簡単にしました。

ヒントの色通りにジェムを並べるだけです。

f:id:hildsoft:20180101174424j:plain

  • 設置する台は5個
  • ジェムは色が変えられる
  • 青インクは手に入らない
  • ジェムは3個しかない

という条件から、ヒント1と関連付けて色を並べることになります。


f:id:hildsoft:20180101174432j:plain

下の扉が開いて青インクとジェムが1個手に入るので上記の条件が更新されます。

そこからヒント2と関連付けることになります。

鍵を手に入れたらドアノブに使用して脱出は完了です。


色に関係する物なのでさらに難易度を上げるとするなら

  • 光の三原色(RGB)だけではなく、色材の三原色(CMY)も混ぜる
  • プルキンエ現象を活用する

などを混ぜると難易度が上がって歯ごたえが増すかもしれません。

しかし、その場合でもユーザーが気づく何らかのきっかけ(プルキンエ現象なんて知らない人が多いのですから、ランプの色が違うところで同じものを見て見え方が違うことに気づくような仕組み)があると良いかと思います。

今回の色合成については、トグルボタンが3種類の8パターンしかないので知らない人でも試行による気づきに結び付けて欲しいと思いながら敢えてゲーム内での説明を省きました。


最後に

文字にしてみると結構長かったです。

長々とお付き合いいただきありがとうございました。

これだけの長さの記事を書いたのは初めてですw

脱出ゲームを作ってみて初めて分かることが多く、勉強になりました。

ゲーム一つを作るにしても色々考えているんだなーというのを感じてもらえれば嬉しいです。

また、この記事が脱出ゲームを作るきっかけやレベルデザインの参考になれば幸いです。

ツッコミなどもお待ちしています。

勝手に1人unity1week2017年末編

unity1weekとは

Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

月曜0時開始、日曜20時締切の1週間ゲームジャムです。

毎回お題が発表されるので、それに沿った(拡大解釈可)ゲームを作ります。

以下略

参加の記録

今回は公式開催ではなく、勝手に年末期限を決めて1人で作っただけです。

思い立ったのは12/26、この時点で1週間無いわけで、脱出ゲームくらいなら3日もあれば作れるだろうと軽く考えてしまったのです。

というのも、今作成中のアセットキャラクター、

f:id:hildsoft:20171231212004j:plain

この子なんですが仕事の合間に1年以上試行錯誤して作っているにもかかわらず、なかなか納得のいく出来にならずリリースが遅れまくっている状況です。

年内にリリースできるように頑張ってはみたのですが、26日の段階で年内完成は無理だと判断したため、気分転換にゲーム作ってみたわけです。

今回の目標

今回の目標は

  • 新しいアセットを使ってみる
  • マネタイズしやすいと言われている脱出ゲームを作ってみる

を設定しました。

秋のアセットセールと、並行して行われていたUnityPlusの半額セール、これによりアセットが急に増えたので勉強が大きな目的です。


今回作成したもの

f:id:hildsoft:20171231212556j:plain

https://unityroom.com/games/escape_color_gem

よくあるアイテムを集めて脱出する典型的な脱出ゲームです。ひねりも無い王道ものです。


事前準備など

脱出ゲームですから、まずは大まかな流れを考えました。

時間的な制限もあるので、アセットストアからいくつかアセットをピックアップして、不足分は自作で片づけてしまうことにしました。

ネタバレになるので、レベルデザインについては別で記事を書こうと思います。


脱出ゲームの面白さ

脱出ゲームって何が楽しいのだろう?と自問したところ、「クリアすることよりヒントから謎が解けた時が楽しい」という結論になりました。

時間的な制限もあったので複雑なものは作れませんでしたが、納得のいく仕組みにはなりました。


脱出ゲームの問題点

フラッシュ全盛期から作られて歴史のある脱出ゲームですが、よくあるものは3D(壁の方向など)を意識した2D素材を切り替えたものなので、移動は一瞬ですし、不都合な物は描写しないなど 3Dでのカメラワークとは別でパースも自由に作れるのですが、素材を沢山準備しないといけない欠点があるわけです。

そして3Dの場合は素材を使いまわせるメリットがある反面、カメラワークが一番の課題になると思います。

最初に悩んだのがFOVの値です。

壁面全てを1画面に収めたいのですが、FOVの値を上げると端が歪み、FOVの値を下げると回転で見回す時に問題が出る状態でした。

f:id:hildsoft:20171231220741j:plain

そして回転の都合上、カメラの前に物を置くことが難しい問題がありました。

f:id:hildsoft:20171231220842j:plain

自由に視点を移動できるゲームであれば問題ないのですが、脱出ゲームは謎を解くことがメインなので、操作が煩雑になることは避けたかったのです。

そのためカメラワークはかなり苦労した点でした。


アセット競合するってよ

今回導入したOdin、ソースコードを解析してインスペクタを使いやすくするため、Arbor2と競合してしまったのです。

公式でも事前にツイートがあったので覚悟はしていました。

色々と調べて回避することはできたのですが、一時はどちらかの使用を中止することまで考えたのでアセット多用の怖さを少し味わいました。


残念だったこと

今回は増えたアセットの勉強をメインとしていたわけですが、完成させることも大事な目標なので、使おうと思っていたアセット

  • DoozyUI
  • Mesh Baker

の調査ができなかったことは残念です。



アセット

今後の開発効率を高めるためにアセットの勉強をしたので、ゲームボリュームに対しては普段より多めにアセットを使用しています。


以下は今回使用したアセットです。

ガッツリ使ったものもあれば、部品取りの様に一部だけ使わせてもらったものもあります。

製作者の方にこの場を借りてお礼申し上げます。

総括

エディタ拡張をあまり使っていなかったのですが、使ってみて便利さを体感しました。

何でUnity標準で入ってないんだろう?と思おう物もありますが、重くなることも確かなので、便利だとしても必要に応じて使用を検討するのも大事だなぁと思いました。

また、副産物として脱出ゲームのキモとなる仕組みが分かったので、これを調整して完成プロジェクトや拡張素材として出品するのもアリだなと思えたのは収穫でした。


2018/01/02 追記

今回のゲームについてUIまでは手が回りませんでした。

しかしレベルデザインは真面目に考えたので、もしよければこちらも読んでみてください。

backyard.hildsoft.com

unity1week第六回お題「Space」に参加したので開発まとめ

unity1weekとは

Unity 1週間ゲームジャム | 無料ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

月曜0時開始、日曜20時締切の1週間ゲームジャムです。

毎回お題が発表されるので、それに沿った(拡大解釈可)ゲームを作ります。

時間配分などは各自に任されているので、有給取るなどして1週間ガチでやるも良し、毎日少しずつ作って週末ブーストするも良し、ネタに走って短時間で片づけてもokなお祭りです。

日曜提出なので、自分の技術力やリソースとも相談しながらあまり複雑にならないようなゲームを作るというバランスも求められます。

時間オーバーしても提出できるみたいですが、この辺はルールなので極力守りたいところ。

今回は1日以上遅れてしまいました。

どうしても風呂敷を広げがちで収めきれない、今後の課題です。

参加の記録

今回の目標

今回で3回目の参加になります。まだまだ期間内で満足のいく仕様に収めて完成させることができてないですね。反省です。

今回の目標は

  • UnityでWebGLを使ったら弾幕系シューティングゲームって作れるかを調べること
  • ネットランキング、SNS対応

を設定しました。

前回までと違い、少し時間をかけてでも今後のスマートフォンアプリなどで使えるよう、そろそろマネタイズを意識した動きになりました。


今回作成したもの

f:id:hildsoft:20171121060905p:plain

https://unityroom.com/games/survivalspace

迫りくる弾幕を制限時間まで避けるだけのゲームです。

敵を倒したり、ボムを使って弾をかき消すなどはありません。

1発被弾で即死というものではなく、シールド値を削りきられたらゲームオーバーです。


事前準備など

今回はシューティングゲームかローグライクゲームを作ろうとゲームジャムの前から考えていました。

実際に作業を開始したのはお題が発表されてからですが、どちらかのジャンルに結び付けられれば開発、そうでなければ簡単なもので済ませる予定でした。


ジャンル決定と方針

Spaceというお題から、シューティング系や宇宙系はかなり被るだろうなぁと感じました。

ゲームジャムですしネタ被りは問題ないのですが、個人的に避けたいのです。

グラフィック素材での差別化が難しいので、アイディアか技術面で何か独自色を出せないかなと思っていたところ、昔LibGDXを使って弾幕シューティングを作ろうとしてGCの壁に跳ね返されたのを思い出し、Unityで再挑戦することにしました。

当時はスマートフォンもCPU性能が低く、メモリも少なかったので結局諦めたのでした。


まずは調査

WebGLでは今までも痛い目を見ているので、特に処理負荷の面で心配だったので最初にどのくらいの弾数を出せるか実験してみました。

f:id:hildsoft:20171121064318p:plain

f:id:hildsoft:20171121064554p:plain

Unityでのオーソドックスな手法で弾を出してみたところ、案の定GC発生して等間隔で打ち出していた弾がズレました。

弾幕ゲームは弾幕の形状が曲線で綺麗に表示されるのが好ましいので、完全には無理だとしても違和感がない状態までに抑えないといけないことと、操作時にカクつきを感じないくらいまで処理を高速化or弾数を制限しなければいけません。


GC対策

GC回避の特効薬はオブジェクトプールを利用することですが、メモリを解放しないのでメモリ管理の知識は要求されます。
今の時代ある程度メモリには余裕があるので、結構雑にメモリを確保しても大丈夫だと考えて大きめにプールを確保することにしました。

f:id:hildsoft:20171121065106p:plain

オブジェクトプールを使って、表示だけしたところです。

当たり判定は実装していませんでしたが、GCが発生していたときの4倍くらいの量(2500程度)の画像を表示しても問題なく動くようになりました。

この状態で一度WebGLに書き出して試したところ、Unityエディタ上ほどの性能は出ませんが十分動くことが確認できました。

一般的な弾幕ゲームでは1500くらい弾数を出せれば十分なので、このまま進めることにしました。


ゲームエンジンを使う意義

直接DirectXやOpenGLを触ったことのある方ならわかると思いますが、オブジェクトがどこに行ったか分からなくなるんですよね。

カメラとは別でゲーム内の空間を自由に見ることができるだけでも、ゲームエンジンを使うメリットは十分あると感じています。

性能だけを追求したいのであればC++でネイティブのコンパイラを使えばいいのでしょうが、やはり複数プラットフォーム展開、開発効率を考えたらUnityなどのエンジンを工夫して使う方が効率的だと感じました。


アセット

前回からArbor2を使用しているのですが、今回のメイン処理は高速化が求められるので、残念ながらモック作成用に序盤と最終的に画面遷移などの外枠での使用にとどまりました。

便利なアセットなので、最適化が必須となる環境では使用が制限されるのが残念です。
利便性を取るか性能を取るか、バランスを考慮する必要があります。


以下は今回使用したアセットです。

少しずつの利用でしたが、自分で作成するよりは良い物ができました。

製作者の方にこの場を借りてお礼申し上げます。

総括

やりたいことを絞れなかったため色々と未消化な部分があります。

前回できなかったSNS対応は、1日遅れたこともあり一応達成することができました。

UnityではIL2CPPの恩恵が得られるので、それほど専門的な知識がなくても実装次第では弾幕ゲームを作れる事が分かったことは収穫でした。

今回のノウハウはスマホゲームを作る上での経験値になったと思います。

もう少しソースコードを整理してスマホゲームのプロトタイプができたら、デザイナーさんを誘ってマネタイズできるようなゲームとして出してみたいですね。

最近読んだ印象が強かった漫画(2017/09)

辺獄のシュヴェスタ

辺獄のシュヴェスタ(1) (ビッグコミックス)

辺獄のシュヴェスタ(1) (ビッグコミックス)

中世の物語です。

魔女狩りがメインテーマで、親を殺された主人公の復讐劇が描かれています。

まだ完結はしていませんが、既刊5巻というボリュームでも読み応えのある作品です。

権力に抗う一人の少女エラ、突きつけられる非常な選択、それをどのようにして切り抜けるのか。

読んでいて展開が気になる物語ですが、少々残酷な表現を含んでいますのでこの点だけはご注意を。


少女終末旅行

少女終末旅行 1巻 (バンチコミックス)

少女終末旅行 1巻 (バンチコミックス)

今週からアニメも放映される作品です。

現代の文明が滅んだあとの、荒廃した世界を旅する二人の少女の話です。

食料や燃料を残された施設などから補給しながら終末を迎えた世界でどこへ向かうのか?

まだ物語の核心に触れる展開には至っていませんが、舞台の世界観やキャラは好みです。


ホーリーブラウニー

Holy Brownie (1) (ヤングキングコミックス)

Holy Brownie (1) (ヤングキングコミックス)

エクセルサーガが好きならハマる、ブラックユーモアを詰め込んだおとぎ話です。

主役は妖精なのですが、登場するキャラは毎回異なっていて1話完結のショートストーリーが多いです。

パロディ的なネタが多めなので、ある程度の知識が無いと読んでてもピンと来ないかもしれません。

ですが、分かると面白い、皮肉にまみれた作品であることは確かです。

エロや残酷な表現もあるので、その辺に抵抗のある方は読まない方が良いです。

最近読んだ印象が強かった漫画(2017/08)

転生したらスライムだった件

転生したらスライムだった件(1) (シリウスコミックス)

転生したらスライムだった件(1) (シリウスコミックス)

ラノベが元ですが、またしても異世界転生ものです。

流行りの物はどうしても目につきますし、出版社としても定番の物を出して安全圏を狙いたいし、読者としても一つ面白い物を見つけると似たようなジャンルを読みたくなるものなのでしょう。

内容的には、現世で死ぬ>転生したらスライムだった>一般的にスライムは弱いと思われがちだが、あるきっかけで強くなる。というベタな展開です。

理不尽な設定で強引に物語を進めるのではなく、順序だてて展開していきます。(運の面では都合は良いですが、小説なんてそんなもんでしょう)

そういう面で、テンポよく物語が進んで行くのでどんどん続きが読みたくなります。

1回目はさらっと読み流して、2回目に気づくこともあったので割としっかり作られている印象を受けました。


ぱらいぞ

ぱらいぞ1 (ワニマガジンコミックススペシャル)

ぱらいぞ1 (ワニマガジンコミックススペシャル)

さすが道満先生というシュールな内容の4コマ漫画です。

ネタは色々な方面から飛んでくるので、いくつか意味不明な物もありますが、マンガやゲーム好きなら理解はできるでしょう。

恐らく漫画を殆ど読まないような層の人は理解に苦しむ作品かと思います。万人向けではありませんが、こういう作品は個人的には好きです。


ADAMAS

ADAMAS(1) (イブニングコミックス)

ADAMAS(1) (イブニングコミックス)

ダイヤモンドに宿る力を得て、裏世界の荒事を解決する主人公、流崎麗華。

宝石の力を使う能力者をジュエルマスターとよび、もちろんこの力を悪用する組織も出てきます。

行方不明になった父と、その原因と思われる闇の組織を追って仕事をこなす主人公の物語です。

序盤は単発のストーリーが多めですが、徐々に伏線が張られ終盤に向かっていきます。

少し長めの漫画ですが、流れのある作品で読みごたえがありました。


結婚指輪物語

結婚指輪物語 1巻 (デジタル版ビッグガンガンコミックス)

結婚指輪物語 1巻 (デジタル版ビッグガンガンコミックス)

こちらは異世界転生ではなく、異世界が別世界として存在していたファンタジー系のストーリーです。

主人公サトウが幼馴染のヒメを追いかけると、そこは異世界だった。流れで告白し結婚することになる二人。

ヒメもサトウも相思相愛だが、結婚しても恥ずかしさから中々進展しない関係。

その上、指輪を集め悪を倒すという大目的の途中、王家に伝わる指輪を授ける=結婚という図式から複数の国の王女と重婚をしていく主人公サトウ。

初々しい二人+他国の王女というハーレム状態な異世界冒険ものです。

やはり見どころはヒメの心情変化ですね。

unity1week第五回お題「フロー」に参加したので開発まとめ

unity1weekとは

Unity 1週間ゲームジャム | ゲーム投稿サイト unityroom - Unityのゲームをアップロードして公開しよう

月曜0時開始、日曜20時締切の1週間ゲームジャムです。

毎回お題が発表されるので、それに沿った(拡大解釈可)ゲームを作ります。

時間配分などは各自に任されているので、有給取るなどして1週間ガチでやるも良し、毎日少しずつ作って週末ブーストするも良し、ネタに走って短時間で片づけてもokなお祭りです。

日曜提出なので、自分の技術力やリソースとも相談しながらあまり複雑にならないようなゲームを作るというバランスも求められます。

時間オーバーしても提出できるみたいですが、この辺はルールなので極力守りたいところ。

今回は1時間オーバーして、さらに3時間弱オーバーで修正も加えました。

参加の記録

今回の目標

まだ2回目ですが、参加する際に事前に目標を設定しています。

今回の目標は

  • arbor2を使うこと
  • FSMでどこまで出来るか試してみること
  • スマートフォン対応できる操作、アスペクト比にすること
  • ネットランキング、SNS対応

を設定しました。

あくまで目標なので、挑戦したうえで失敗しても得られるものがあればokというゆるーい姿勢です。


今回作成したもの

f:id:hildsoft:20170828005404p:plain

https://unityroom.com/games/slidefloor

矢印の床に乗ると自動で運ばれていき、ゴールまで到達できればクリアというパズルゲームです。


最初に考えていたもの

最初に考えていたものは、紙風船のようなゆっくり落ちてくるボールに送風機を設置して風の流れでゴールまで運ぶというゲームでした。

  • ドラッグ&ドロップで送風機の強さを決定しながら設置
  • 送風機は一定時間で消える
  • 強い力の送風機ほどエネルギーを消費する
  • エネルギーは有限
  • 複数ステージごとのタイムアタック制

という大ざっぱに仕様を考えた段階で、いざモックを作ってみようとすると問題が露呈しました。

ドラッグ&ドロップの操作は、小さなスマートフォンでは画面外に出てしまう。

PC上なら画面外に出てもマウスを引っ張れば問題ないのですが、スマートフォンではそうはいきません。

これでは画面端で送風機を設置する場合に、強さか角度の設定に制限がかかります。

そして画面が小さなスマートフォンではゲームエリアを小さくすると、今度は操作性や視認性の問題が出てきます。

ここで一旦参加を諦めましたが、辞書でflowの意味を再度調べたところ今回作成したゲームのアイディアが降ってきました。


arbor2の威力

今回、開発にはarbor2を使用しました。

FSMの便利なところと苦手なところを把握するためにも、なるべくコーディングをせずに作ってみることにしました。

実際、書いたコードはクラス3個、合計でも80行程度。

その反面、FSMはごちゃごちゃしました。

f:id:hildsoft:20170828012524p:plain

コーディングを減らした状態でも上手く切り分けするともう少し見やすくなるかもしれません。

コーディングを減らしたせいで、一つのFSMに集中して書かざるを得なかった部分があるので、結構密な結合になってしまっています。

再利用性が犠牲になっているので、これではFSMの利点が活かせず良くありません。

次回以降は、バランスの良いできるだけ疎結合なものを目指してみようかと思います。


arbor2の欠点

arbor2は基本的なパーツで構成されており、細かい部分は自分でカスタマイズする設計になっています。

ソース自体は全部付いてきますので、魔改造するなりして使いやすいように今後進めていこうと思います。

今回実装して、これは標準で欲しかったなぁと思うのが、(本当はあるけど探せなかった可能性もありますが)

transformからgameobjectを取得するcalculatorです。

    public override void OnCalculate()
    {
        Transform transform = _Transform.value;
        if (transform != null)
        {
            _GameObject.SetValue(transform.gameObject);
        }
    }

また、calculatorがVer2から追加されたためか一部固定値のみ入力を受け付けるbehaviourがあるので、ここは本当に必要なのか、回避方法があるか、もう少し勉強してからフィードバックしてみようかと思っています。

モックを作るうえでコードをあまり書かずにノード接続だけでざっくりと作りたいのですが、if文や定数値に相当するノード(calculator)が無いのでこの辺は公式のコンセプトとは異なるので自前で拡張する必要がありそうです。


FSMの限界

UE4のような開発環境によるノードコーディングとは違うので、リフレクションを多用するために速度面の問題が出る可能性があります。

特にモバイル向けなどの非力な環境では注意が必要です。

ですので、モックはFSMでさくっと作って、それをスクリプトに落とし込む。最終的に速度面の問題が出るようなら手動カスタマイズするか、機械的にリフレクションを解消したスクリプトを生成するようなマクロを組むなどが必要になるでしょう。

この辺りは開発コストや求められる品質と天秤にかけることになりそうです。


総括

今回の開発、最終的な作業時間はトータルでは20時間くらいになりました。
arbor2の習得とグラフィック素材の作成などに大半の時間を取られてしまったので、予想より少し長めに時間がかかってしまった印象です。

また、今回目標に挙げていたネットランキングとSNS対応はできませんでした。
ゲームの内容を変更したのでしょうがない部分はあります。

個人開発だと開発速度が早いと大きな武器になります。
小さなプロジェクトをサクサク回すためにも、FSMは十分な武器になると感じました。