Unity用ノベルゲーム制作支援パッケージです。
UniTaskを採用し、簡潔な命令で簡単にノベルゲームが制作できます。
ベースにUnityエンジンを用いているので、強力な拡張表現が可能になります。
現在、鋭意製作中です。
自身が代表を務めるサークルFThingSoftwareにて、発表するノベルゲームに利用しています。

パッケージ使用例

GitHubリポジトリ

https://github.com/AmanatsuTouko/InFunityScript

担当

設計・コーディング

制作期間/使用したツールなど

製作期間:2023年1月~
使用ツール:Unity, UniTask(UnityPackage)

ノベルゲーム制作支援ツールとして目指す場所

現状のノベルゲーム制作ツールは、二極化しています。
プログラミング初心者が使いやすいようにビジュアルプログラミングを用いたツールと、
プログラミング中上級者が使いやすいUnityなどのゲームエンジンを用いて作る方法の2つです。

しかし、初心者向けの簡単なツールでは、ツールの想定されていない凝った表現をしようとすると
プログラミングの難易度が跳ね上がる傾向にあります。

そこで、あらかじめベースとなるシステムを組み込んだパッケージを用いて
初心者がUnityで開発することで、プログラミングの敷居を下げることが本ツールの目的です。
ノベルゲーム開発において、初心者にとって難しい
セーブロードなどの処理を本ツールが肩代わりします。

また、Unityという強力なゲームエンジンをベースに置くことで、
一般的なノベルゲーム制作ツールを超えた演出表現が可能になります。

工夫・苦労した点

◆ゲーム支援ツールとして使いやすいツール

ゲーム支援ツールとして使いやすいツールを目標に据えています。
シナリオ演出命令の入力補完が効くようにしたり、
ワンクリックでシナリオを記述するC#ファイルを作成できたり、
Call、CallBackを用いてシナリオファイルを適切に分割できるようになどしています。

◆セーブロードを実装する

ノベルゲームである以上、プレイヤーが好きなタイミングでセーブできなければなりません。
実行している行番号を把握してセーブし、
ロードした行番号を参照してゲームを再開できるようにしました。

内部処理としては、シナリオの演出に用いる命令(関数)は、同期処理として実装し
1行実行するたびにカウンタを増加させて今どの処理まで実行したかを記録しています。
ロードの際には、読み出したカウンタまでシナリオ記述に用いる命令を実行しないことで
セーブした箇所まで戻れるようにしています。

セーブデータはjsonファイルとして、
ゲームを実行しているPCのローカルフォルダに保存できるようにしました。

◆UniTaskの導入

開発初期では、シナリオ命令(関数)の記述にコルーチンを用いていました。
コルーチンでは、実行元に戻る際に yield return null; と記述すると
1フレーム使用するUnity側の仕様があります。
しかし、この仕様ではロード処理のセーブした箇所まで復帰する際に、
シナリオ命令が100行ある場合には、100フレーム時間がかかってしまいます。

そこで、同期処理の機構としてUniTaskを用いることでこの問題を解決しました。
UniTaskでは、実行元に await で戻る際に、1フレームを消費することはありません。
また、UniTaskを用いることで、シナリオ命令をより簡潔に記述できるようになりました。

URL

InFunityScript-Sample Download - GoogleDrive 本ツールを使用して制作したサンプルゲームです。

関連記事