Paalonのブログ

ゲームと物理学と情報学のブログ

UnityでJRPGを作りたい記録(1)

今まで OpenGL + C で無理やりオセロゲーム作ったり、Cocos2d + C++マインスイーパーもどきを作ったり、Pixi.js + JavaScript洞窟物語っぽいのを作ろうとしたりしてきた。

Cocos2dで作ったマインスイーパーもどき

いい加減、これまでわざと避けてきたUnityを使ってゲームを作ってみようと思い始めた。目標を決めておかないと迷走間違いなしなので列挙しよう。

  1. Mac, Ubuntu, Windowsで動く
  2. 最低限JRPGのシステムを備える
  3. ドット絵2Dのクォータービュー

というわけで、大抵の人はWindows(またはスマホ)向けにゲームを作ろうとするので、開発環境的な意味ではわりと情報を探すのが大変である。OpenGL + Cはもう多分二度とやらない。Cocos2d + C++はまたやるかもしれないが、自分のC++の理解不足と、Cocos2d特有のObjective-CライクなところとC++なところが混ざったところと、情報不足により詰まった。Pixi.js + JS は環境構築がものすごく楽で書きやすくてよかったがGUIでキャラクターの配置とかできるツールは自作しないと無いため不便だった。あとJS特有のソースコードの分割しにくさでバグだらけになった。振り返ってみると、素材が作れなくて詰んだことと、プログラミング的に技量が足りなくて詰んだこと、どのライブラリをどう使えばいいのか分からなくなって詰んだこと、そもそも適切なライブラリがなくて積んだことなど途中で開発が止まってしまった原因は色々だった。その点Unityは情報量では多分他を圧倒しているので楽に行けるという算段だ。

 

よく詰まったポイントとして、スプライトシート・タイルドマップの読み込み・再生、効果音の管理、BGMの自然なループ再生、当たり判定・衝突応答がある。まずスプライトシートは読み込めないと(目標とする)ゲーム作りは不可能である。次に、当たり判定はそんなに難しくないのだが、衝突応答が激ムズである。半年頑張ったが、未だに不自然なめり込みが残ったままである。効果音の管理・BGMループ再生は適切なライブラリがあるかどうか次第である。この3ヶ所を明確に実装できないとまた詰む。

 

という訳で当分の目標は

  1. スプライトシートを読み込んで再生する
  2. タイルドマップを読み込みレイヤに展開する
  3. BGMを再生する
  4. 効果音を再生する
  5. BGMを任意の位置でループ再生する
  6. 当たり判定を実装する
  7. 当たり応答を実装する

ということにしておく。いきなりクォータービューは難しいと思うのでまずは普通の傾き0°のやつでやる。

 

というわけで、Unity EditorをMacとUbuntu16.04にインストールした。Ubuntuの方はExperimentalであり、UnityEditorをUnityアカウントにログインして起動するにはなんかコマンド打って起動しないとうまくログインしてできない。公式掲示板に解決策が載っていた。

forum.unity3d.com

上記掲示板から引用すると、

" For others with this issue:
First, check if you have "libc6" installed (sudo apt install libc6).
Secondly, run: sudo locate libresolv
This will print a list to where the file is on your disk. For me, I had like three libresolv.so.2 but in different folders.
Then, I ran the command written above and it worked. After signing in to Unity I can just start the program without having to use the above command again.

So for me:
LD_PRELOAD=/lib/x86_64-linux-gnu/libresolv.so.2 /opt/Unity/Editor/Unity "

ということである。

 

が、最新版(Unity 5.50xb1)では普通に起動してログインできたので上記のことは必要なさそうである。昔の設定が残ってたりしてうまく行ったのかもしれないが。動けば良しは正義。

 

ちなみに、Ubuntuの標準?のデスクトップ環境はUnityなのでゲームエンジンのUnityと名前が被ってややこしい。