どこここ|dokococo 2024/08/27 19:00

調べられる場所で!を出す方法

NPCの前に行くと「話す」と出たり、宝箱の前に行くと「調べる」と出る。
そんな、インタラクト可能な状態でヒントを出す方法をご紹介します。

イベントに話しかけられるか判定するスクリプト

以下のコードは、RPG Developer Bakinで「イベントに話しかけられる状態かどうか」を判定してくれるスクリプトです。とても便利なスクリプトなので、教えていただいたスマイルブームに感謝しつつ、ここで共有させていただきます。

Talkable.cs (3.32kB)

ダウンロード
using 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;
        }
    }
}

システム構築の流れ

  1. 上記より「Talkable.cs」をダウンロード
  2. Bakinで「C#プログラムの割り当て」から読み込む
  3. Pシートを作成しイベントコマンドを作成
  4. 専用のコモンイベントを作成
  5. 表示させる内容などは自由に設定

システムの仕組みやイベントの組み方などは、Youtubeの動画で詳しく解説しています。
https://youtu.be/lpIgJ-5vpvg

イベントの組み方

イベントのPシートは以下のように組んでください。「文字列変数への代入」「イメージとして画面に文字を表示する」の部分は、お好きなようにカスタム可能です。

通常のイベントシートは、人なら会話コマンド、宝箱ならアイテムを入手するイベントなど、通常通りのイベントコマンドを書きますが、2つのコモンイベントでそれらを囲むように作成します。

「ヒント無効化」のコモンイベントを作成します(0秒ウェイトがないと、無効化前の最後のPシート処理が動いてしまいます)。

続いて「ヒント有効化」のコモンイベントを作成します。

最後に3つ目のコモンイベントとして「初期設定」を作ります。ここで「N:ヒント有効」をONにすれば完成です。

一度この処理を作ってしまえば、あとはキャストに登録しても使えますし、イベントをコピーしても正常に動作します。少しでも皆様のゲーム制作にお役に立てれば幸いです。

この記事が良かったらチップを贈って支援しましょう!

チップを贈るにはユーザー登録が必要です。チップについてはこちら

記事のタグから探す

月別アーカイブ

限定特典から探す

記事を検索