ものづくりのブログ

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

【Unityで2DRPG】会話中のNPCから感情のアイコンがでる機能を実装-その2(猫の冒険)

Unity で 2DRPG 作りに奮闘してます。
前回は NPC のみ感情アイコンの表示機能をつけてましたが、プレイヤー側にも感情アイコンを表示する機能を追加しました。
以下は前回のブログです。
a1026302.hatenablog.com

プレイ動画

男の子との会話です。主人公にも頭上にアイコンがでるようになりました。
www.youtube.com

プレイヤー側の追加設定

クエッションマークのアイコンを例にプレイヤー側の設定メモを残してます。

Playerに感情アイコンを追加
  • 「player_signs」というGameObjectを作成
  • クエッションマークのアイコン用GameObjectを作成
  • 「player_signs」はGameObjectをactiveにしておく
  • クエッションマークのアイコン用GameObjectは非表示にしておく
  • クエッションマークの表示位置を調整しておく

f:id:a1026302:20201114194357p:plain

Player側のアイコン表示ルールを作成しておく

ハートマークをプレイヤー側に表示させたい時
アイコン置換文字 表示アイコン
{player-sign-love} 頭上にハートマーク
{player-sign-question} 頭上にクエッションマーク
{player-sign-silence} 頭上に沈黙マーク
{player-sign-surprised} 頭上にびっくりマーク
{player-sign-sleep} 頭上に睡眠マーク

以下設定例です。
f:id:a1026302:20201114200219p:plain

スクリプトの追加内容

"{player-sign-love}"という文字列がきた場合の処理を追加します。
”GameObject.Find”はアクティブのGameObjectしか探せないため、非表示にしている感情アイコンを見つけるときに以下の手順を取りました。

  • 「"player_signs"」というGameObjectを検索
  • "player_signs"というGameObjectにぶら下がっている非表示の「”love”」というGameObjectを「transform.Find」で検索
  • 「”love”」というGameObjectを「_ExcDOTween()」という関数に渡す
    public void checkIfLove(){
        
        if(dialogLines[currentLine].StartsWith("{sign-love}"))
        {
            dialogText.text = dialogLines[currentLine].Replace("{sign-love}","");
            _ExcDOTween(love);
        }

        if(dialogLines[currentLine].StartsWith("{player-sign-love}"))
        {
            dialogText.text = dialogLines[currentLine].Replace("{player-sign-love}","");
            GameObject player_signs = GameObject.Find("player_signs");
            _ExcDOTween(player_signs.transform.Find("love").gameObject);
        }
    }
・
・
・
    public void _ExcDOTween(GameObject obj){
        DOTween.Sequence()
            .AppendCallback(() => obj.SetActive(true))
            .AppendInterval(1.5f)
            .AppendCallback(() => obj.SetActive(false)).
            SetLink(obj).Play();
    }