質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

2回答

231閲覧

Addressablesでフォントアセットを読み込んでフォントテクスチャをクリアしたい

kampakuTeratail

総合スコア2

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2024/04/09 14:06

編集2024/04/09 15:31

困っていること

こちらの記事を参考にして、dynamicフォントアセットのテクスチャをクリアしようとしていたのですがうまくきません。
https://zenn.dev/mingos/articles/5061f0121cd495#dynamic%E3%81%AE%E3%83%86%E3%82%AF%E3%82%B9%E3%83%81%E3%83%A3%E3%82%92%E3%82%AF%E3%83%AA%E3%82%A2%E3%81%99%E3%82%8B%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88

試したこと

イメージ説明
こんな感じのコードです。
・そもそもAddressablesを使わずにTMP_FontAssetを直接Inspectorから参照した場合はクリアできました。
・AddressablesのPlay Mode ScriptをUse Asset DataBaseにしたところ、クリアできました。
・AddressablesのPlay Mode ScriptをUse Existing Buildにしたところ、クリアできませんでした。アセットのビルドは行っています。
・Debug.Log()の結果はどちらも同じでした。
イメージ説明
上記記事はPlay Modeがどちらか記載がなかったです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

自己解決されていますが(解決していない気もしますが)、一応突っ込んでおきます。

どのようにして、「クリアされている」かを確認なさっていますか。
なんとなく、Projectビューで該当のテクスチャを選択して、Inspectorに表示されているテクスチャを見て判断なさっている気がしますが、であれば確認している方法が間違っています。

PlayModeが「Use Asset Database」の場合、AssetDatabaseクラスを使用して、直接アセットを読み込みますので、プログラム中にアセットに変更を加えると元のアセットにも影響を与えます。

それに対し「Use Existing Build」の場合、ビルドによって作られたAssetBundleから読み込まれます。
つまり、元のアセットとは厳密には別物であり、プログラム中に変更を加えても元のアセットには影響をお呼びしません。

試してみましょうか。
TextMeshProはよく知らないので、Materialで同じことをやってみます。

マテリアルを作成し、シーン上にSphereオブジェクトを作成し、そこに以下のスクリプトをアタッチしました。

cs

1using UnityEngine; 2using System.Collections; 3using UnityEngine.AddressableAssets; 4#if UNITY_EDITOR 5using UnityEditor; 6#endif 7 8public class Test01 : MonoBehaviour { 9 IEnumerator Start() 10 { 11 var op = Addressables.LoadAssetAsync<Material>("Assets/TestMaterial.mat"); 12 yield return op; 13 Material material = op.Result; 14#if UNITY_EDITOR 15 Debug.Log($"asset path: {AssetDatabase.GetAssetPath(material)}."); 16#endif 17 // 元は白だったカラーを、赤に変更する。 18 material.color = Color.red; 19 20 // 読み込んだマテリアルを、Sphereに適用する。 21 Renderer renderer = this.GetComponent<Renderer>(); 22 renderer.material = material; 23 } 24}

「Use Asset Database」の場合です。
イメージ説明

「Use Existing Build」の場合です。
イメージ説明

Inspectorに表示しているマテリアルの色は、前者は赤、後者は白(元のまま)と違いがありますが、実際にゲーム中に表示されているマテリアルは、どちらも赤くなっています。つまりプログラムの動作としては、どちらも変わらず、正常に動いていることになります。

ログに AssetDatabase.GetAssetPathを用いてアセットのパスを出力しています。
前者は、

asset path: Assets/TestMaterial.mat.

というように、元のアセットのパスが返されますが、後者は、

asset path: .

というように、アセットパスが返されません。つまり、元のアセットとは別のものだということになります。

もし質問の内容の「クリアされているか」の確認をするのであれば、テクスチャを仮に画面に表示してみてはいかがですか。

投稿2024/04/10 14:27

katsuko

総合スコア3471

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Inspectorから参照する形でやることにしました

投稿2024/04/10 03:20

kampakuTeratail

総合スコア2

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問