Unityでダンジョン自動生成
はい、お久しぶりです。 べーやんです。
だいぶ更新してなかったですが、またちょくちょく更新していこうかなと思います。 ゲーム業界に入って色々とバタバタしてたのですが、ようやく時間が取れ始めたので、 ゲーム制作始めました!
今日はタイトルの通り、ローグライクで欠かせないダンジョン自動生成部分を作っていこうと思います。 Unity 2019.2.11f1で作ってます!
リソース周りの準備
ブロック(床、壁)
→壁に関しては、動的に生成するので、Resourcesフォルダーを用意してください。シーン配置 床となるブロックを配置
→今回は32×32で作成
実装内容
全体のフローとしては、以下の感じ。
- そのタイルのタイプを設定
- そのタイルタイプを元にオブジェクトを配置
1つのタイルに情報を持たせるため、以下のようなクラスを保持する フィールドデータ
- 部屋の作成
→ 部屋データが必要となります。 部屋データ
→ 実際に部屋データを元に部屋を作成していく 部屋作成
- 通路の作成
→探索アルゴリズムを使用します。 【A*アルゴリズム】 以下の記事を参考にしました。 qiita.com tech.nitoyon.com
経路探索結果をもとに、フィールドデータを上書きしていきます。 道作成
最後にフィールドタイプを元に、壁を生成していきます。 地形生成
最終成果
まだまだ調整は必要だけど、
— べーやん (@abebe_mukkuru) 2020年1月26日
一通り自動生成はできたので、
こっから本格的にローグライクゲーム作っていくか! pic.twitter.com/142mNhOBim
チュートリアル作ってみた。
はい、お久しぶりです。べーやんです。
今回はcocos2d-xでチュートリアルを作ったのでここに書き留めておきます。
といってもcocosの機能はほとんど使ってないので他のエンジンや、フレームワークでも応用はきくかなと思ってます。
チュートリアルは、やっぱり実際にプレイしながら覚えてもらうというところが
強みですよね。ということでよりどういうゲームなのか分かってもらうために
作ってみました。
1.経緯
ゲーム制作中→ある程度基盤が完成→説明どうしよっか?→チュートリアル作るか
2.構成
構成を図式にしてみました。
ステージセレクトでチュートリアルを入れてみました。
メンバ変数のTutorialManagerにチュートリアルで使う情報を入れています。
では、チュートリアルの構成を簡単に。
3.コード
.hファイル
TutorialManager.h
.cppファイル
TutorialManager.cpp
今回、入れたコマンドの種類は以下の通りです。
※2,3,4のコマンドは複数回指定可能ですが、
0、1のコマンドは1回きりとなっています。
分かりづらい部分があると思うので順を追って説明していくます。
まず、メンバ変数から。
m_commandList...コマンドの集合体を格納する変数
TIMES...コマンド全体の数。
m_timeList...各コマンドの回数
m_types...コマンドを出す順番の情報を格納する変数。
IDファイル(txt)
TutorialSerihu_id
このファイルで、コマンドの種類、コマンドの総数が分かるようになっています。
" , "で区切られた部分が1つの種類として実行されます。
tal = talk
act = action
inp = input
tim = timer
emo = emotion
(それぞれ何を表しているのかを3文字にしているだけです。)
セリフファイル(json)
Tutorial_Serihu
m_commandListの1番目に入るセリフ情報です。
最後に完成したものを動画にして終わります。
4.完成動画
C++で(個人的に)役立つと思ったもの 「Aggregate」
はい、お久しぶりです。べーやんです。 9月入ったころは涼しい感じでしたが、ここ2,3日はまた暑い感じですね。
プログラム設計での役立つもの(デザインパターンのようなもの)をつらつらっと書いていきます。
・Aggregate(集合体)
特定のクラスをまとめた情報の集合体と思ってもらえたらわかりやすいっすかね。
この図でいうと、特定のクラスというのは「Character」クラスになります。
まぁ、実際にコードを見てもらった方がわかりやすいと思うので、簡単に乗せときます。
今回の出力結果は"EnemyCharacter"となります。
Aggregate使う場面というと、登録されたキャラクター情報を持ってきたいときです。 今回のAggregateは、シングルトンでコーティングしているので、 Character情報がほしいクラスに、インクルードするだけで、特定のキャラ情報が持ってこれるんですね。 このコードでは、配列番号、名前での取得しかありませんが、専用のタグでの取得も可能ですね。
ってなわけで、今回はこの辺で。
cocosに入っているrapidJsonを使ってみた結果
はい、お久しぶりです。べーやんです。
本日は、cocos2d-xの中に入っているrapidJson機能を使ってみた結果を記事に残したいと思います。
(使い方が間違ってたり、こっちの方がいいよっていうのがあれば、コメントお願いします。)
ver3.13.1でやっていきまーす。
<準備>
そもそも[fstream]とは?
c++の標準ライブラリで、ファイルを読み込む際に使われます。
今回は、JSONファイルを読み込んでいきたいので、使ってみました。
JSONファイル
では、実際に書いていきます。
<実装>
実際に動かしてみると・・・?
はい、エラーが出ました。
isObjectでエラーが出ています。吐き出されたファイルをJSONとして認識していません。
中身を見ていきましょう。
25行目の後に値を確認してみましょう。
ブレイクポイントで止めて中身を見てみると・・
最初のJSONファイルで読み込みは、"{"から始めているはずなんですけど、
0番、1番、2番にゴミ?が入っています。
エラーの原因はわかりましたが、どう直せばいいのか正直わかりません。
苦肉の策でゴミを1回消してみると、通ったので、これでいいかなぁっと思ってしまったり・・・。(´・ω・`)
もし、いい方法があればコメント等よろしくです。
まだまだ理解が乏しいから、もっと勉強していかないと。
次の記事の予告を( `ー´)ノ
今回のpraidJsonで文字表示で少し困ったことがありました。次の記事で問題となる文字のバイトを少し話したいと思います。
最後まで見てくれた方ありがとうございました。
さっそく約束破りました。
訪問ありがとうございます。
どうもべーやんです。
はい、見出しの通り、週1での進捗具合の報告をさぼってしまいました。
まぁ、いろいろとあったことはあったんですが。。。
過去のことを言ってても仕方ないので、ちゃちゃっと今回のテーマを。。。
今回のテーマは、~企画書について~
おい、プログラミング関係ないんかい。そんなことが聞こえてきそうですが、
この1週間ろくに触ってなかったので、仕方ありません。(開き直り
では、さっそく書いていきます。
いろんな記事や、本を見て、同じようなことを書いているのを発見しました。
①情報を漁れ!
②コンセプトとは!
他にもいろいろあったんですが、特に言いたいところをピックアップしました。
深く説明していきます。
①そもそも、企画するのにあたってあなたはどこから考えますか?
考えるのにあったってはいろいろあります。システムであったり、世界観であったり、
はたまた既存しているゲームから考えるというのも1つですね。
そこから面白いゲームや、印象に残るゲームを作るにはどうしたらいいのか。
一言でいうと、自分が、面白いであったり、興味深いと思ったことをゲームに当てはめていくことだと思います。興味を持つために必要になってくるのは、情報になってくるので、いろいろ知識が必要になります。
知識を集める→興味を持つ→ゲームに組み込んでみる
簡単な流れはこうなります。
②企画の根本は、やはりコンセプトであります。(けろr
コンセプトをしっかりしないと話になりません。コンセプトは一言で表すことができて、そのゲームの源となるものが望ましいです。そういわれても明確にこれだっ!と言えるコンセプトが考えれるか、ぼくは考えれませんでした。
どう考えていったかというと、既存のゲームに何か1つ要素をつけ足そうと考えました。その1つの要素を深めて深めて・・・を繰り返していると、
コンセプトがその1つの要素にいつの間にかなってました。
僕は、システムから考えていくのがほとんどなのでこういう風になりました。
世界観から入ると案外コンセプトがすぐ決まることもあるそうです。(うらやま
とまぁ、簡単に話しましたが、実際に作ってみるとほんとに時間がかかったので、
ある程度何個も何個も企画を考えていく必要があるなーと思いました。
はい、次回はちゃんとプログラミングのことを書くので許してください。
最後まで見てくれた方ありがとうございました。
初めまして。
訪問ありがとうございます。
どうも。べーやんでございます。
最近、少しずつ寒くなってきてようやく秋っぽくなってきましたね。
そんなことはさておいて・・・。
簡単に自己紹介を。。。
とある専門学校生で、プログラミングの勉強をしています。
現在触っているエンジン→UE4
主に使っているフレームワーク→cocos2d-x
言語はc++と、Javascriptを勉強しています。
好きなゲームのジャンル→FPS
codbo3,Distinyを主にやりこんでました。
今やってるゲーム→ペルソナ5
杏殿がかわいいっす。
まぁ、自己紹介はこの辺として。。。
これからの方針として、
記事は主にプログラム関係のことで記事にしていく予定です。
そして、いま進めているプロジェクトの進捗具合も報告できたらなと思います。
初心者なので、おかしい記述などは大目に見てあげてください。(笑)
あとこれは、ぼく個人としての目標なんですが、
「最低1週間に1回、進捗具合をブログに上げる」ことをここに誓います!
最後まで見てくださった方、ありがとうございます。