調べられる場所で!を出す方法
NPCの前に行くと「話す」と出たり、宝箱の前に行くと「調べる」と出る。
そんな、インタラクト可能な状態でヒントを出す方法をご紹介します。
イベントに話しかけられるか判定するスクリプト
以下のコードは、RPG Developer Bakinで「イベントに話しかけられる状態かどうか」を判定してくれるスクリプトです。とても便利なスクリプトなので、教えていただいたスマイルブームに感謝しつつ、ここで共有させていただきます。
Talkable.cs (3.32kB)
Downloadusing System;
using Yukar.Engine;
namespace Bakin
{
public class Talkable : BakinObject
{
public override void Start()
{
// キャラクターが生成される時に、このメソッドがコールされます。
// This method is called when the character is created.
}
[BakinFunction(Description = "このイベントに話しかけられる = 1 / 話しかけられない = 0")]
public int GetTalkableForThis()
{
// 現在選ばれているシートを取得
var scriptGuid = mapChr.getCurrentSheet()?.script ?? Guid.Empty;
var script = catalog.getItemFromGuid(scriptGuid) as Yukar.Common.Rom.Script;
// 成立しているシートなし
if (script == null)
return 0;
// 話しかけられるイベントでも、中身が空っぽだったら無視
if (script.commands.Count == 0)
return 0;
// 話しかけられる位置にいれば1を返す
if (mapScene.hero.collisionStatus.talkableChrList.Contains(mapChr) && script.trigger == Yukar.Common.Rom.Script.Trigger.TALK)
return 1;
return 0;
}
public override void Update()
{
// キャラクターが生存している間、
// 毎フレームこのキャラクターのアップデート前にこのメソッドがコールされます。
// This method is called every frame before this character updates while the character is alive.
}
public override void FixedUpdate()
{
// キャラクターが生存している間、
// 物理エンジンのアップデートに同期してこのメソッドが毎秒必ず60回コールされます。
// This method will be called 60 times every second, synchronously with physics engine updates while the character is alive.
}
public override void BeforeUpdate()
{
// キャラクターが生存している間、
// 毎フレーム、イベント内容の実行前にこのメソッドがコールされます。
// This method will be called every frame while the character is alive, before the event content is executed.
}
public override void Destroy()
{
// キャラクターが破棄される時に、このメソッドがコールされます。
// This method is called when the character is destroyed.
}
public override void AfterDraw()
{
// このフレームの2D描画処理の最後に、このメソッドがコールされます。
// This method is called at the end of the 2D drawing process for this frame.
}
[BakinFunction(Description="説明文 / Description")]
public float Func(float attr)
{
// [BakinFunction] を付与したメソッドはイベントパネル「C#プログラムの呼び出し」からコールできます。int/float/string の戻り値および引数を一つまで取ることができます。
// One of the methods with [BakinFunction] can be called from the event panel "Calling C# Programs". Up to one int/float/string return value and parameter can be used.
return 0;
}
}
}
システム構築の流れ
- 上記より「Talkable.cs」をダウンロード
- Bakinで「C#プログラムの割り当て」から読み込む
- Pシートを作成しイベントコマンドを作成
- 専用のコモンイベントを作成
- 表示させる内容などは自由に設定
システムの仕組みやイベントの組み方などは、Youtubeの動画で詳しく解説しています。
https://youtu.be/lpIgJ-5vpvg
イベントの組み方
イベントのPシートは以下のように組んでください。「文字列変数への代入」と「イメージとして画面に文字を表示する」の部分は、お好きなようにカスタム可能です。
通常のイベントシートは、人なら会話コマンド、宝箱ならアイテムを入手するイベントなど、通常通りのイベントコマンドを書きますが、2つのコモンイベントでそれらを囲むように作成します。
「ヒント無効化」のコモンイベントを作成します(0秒ウェイトがないと、無効化前の最後のPシート処理が動いてしまいます)。
続いて「ヒント有効化」のコモンイベントを作成します。
最後に3つ目のコモンイベントとして「初期設定」を作ります。ここで「N:ヒント有効」をONにすれば完成です。
一度この処理を作ってしまえば、あとはキャストに登録しても使えますし、イベントをコピーしても正常に動作します。少しでも皆様のゲーム制作にお役に立てれば幸いです。