コンテンツにスキップ

スタートガイド ​

前提条件 ​

Naninovelは Unityゲームエンジン ↗ の拡張機能です。使い始める前に、少なくともUnityの 基本を学ぶ ↗ ことを強くお勧めします。

Naninovel以外でカスタムゲームプレイを実装する予定がなければ、シーンに関する説明は読み飛ばしてかまいません。シーンの処理はNaninovelが自動的に行います。

ビデオガイド ​

動画で学びたい方は、このスタートガイドの内容を解説するビデオチュートリアルをご覧ください。

cover

Unityプロジェクトの作成 ​

プロジェクトを作成する際は、Universal Render Pipeline(URP)に基づくUniversal 2DまたはUniversal 3Dテンプレートをお勧めします。従来の組み込みレンダーパイプライン(BiRP)でも動作しますが、Unityによる積極的なメンテナンスは行われなくなっており、今後は非推奨になる見込みです。High Definition Render Pipeline(HDRP)はお勧めしません。おおむね動作するものの、一部のレンダリング機能はそのままでは対応しない場合があります。

2Dと3Dのどちらを選ぶかは、作りたいゲームのスタイルによって異なります。一般的なビジュアルノベルの多くでは、2Dをお勧めします。画像がデフォルトでスプライトアセットとしてインポートされるため、インポート設定を手動で調整する必要がありません。エディターの動作モードは、後から プロジェクト設定 ↗ で変更できます。

cover

新しいプロジェクトを作成すると、Unityは「Main Camera」と、テンプレートに応じてその他のさまざまなゲームオブジェクトを含むサンプルシーンを自動的に追加します。

cover

Naninovelはシーンに依存しません。不要なパフォーマンスのオーバーヘッドやNaninovelシステムとの競合を防ぐため、これらのオブジェクトをシーンから削除することをお勧めします。サンプルシーン自体も削除できますが、一部のエディター機能を正しく動作させるため、プロジェクト内には少なくとも1つのシーンを残しておくことをお勧めします。

エディターの最適化 ​

注意

この手順はオプションであり、Naninovelを使用するために必須ではありません。Unityエディターのパフォーマンスを向上させることのみを目的としています。プロジェクトに必要なパッケージやモジュールが不明な場合は、スキップしてください。

Unityプロジェクトのルートにある「Packages」フォルダーを開き、manifest.json ファイルを確認してください。インストール済みのパッケージとモジュールが一覧で記載されています。そのすべてが必要とは限りませんが、いずれもエディターの動作を遅くする可能性があります。Naninovelに必要なパッケージとモジュールは以下のとおりです。これら以外で不要なものは、削除を検討してください。

com.unity.modules.audio
com.unity.modules.video
com.unity.modules.imgui
com.unity.modules.animation
com.unity.modules.particlesystem
com.unity.modules.imageconversion
com.unity.render-pipelines.universal
com.unity.inputsystem
com.unity.ugui

VCSのセットアップ ​

Gitなどのバージョン管理システムを使用している場合は、不要な変更を追跡しないよう、以下のパスを管理対象から除外することを検討してください。

asm
# 自動生成される一時的なUnityアセット。
/Assets/NaninovelData/Transient*
# 外部ツールの一時的な成果物。
/Assets/NaninovelData/.nani/Transient*

Assets/NaninovelData は自動生成されるフォルダーです。生成後は、名前を変更したり、「Assets」内の任意のフォルダーへ移動したりしても、Naninovelは引き続き認識できます。名前や場所を変更した場合は、上記の除外パスもそれに合わせて更新してください。

例

Gitの除外設定の例は、サンプルプロジェクト の .gitignore ↗ で確認できます。このプロジェクトでは、整理しやすいように「NaninovelData」フォルダーを「Naninovel」に改名し、Assets/Settings の下に移動しています。自分のプロジェクトでも同様に移動できます。

Naninovelのインストール ​

リリースストリーム ​

Naninovelは、preview、stable、final の3つのリリースストリームで配布されています。

Previewストリームは最先端です。最も頻繁に更新され、すべての最新機能を備えています。ただし、時折互換性を損なう変更やバグが発生する可能性があります。開発の初期段階にある場合や、他のリリースでは利用できない特定の機能が必要な場合は、このストリームを選択してください。

Stableストリームは中間の選択肢です。バグ修正のみが提供され、最新機能は含まれませんが、互換性を損なう変更もありません。ほとんどの場合に推奨されます。

Finalストリームは、最も多くのテストを経ており、安定性も最も高いものの、最も古く、技術サポート の対象外です。最終リリースを使い続けるのは、プロジェクトがすでにリリースされていて、アップグレードできない場合のみにしてください。

cover

StableストリームはGitHubとUnityのアセットストアの両方で公開されますが(アセットストアでの公開はGitHubほど頻繁ではありません)、PreviewとFinalストリームはGitHubでのみ入手できます。

アセットストアからインストール ​

Naninovelをインストールする最も簡単な方法は、Unity Package Manager(UPM)の「My Assets」タブを使用することです。Package Managerウィンドウを開き、Naninovelを見つけて「Install」をクリックします。

cover

UPMの使用方法の詳細については、Unityドキュメント ↗ を参照してください。

GitHubからインストール ​

PreviewおよびStableストリームの最新のNaninovelリリースは、Naninovel GitHubリポジトリ経由で配布されています。リポジトリにアクセスするには、Naninovelライセンスを登録 ↗ し、ダッシュボードの指示に従ってGitHubユーザーを割り当ててください。

リポジトリへのアクセス権を取得したら、UnityのPackage Manager経由で https://github.com/naninovel/upm.git#X.X をGitパッケージとして追加します。ここで X.X はインストールするリリースバージョンです。例:

https://github.com/naninovel/upm.git#1.22

利用可能なすべてのリリースとそのGit URIは、リリースページ ↗ で確認できます。

cover

このインストール方法は、Previewストリームの最新バージョンを使い続けたい場合や、StableストリームのパッチをGitHubリポジトリにプッシュされた直後に入手したい場合に特に便利です。Package Managerウィンドウで「Update」をクリックするだけで、インストール済みのパッケージを最新のコミットに更新できます。

cover

ヒント

パッケージのインストール中にエラーが発生した場合は、アカウントダッシュボードで割り当てられたGitHubユーザーとして認証されていることを確認してください。Windowsで認証する最も簡単な方法は、GitHub Desktop ↗ でサインインすることです。macOSおよびLinuxでは、代わりに GCM ↗ を使用してください。詳細 ↗ については、Unityのガイドを参照してください。

アーカイブからインストール ​

Naninovelをインストールするもう一つの方法は、ダウンロードアーカイブ ↗ からパッケージをダウンロードすることです。この方法は、アセットストアで配布されなくなった特定の最終リリースが必要な場合に便利です。アーカイブには、バージョン1.14から現在の安定リリースまでのすべてのレガシーバージョンの最終リリースが含まれています。

ダウンロードした .unitypackage ファイルをUnityエディターウィンドウにドロップし、「Import」をクリックしてパッケージをインストールするだけです。ローカルパッケージのインストールに関する詳細情報は、Unityドキュメント ↗ で確認できます。

コアコンセプト ​

Naninovelの使い方を詳しく見ていく前に、基本となる概念をいくつか確認しましょう。

この先のガイドで繰り返し登場する重要な概念が、アクターです。アクターとは、識別子(ID)や外観、空間(シーン)内の位置などのパラメーターで表される要素です。

アクターは抽象的な概念で、そのままの形では存在しません。実際に使用するのは、さまざまな追加パラメーターを備えた以下の専用タイプです。

アクタータイプ追加パラメーター説明
キャラクター視線方向シーン内のキャラクターを表します。
背景なしシーン内の背景を表します。デフォルトではキャラクターアクターの後ろに配置されます。
テキストプリンターテキスト、話者ID、表示進行度時間の経過とともにテキストメッセージを徐々に表示します。
選択肢ハンドラー選択肢プレイヤーが利用可能な選択肢の1つを選択できるようにします。

背景の手前にキャラクターが表示される、ビジュアルノベルの典型的な場面を考えてみましょう。Naninovelの用語で表すと、次のようになります。

cover

キャラクター「Kohaku」の感情やポーズを変える場合を考えてみましょう。異なる状態を描いたキャラクターのテクスチャ(画像)が複数あるとします。Naninovelでは、このようなテクスチャをアクターの外観と呼びます。表示を切り替えるには、そのキャラクターアクターの外観を変更します。同様に、「MainBackground」に別のものを表示させるには、その背景アクターの外観を変更します。

アクターとそのパラメーターは、シナリオスクリプト で指定されたコマンドによって制御されます。

もう1つ、よく使われる概念に ユーザーインターフェース(UI)があります。プレイヤーはUIを使って、アクターやゲームの他の部分を操作します。タイトル、セーブ・ロード、設定などのメニューや、オートプレイモードの切り替え、テキストのスキップなどを行うコントロールパネルがこれに当たります。UI要素は、デフォルトでアクターの手前に配置されます。

テキストプリンターと選択肢ハンドラーは、アクターでもあり、UI要素でもあります。アクターとしての性質を備え、シナリオスクリプトで制御できると同時に、プレイヤーがゲームを操作するためのUIとしても使われます。

cover

プログラミングに慣れている方は、エンジンアーキテクチャ をご覧ください。ソフトウェアエンジニアリングの観点から、Naninovelの設計を理解できます。

最初の一歩 ​

Naninovelの初回インストール時に、いくつかのサンプルスクリプトが Assets/Scenario フォルダーに自動生成され、ストーリーエディター タブが自動的に開きます。ストーリーエディターの上部にある「Play」ボタンをクリックして、プレイモードに入ります。

cover

Unityエディターがプレイモードになり、デフォルトのタイトルUIが表示されます。同時に、Title シナリオスクリプトがストーリーエディターで開き、現在再生中であることが示されます。

cover

ストーリーエディターをいろいろ操作し、スクリプトも編集してみてください。変更はその場で反映されます。サンプルスクリプトのコメントには、その近くにあるコマンドの簡単な説明があるので、目を通してみましょう。タイトルUIで「NEW GAME」をクリックすると、追加の例が書かれた Entry スクリプトに進みます。

シナリオスクリプトの追加 ​

基本的な流れが分かったところで、ゲームに実際のコンテンツを追加してみましょう。Naninovelでストーリーを動かす中心となるアセットを、シナリオスクリプトと呼びます。

すでに2つのスクリプトが自動生成されていますが、ここでは新しく追加する方法を学びましょう。ストーリーエディター でもスクリプトを管理できますが、まずはUnityの標準的な手順で進めます。ストーリーエディターでの操作方法は、専用ガイドで確認できます。

まず、「Stop」ボタンをクリックしてプレイモードを終了します。原則として、アセットの追加や削除、プロジェクト設定の調整など、プロジェクト単位の変更は、Unityのプレイモードを終了してから行ってください。

サンプルスクリプトと一緒に自動生成された Assets/Scenario フォルダーを開きます。これがシナリオルート、つまりすべてのNaninovelシナリオスクリプトを保存する起点となるフォルダーです。このフォルダー内で右クリックし、Create -> Naninovel -> Scenario Script を選択して、新しいシナリオスクリプト Test.nani を作成します。

cover

注意

シナリオスクリプト(およびその他のアセット)の保存先には、プロジェクト内の任意のフォルダーを選べます。整理方法や名前も自由です。ただし、すべてのシナリオスクリプトは、Unityプロジェクト内の1つの共通ルートディレクトリにまとめる必要があります。その配下であれば、整理のためにサブフォルダーをいくつ作成しても、何階層に分けてもかまいません。

警告

Unityは「Resources」という名前のフォルダーを特別扱いし、その配下のアセットを強制的にビルドへ含めます。これにより、パフォーマンスの問題 ↗ が生じる可能性があります。特に、ガイドで明示的に指示されていない限り、Resources/Naninovel フォルダーの下には決して何も保存しないでください。さまざまな競合や未定義の動作を引き起こす可能性があります。

シナリオスクリプトは .nani 拡張子を持つテキストドキュメントで、Naninovelの脚本言語である NaniScript を使用してシーンで何が起こるかを制御します。Microsoft Wordや VS Code など、任意のテキストエディターまたはコードエディターでスクリプトファイルを開いて編集できます。

cover
cover

ストーリーエディター も、シナリオファイルには同じNaniScriptを出力するため、コードエディターと自由に併用できます。以降はコードエディターを使う前提でスクリプトの例を示しますが、ストーリーエディターでも同じ手順で進められます。行タイプのドロップダウンリストに @ から入力し始めると、入力に一致するコマンドが表示されます。

cover

作成した Test.nani スクリプトを開き、次の行を追加します。

nani
こんにちは、世界!

— この行は、実行されると「こんにちは、世界!」と表示します。

次に、Entry.nani スクリプトを開き、最後の @title コマンドを次のように置き換えます。

nani
@goto Test

— このコマンドは、タイトルメニューに戻るのではなく、新しい Test.nani スクリプトに再生を移動します。

プレイモードに入り、新しいゲームを開始し、「こんにちは、世界!」が表示されるまでプレイします。ゲームのプレイ中にスクリプトを編集してみてください。変更はすぐに適用されます。

ヒント

標準のNaniScriptコマンドとその使用例は、APIリファレンス に記載されています。カスタムコマンドを追加することも可能です。詳細については ガイド を参照してください。

キャラクターの追加 ​

シナリオスクリプトを追加したときと同じメニューを開き、今度は Create -> Naninovel -> Actor Record -> Character を選択します。新しいキャラクターのアクター構成を保存するキャラクターレコードアセットが作成されるので、K と名付けましょう。K という短い識別子を使うのは、シナリオスクリプトの随所でフルネームを繰り返し入力する手間を省くためです。ゲーム内でプレイヤーに表示する実際の名前「Kohaku」は、レコードアセットの Display Name で設定できます。

cover

もちろん、キャラクターには任意の識別子と表示名を使用できます。IDに空白や特殊文字が含まれていないことだけを確認してください。一方、表示名には空白や任意の特殊文字を含めることができます。

ヒント

構成メニューには多くのオプションがあります。他のUnityメニューと同様に、ほとんどのコントロールには、機能を説明するツールチップが用意されています。コントロールにマウスカーソルを合わせて少し待つと、カーソルの下に説明が表示されます。

次に、アクターの実装を選びます。Naninovelのキャラクターは、通常のスプライトやダイススプライト、アニメーション付きのLive2DやSpineモデル、3Dメッシュなど、さまざまな種類のアセットで表現できます。独自の実装も追加できます。このチュートリアルでは、2Dテクスチャアセット(画像)を使うスプライト実装を選びます。

cover

最後に、外観を割り当てます。キャラクターレコードのあるフォルダーにテクスチャをドロップし、そのテクスチャを選択します。インスペクターのヘッダーの下にあるNaninovelアイコンをクリックし、Characters -> K を選択してください。

cover

@char コマンドを使用して、追加されたキャラクターを表示するようにシナリオスクリプトを変更します。

nani
@char K
こんにちは、世界!

画面の中央にキャラクターが表示されます。外観を指定しない場合は、「Default」という名前の外観が自動的に選択されます。別の外観を指定するには、次のようにキャラクターIDの後ろにドットを付け、その後に外観名を続けます。

nani
@char K.Happy
こんにちは、世界!

キャラクター「K」に「Happy」という名前の外観が追加されている場合、デフォルトの代わりにそのスプライトが表示されます。

テキストの前にキャラクターのIDとコロンを追加することで、表示されるテキストをそのキャラクターに関連付けることができます。

nani
@char K.Happy
K: こんにちは、世界!
cover

キャラクターの外観指定と表示するテキストを1行にまとめると、入力の手間を減らせます。

nani
K.Happy: こんにちは、世界!

キャラクターを非表示にするには、@hide コマンドの後にアクターIDを続けます。

nani
@hide K

背景の追加 ​

キャラクターと同様に、背景もNaninovelではスプライト、ビデオ、シーンなど複数の方法で表現できます。カスタム実装も可能です。

独立した背景アクターを複数作成することもできますが、一般的なビジュアルノベルでは、通常1つの背景アクターの外観を切り替えて使います。この操作を簡単にするため、背景を制御する @back コマンドは、デフォルトでIDが MainBackground の背景アクターを対象とします。

nani
@back Road

— このコマンドは、MainBackground アクターを Road の外観に遷移させます。

キャラクターと同様に、背景アクターレコードを作成し、外観スプライトを割り当てます。

  • 背景を保存するフォルダー(たとえば Assets/Backgrounds)を作成します
  • フォルダーを右クリックし、Create -> Naninovel -> Actor Record -> Background を選択して MainBackground レコードを作成します
  • レコードをインスペクターで開き、実装(たとえば SpriteBackground)を選択します
  • 外観リソースを割り当てます
cover

背景の外観を切り替える際、デフォルトでクロスフェード トランジションエフェクト が使用されます。エフェクトを変更するには、外観名の後にトランジションタイプを指定します。

nani
@back Road
@back Ruins.RadialBlur

これにより、「RadialBlur」トランジションエフェクトを使用して「Road」から「Ruins」に遷移します。

メイン以外の背景を参照するには(たとえば、複数の背景を重ねて構成したい場合)、アクターのIDを指定します。たとえば、Flower IDを持つ背景アクターがメインの背景とは別に存在する場合、次のコマンドはその外観を「Bloomed」に変更し、次に「Withered」に変更します。

nani
@back Bloomed id:Flower
@back Withered id:Flower

背景も同じ @hide コマンドで非表示にします。

nani
@hide Flower

オーディオの追加 ​

BGM(背景音楽)またはSFX(効果音)のオーディオリソースをNaninovelに登録するには、まずオーディオクリップアセットを選択します。キャラクターや背景のリソースを登録したときと同じインスペクターメニューを開き、今回は「BGM」または「SFX」を選択します。

cover

登録されたオーディオリソースを背景音楽として再生するには、@bgm コマンドを使用します。

nani
@bgm CloudNine

音楽トラックを切り替えると、自動的にクロスフェード効果が適用されます。音楽はデフォルトでループ再生されます。ループの有無、音量、フェード時間は、コマンドのパラメーターで変更できます。

対照的に、効果音はデフォルトではループしません。@sfx コマンドで再生します。

nani
@sfx Explosion

再生中のBGMまたはSFXを停止するには、それぞれ @stopBgm および @stopSfx コマンドを使用します。

nani
@stopBgm CloudNine
@stopSfx Explosion

リソースの管理 ​

登録されているすべてのリソースに加え、アクターやその他のエンジンオプションも、プロジェクト設定ウィンドウのNaninovelタブで確認できます。Naninovel -> Configuration エディターメニューを使用すると、構成にすばやくアクセスできます。

cover

リソースパスはデフォルトではアセット名と同じですが、整理しやすいように自由に変更できます。シナリオスクリプトでリソースを参照する際は、この登録済みのパスを使います。たとえば、効果音 Explosion のパスを Battle/Explosion に変更したら、再生時にも新しいパスを指定します。

nani
@sfx Battle/Explosion

リソースを追加または変更すると、その内容がストーリーエディターとVS Code拡張機能の両方に自動的に同期され、関連するリストが更新されます。

cover

ヒント

アセットの整理方法や最終ビルドでのバンドル方法を最大限に制御するには、Unityの Addressablesパッケージ ↗ のインストールを検討してください。Naninovelはパッケージと自動的に統合されます。

ダイアログモード ​

Naninovelは主にビジュアルノベル制作の基盤として設計されていますが、あらゆるジャンルのゲームに組み込むダイアログシステムやカットシーンシステム(ドロップイン)としても使用できます。

このような組み込み用途に合わせてエンジンを手動で構成することもできますが、専用の「Minimal Mode」スイッチも用意されています。このスイッチは構成を自動的に変更し、ほとんどの組み込みUIの削除や機能の無効化を行って、エンジンを必要最小限の状態にします。

Naninovel -> Set Up Minimal Mode UnityエディターメニューからMinimal Modeを有効にします。

cover

警告

Minimal Modeをセットアップすると、エンジンのデフォルト構成とリソースが変更されます。変更を自動的に元に戻すことはできません。このモードを有効にするのは、新しいプロジェクトを開始し、Naninovelをビジュアルノベルエンジンではなく、組み込み型のダイアログシステムとして使用する場合のみとしてください。

ガイドの「アドバンスド」セクションでは、既存のコードベースにエンジンを統合するためのC#での処理を詳しく説明しています。ここでは、コードを書かずに作れる簡単なダイアログ操作を紹介します。プレイヤーが操作可能なオブジェクトにマウスを合わせ、クリックするとダイアログが始まる仕組みです。空のシーンに、以下を追加してください。

  • Event / Event System コンポーネントを持つオブジェクト
    • Actions Asset として Naninovel/Resources/Naninovel/Input/DefaultControls を割り当てます
  • Event / Physics Raycaster コンポーネントを持つカメラオブジェクト
  • ダイアログトリガーとして機能するキューブ
    • キューブにアタッチされているデフォルトのコライダーコンポーネントを削除します

キューブを右クリックし、Naninovel -> Dialogue を選択すると、そのオブジェクトにダイアログトリガーが自動的に設定されます。キューブの子として作成された Dialogue オブジェクトをインスペクターで開き、再生するシナリオスクリプトアセットを割り当てます。

次に、Dialogue/Trigger オブジェクトでトリガー条件を設定します。

  • Collide With と Raycast From を「None」に設定
  • Perform Input をNaninovel入力アクションアセットの UI/Click アクションに設定
  • Hover With Pointer を有効化
cover

プレイモードに入り、キューブにマウスを合わせます。マウスカーソルが上にあるとプロンプトが反応します。左クリックしてダイアログを開始します。ダイアログを終了するには、@exitDialogue コマンドを使用します。

Trigger Events コンポーネントには多くのオプションがあり、調整するだけで一般的なインタラクションのほとんどを設定できます。たとえば、一人称視点で一定の距離から注視する、横スクロール視点で衝突する、三人称視点でポインターを合わせてからキーを押す、といった操作に対応できます。各オプションの働きは、ツールチップで確認してください。

デモサンプル ​

Naninovelパッケージには、2つの基本的なサンプルが含まれています。

  • Visual Novel — 複数のルートを持つ基本的なビジュアルノベルテンプレート。プレースホルダーアクター、さまざまなコマンド、通常変数とメタ変数、カスタマイズ可能なキャラクター名、その他の従来のVNメカニクスの使用例を示します。
  • Dialogue System — Naninovelを組み込み型のダイアログシステムとして使用する3D横スクロールシーン。一時的なプリンター、バブル選択肢ハンドラー、Cinemachineとの統合など、一般的な使い方を紹介します。

両方のサンプルはUnity Package Managerからインポートできます。Naninovelパッケージを選択して「Samples」タブを開き、各サンプルの「Import」ボタンをクリックしてください。

cover

より高度な例を探すには、サンプルプロジェクト をご覧ください。Live2DおよびSpineキャラクター、カスタムアクターシェーダー、インタラクティブマップ、ビデオアクター、カレンダーおよびインベントリのカスタムUIなど、用途に特化した多くのサンプルが含まれています。