「Ethnic Picnic」紹介映像
ゲームのダウンロードはこちらから(Windows, Mac, Android)
ゲーム紹介
見知らぬ霧深き森で目覚めた女の子——
友達とピクニックをしていたはずなのに……
どこからか聴こえる、綺麗な笛の音色に誘われて進むと、そこにいたのは知らない音楽を奏でる女性だった。
「この音楽を友達に届ければ、元気になってくれるかもしれない」
元いた場所に帰るため、そして友達を笑顔にできる方法を探すため、音楽に触れながら世界を探険する物語。
「Ethnic Picnic」は、民族音楽をテーマとしたスマートフォン向けゲームです。
(より多くの方に体験頂くため、Windows版とMac版もご用意しております。)
主人公の女の子と、音を頼りに不思議な世界を探検し、主人公自ら民族音楽を奏でるゲームです。
実際に存在する民族楽器や音楽を体験できるストーリーや、音楽ゲーム、ミニゲームをご用意しております。
現在、第一弾として、アイルランドやスコットランド地方が発祥のケルト音楽をモチーフとしたステージを遊ぶことができます。(第二弾の制作は未定です。)
ゲームを進める上で、音が重要になるため有線ステレオイヤホンもしくは十分な音量を流せるステレオ環境が必要になります。Bluetooth接続のワイヤレスイヤホンは遅延が発生するため、推奨しておりません。
民族音楽について興味をもつきっかけになれれば幸いです。
「Ethnic Picnic」の魅力
多彩なオリジナルデザイン
ほぼ全てのデザインを1から制作。
絵本のようなタッチの鮮やかな世界をお楽しみください。
書き下ろされたオリジナルの民族音楽
ケルト地方の民謡2曲と、民族音楽を取り入れたオリジナル楽曲2曲の音源を制作。
バージョン違いを含めると約10パターンの楽曲を楽しむことができます。
どこかで聞いたことがある曲が聴けるかも……?
BGMサンプル「Kesh Jig」
状況に応じて変化するBGM(インタラクティブミュージック)
プレイヤーが取る行動によって、流れている音楽が少しづつ変化していきます。
ぜひ音楽にも耳を澄ませながら、ゲームを遊んでみてください。
ダウンロードリンク
ダウンロードはこちらから(Windows, Mac, Android)
インストール方法 / アンインストール方法(Windows, Mac)
インストール方法
ダウンロードリンク先から、「win」もしくは「mac」フォルダを、右クリックからダウンロード。
ダウンロードしたzipファイルを適当なフォルダに解凍する。
「EthnicPicnic_xx.x」を実行。
アンインストール方法
解凍したフォルダを削除。
(レジストリ等は変更していませんが、ローカルストレージにセーブデータ保存のためファイル書き込みを行っています。数byte程度の小さなファイルですが、気になる場合はゲーム内のメニューから、セーブデータ全消去を実行の上、アンインストールしてください。)
インストール方法 / アンインストール方法(Android)
インストール方法
ダウンロードリンクから「EthnicPicnic_xx.x.apk」ファイルをダウンロード。
Android内ストレージに移動(PCからダウンロードした場合)
Androidからapkファイルを実行し、アプリをインストールする。
アンインストール方法
通常のアプリと同様。
(ローカルストレージにセーブデータ保存のためファイル書き込みを行っています。数byte程度の小さなファイルですが、気になる場合はゲーム内のメニューから、セーブデータ全消去を実行の上、アンインストールしてください。)
操作方法・遊び方
移動:行きたい場所をタッチ(クリック)すると、自動で移動します。
音楽ゲーム:流れてきた丸に合わせて、画面をタッチまたは、表示されているキー(PCの場合)を押したり長押ししたりしてください。
音楽ゲームですべての譜面を遊ぶ方法:
右上のメニューを開き、歯車のアイコンをクリック、「すべてのアイテムを取得」ボタンを押すと、メニュー内の音楽タブからすべての譜面を遊ぶことができます。
制作目的
本ゲームは、ゲームを通して民族音楽に興味をもってもらうことを目的に制作しています。
BGMとして民族音楽を組み込むだけではなく、ストーリーに組み込むことで、ゲームを進めるだけで自然と民族音楽に触れる体験になる、といった考えの元、制作しました。
また、キャラクターが使用する民族楽器に合わせて、音楽を数パターン用意することで、楽器そのものの理解を深めることができるようになっています。
技術的工夫や解説
ゲーム開発にあたり、特筆すべき点やこだわった箇所、インターネット上にあまり情報がない事柄、その他Tipsなどの簡易的な解説です。細かい手順等の解説はできませんが、キーワード等を調べて頂くことで、ゲーム制作の助けになれば良いなと考えています。素人による解説のため、間違いがある場合があります。
本編のネタバレを含みますので、閲覧にはご注意ください。
以下解説です。ネタバレを含みます。
使用ソフトウェア・パッケージ
・ゲーム開発ソフトウェア:Unity 2021.3.19f1
・カメラシステム:Cinemachine(なめらかなカメラワーク実現のため)
・サウンドシステム:CRIWARE ADX LE(インタラクティブサウンド、Android低遅延再生のため)
・アニメーションツール:DOTween(スクリプト単位での細かいアニメーションのため)
・レンダリング:Universal Render Pipeline(HDRを用いた光表現を行うため)
・モデリング:Pro Builder(簡易的なモデリングを効率よく行うため)
・モデリング:Blender(頂点カラーを使用した軽量なモデルを制作するため)
・音楽ゲーム譜面制作:NoteEditor
・音楽制作
・DAW:Reaper
・主な使用音源
・総合音源:KOMPLETE 14 ULTIMATE
・A.Gt:Ample Guitar T III
・バウロン:Modest bodhrán 2
インタラクティブミュージックについて
ゲーム内の状況(例えばプレイヤーの位置)に合わせて、BGMをリアルタイムに変更すること。
音楽を楽器ごとやセクションごとに書き出し、CriwareのAtomCraftを用いて制御する。
インタラクティブに音量を操作する水平の演出(縦の遷移)と、タイミングを指定して音源を切り替える垂直による演出(横の遷移)の大きくわけて2パターンがある。
参考:水平の演出
参考:垂直の演出
ゲーム内では、主に霧が濃い森のシーンと、音楽ゲーム時に使用されている。
音楽ゲーム
水平で実現。
Perfect用音源、Great用音源をそれぞれ用意し、同時に再生している。
プレイヤーのノーツ判定(Perfect、Great、Miss)によって、主人公が演奏している楽器の再生ファイルを変更している。
Perfectであれば装飾音符など、テクニックを盛り込んだ演奏に、
Greatであれば通常の演奏に、
Missであれば無音に、
といった具合に変更している。
霧が濃い森のシーン
水平+垂直で実現。
あらかじめ設定されたパス(cinemachine)に沿って音源を移動させる。プレイヤーが近ければ進み、遠ければ戻る。パスの進行度によって各楽器のボリュームを操作している。
終点には楽器を演奏しているNPCがおり、話しかけると音楽的に破綻がないよう、適切なタイミングでエンディングフレーズが流れ、会話が始まる。
BGMには、そのままエンディングフレーズに移行して問題のないタイミングと、破綻するタイミングがある。セクションの区切りでエンディングに移行すれば、違和感は少ないが、最大16秒程度の待機時間が生まれてしまう。
そこで、パス終盤になると、エンディングに移行できるタイミングが多いCセクションをループさせることで、待機時間を最大3秒程度に抑えることを実現した。(プリエンディングと呼ばれるらしい。)
水平、垂直ともに使うため、おおよそ8トラック*8セクションの64個のファイルを生成し読み込んでいる。
揺れる草花について
専用のポリゴンを用意し、シェーダーグラフにて専用のシェーダーを自作することで実現。
Blenderにて、板ポリのQuadを制作、頂点カラーを用いて、上部2頂点のみ赤色に設定する。
(揺れる部分を赤色に設定。木のモデルデータに適応する場合は、葉先を赤色に)
色空間をLiner、頂点カラーを出力するオプションを有効にした上で書き出し、Unityに読み込む。
シェーダーグラフの頂点シェーダー部分にて、頂点カラーを取得し赤色であれば、三角関数を用いてx座標を揺らすシェーダーを作成。
Sprite Rendererに影を落とす、受け取る方法
インスペクタ上から、DebugModeを有効にすると当該設定が現れる。
Singletonパターン
今回の制作では、Singletonパターンとよばれるデザインパターンを多用した。
主にシーン内でただ一つのみ存在するManagerクラスに用いた。このようにすることで、例えば画面の暗転、音の再生、プレイヤーの表情の変更をどのクラスからも呼び出せるようになる。
ジェネリック型を使い、SingletonManager<自分自身の型>を継承することで汎用的に使えるようにしている。
public class SingletonMonoBehaviour<T> : CustomMono where T : MonoBehaviour
{
static T instance_;
public static T Instance
{
get
{
return instance_;
}
}
protected virtual void Awake()
{
if (instance_ == null)
{
instance_ = (T)FindObjectOfType(typeof(T));
}
else
{
Debug.LogWarning("既にコンポーネントが存在します。name:" + name, gameObject);
Destroy(gameObject);
}
}
private void OnDestroy()
{
Debug.Log("Singleton destroyed. name:" + name);
instance_ = null;
}
}
ただし、そのメリットの裏返しとして、どこからでもアクセスできるためデバッグが煩雑化することに加え、テスト運用との相性が悪い。そのため、本来は慎重に使うべきだが、一人で開発を行う分にはメリットのほうが大きいと判断した。
使用させていただいた外部アセット一覧
・フォント さなフォン丸
Heart To Me[沙奈]
https://hearttome.com/
・幻想的な蝶のパーティクル
ShimaeWorkShop
https://booth.pm/ja/items/3686261
・Fantasy Skybox FREE
Render Knight
・SE
Splice Sounds
・CRIWARE ADX LE
・DOTWeen
このソフトウェアには、(株)CRI・ミドルウェアの「CRIWARE」が使用されています。
また、本ゲーム内で使用されている民謡などの伝統楽曲は、著作権に問題がないことを確認しております。
コメント