Unity で 2DRPG 作りに奮闘してます。
前回は NPC のみ感情アイコンの表示機能をつけてましたが、プレイヤー側にも感情アイコンを表示する機能を追加しました。
以下は前回のブログです。
a1026302.hatenablog.com
プレイ動画
男の子との会話です。主人公にも頭上にアイコンがでるようになりました。
www.youtube.com
プレイヤー側の追加設定
クエッションマークのアイコンを例にプレイヤー側の設定メモを残してます。
Playerに感情アイコンを追加
- 「player_signs」というGameObjectを作成
- クエッションマークのアイコン用GameObjectを作成
- 「player_signs」はGameObjectをactiveにしておく
- クエッションマークのアイコン用GameObjectは非表示にしておく
- クエッションマークの表示位置を調整しておく
Player側のアイコン表示ルールを作成しておく
ハートマークをプレイヤー側に表示させたい時
アイコン置換文字 | 表示アイコン |
---|---|
{player-sign-love} | 頭上にハートマーク |
{player-sign-question} | 頭上にクエッションマーク |
{player-sign-silence} | 頭上に沈黙マーク |
{player-sign-surprised} | 頭上にびっくりマーク |
{player-sign-sleep} | 頭上に睡眠マーク |
以下設定例です。
スクリプトの追加内容
"{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(); }