Fungusを改造してみる。
これはなに?
Unityで会話イベントなどを実装するFungusを自作のインディゲーに導入・改造することにしたので、そこで実際に行った改造や実装例のまとめです。
現在進行系で開発中なのでちょっとづつ更新されていきます。
実装例は必ずしもベストプラクティスではないので参考程度に……。
UIの刷新
ちょっとシャレオツな感じに。
SayDialog.Prefabの中身は素のUnityUIなのでテクスチャ差し替えるなどでざっくり編集。
メニューもいい感じに。こちらはAnimatorとEventTriggerのよくある組み合わせ。
ハンバーガーメニューにマウスオーバーすると開くように実装。
実際のセーブ画面、設定画面の作り方は後日...
コマンドで調整可能な心拍数の表現を追加
(無理やり容量に収めたのでガッビガビ)
キャラクターの発言や心情に連動して、キャラの背後を明滅させる処理です。
1.シェーダーの実装
ASEでこんな感じのシェーダーを作ります。
ざっくりいうと、Time→BlinkRate→Sinで作った値をキャラの背景画像に乗算して明滅スピードを調整できるようにしてあります。
(BackIntensityでAlphaを乗算調整することでテクスチャの階調がガビガビにならないっていうライフハック)
シェーダータイプはUI/Defaultにしてください。
2.コマンドの実装
コード全文
// This code is part of the Fungus library (https://github.com/snozbot/fungus)
// It is released for free under the MIT open source license (https://github.com/snozbot/fungus/blob/master/LICENSE)
using UnityEngine;
namespace Fungus
{
/// <summary>
/// Sets a custom say dialog to use when displaying story text.
/// </summary>
[CommandInfo("Material",
"SetBlink",
"心拍数を倍率で設定します")]
[AddComponentMenu("")]
public class SetBlink : Command
{
[Tooltip("心拍数を倍率で設定します、1が基準で、2だと2倍速")]
[SerializeField] protected Material BlinkMaterial;
[SerializeField] protected float BlinkRate = 1.0f;
#region Public members
public override void OnEnter()
{
if (BlinkMaterial != null)
{
BlinkMaterial.SetFloat("_BlinkRate", BlinkRate);
}
Continue();
}
#endregion
}
}
Fungusのコマンドから心拍数を設定できるようにします。
実装については上記記事が参考になります。
今回はAssets/Fungus/Scripts/Commands/Label.cs あたりを複製して書き換えました。
3.マテリアルを設定する
SayDialog/Panel/Image のImageコンポーネントに1で作ったシェーダーを設定、画像のような感じで設定します。MaintexにはFungus君がキャラクターの立ち絵を設定してくれるので未設定でOK。(正確にはFungus君と違うけど)
4.コマンドを設定する
任意のフローチャートのCommandsに、2で作ったコマンドを+マークから追加。画像のように設定します。
BlinkMaterialには↑で作ったマテリアルを設定します。
5.完成
心拍数を変えたい場合は都度、4でやったようにコマンドを追加していきます。
同じ要領で明滅の色を変えるとかもできそう。
掲載しているコードなどは特記のない限り自由に使用していただいてOKです。
フリーのBLゲームを制作しています。
ご興味ある方は是非Follow Me!!
Next
セーブ・ロード画面をつくる
設定画面をつくる→テクストページ送りの設定について追記する
Discussion