キャラクターネームプレートをキャラごとに変更する件

33 views
Skip to first unread message

Y Y

unread,
May 15, 2024, 5:59:41 PMMay 15
to 宴ユーザーグループ
マッドネスラボさま

お世話になります。

表題の件ですが、「Character」シートで設定している
「CharacterName」について、キャラごとにネームプレート(キャラ名を表示する下地)のデザインを変更したく考えております。
こちらの手法としては、何かありますでしょうか?

※補足※
「Character」シートにある「Icon」に固定のキャラ名入りのネームプレート画像を指定することで、一旦の実現はできているのですが、ローカライズのことも考えると、この手法だと対応ができない状況となっております

以上、大変お手数ですが、ご確認をお願いいたします。

宴のバージョン:宴3.12.8
UnityのバージョンとOS:Unity2021.3.1f1 Windows10
Unityの習熟度:初心者

マッドネスラボ

unread,
May 16, 2024, 2:03:51 AMMay 16
to 宴ユーザーグループ
拡張用のイベントというのがあるので、それを使って制御してみてください。
https://madnesslabo.net/utage/?page_id=6398

使うイベントは、AdvPage のOnBeginPageとOnChangeTextが良いかと思います。
ネームプレートに使用するキャラクターラベル(CharacterシートにあるCharacterName)は、AdvPage のCharacterLabelで取得できます。

以下、サンプルです。

using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

namespace Utage
{
//キャラクターラベルによって、ImageコンポーネントのSpriteを入れ替えるサンプル
public class SampleImageSpriteControllerByCharacterLabel : MonoBehaviour
{
public Image target; //対象のImage
[Serializable]
public class SpriteInfo
{
public string characterLabel; //キャラクターラベル
public Sprite sprite; //キャラクターラベルに対応するスプライト
}
//キャラクターラベルごとのスプライト情報のリスト
[SerializeField]
List<SpriteInfo> spriteInfoList = new List<SpriteInfo>();
public Sprite defaultSprite; //対応するキャラクターラベルがない場合のデフォルトのスプライト

void Awake()
{
//サンプルなので、イベントの設定はここで自動的に行う
//AdvEngineが親オブジェクトになかったり、イベントの登録をAwakeのタイミング以外にしたい場合は
//適宜変更してください
AdvEngine engine = this.GetComponentInParent<AdvEngine>();
if (engine != null)
{
engine.Page.OnBeginPage.AddListener(OnBeginPage);
engine.Page.OnChangeText.AddListener(OnChangeText);
}
}

//ページの開始のタイミングで呼ばれる
public void OnBeginPage(AdvPage page)
{
UpdateImage(page.CharacterLabel);
}

//テキストに変更があった場合に呼ばれる
public void OnChangeText(AdvPage page)
{
UpdateImage(page.CharacterLabel);
}

//キャラクターラベルに対応するスプライトをImageにセットする
void UpdateImage(string characterLabel)
{
var sprite = FindSpriteByCharacterLabel(characterLabel);
target.sprite = sprite;
}

//キャラクターラベルに対応するスプライトを探す
Sprite FindSpriteByCharacterLabel(string characterLabel)
{
var spriteInfo = spriteInfoList.Find(x => x.characterLabel == characterLabel);
if (spriteInfo != null)
{
//キャラクターラベルに対応したスプライトを返す
return spriteInfo.sprite;
}
//見つからない場合はデフォルトスプライトを
return defaultSprite;
}
}
}

2024年5月16日木曜日 6:59:41 UTC+9 Y Y:

Y Y

unread,
May 18, 2024, 11:37:39 AMMay 18
to 宴ユーザーグループ
ご教示ありがとうございます。
いただいた内容で試してみます!

2024年5月16日木曜日 15:03:51 UTC+9 マッドネスラボ:
Reply all
Reply to author
Forward
0 new messages