ものづくりのブログ

うちのネコを題材にしたものづくりができたらいいなと思っていろいろ奮闘してます。

【Unityで2DRPG】 猫の冒険 NPCに話しかけると驚く機能を実装

Unity で 2DRPG 作りに奮闘してます。
今回は NPC との会話を盛り上げてみたくなったので、会話中に驚くという機能を追加してみました。

やりたいこと

  • 会話の中に[{effect-shake}]という文字列があった場合NPCを驚かせる。

実装したこと

揺らすスクリプト作成

以下のサイトを参考にNPCを揺らすスクリプトを作成します。
baba-s.hatenablog.com
そのままつかわせていただきました。

using System.Collections;
using UnityEngine;

public class CameraShake : MonoBehaviour
{
    public void Shake( float duration, float magnitude )
    {
        StartCoroutine( DoShake( duration, magnitude ) );
    }

    private IEnumerator DoShake( float duration, float magnitude )
    {
        
        var pos = transform.localPosition;

        var elapsed = 0f;

        while ( elapsed < duration )
        {
            var x = pos.x + Random.Range( -1f, 1f ) * magnitude;
            var y = pos.y + Random.Range( -1f, 1f ) * magnitude;

            transform.localPosition = new Vector3( x, y, pos.z );

            elapsed += Time.deltaTime;

            yield return null;
        }

        transform.localPosition = pos;
    }
}
メッセージ表示用スクリプトにShakeチェック関数追加
  • 揺らすスクリプトを読み込み
  • チェック関数を読み出す部分を追加
  • メッセージ表示用スクリプトから揺らすスクリプトが読み出せるように関数を追加

会話中に[{effect-shake}]があればトリミングします。

    public CameraShake shake;
    ・
    ・
    ・
    checkIfEffect();
    ・
    ・
    ・
    public void checkIfEffect(){
        if(dialogLines[currentLine].StartsWith("{effect-shake}"))
        {
            dialogText.text = dialogLines[currentLine].Replace("{effect-shake}","");
            shake.Shake( 1.0f, 0.2f );
        }
    }
会話にエフェクト追加
  • 会話の設定に[{effect-shake}]を追加
n-ハチワレ
夕ご飯は何を食べようかなぁ〜
n-社長
わっ!
n-ハチワレ
{effect-shake}うわあああああ!びっくりしたー
n-社長
おどろきすぎ。うける(笑)

f:id:a1026302:20201111173940j:plain

プレイ動画

プレイ動画をアップロードしました。
www.youtube.com