★お知らせ(2023/12/27)
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
いつもLive2D公式コミュニティをご利用いただき誠にありがとうございます。
本コミュニティは2023年12月27日 11:00をもって閉鎖いたしました。
今後の運営はすべて新Live2D公式クリエイターズフォーラムに移行します。
閉鎖に伴い、以下機能は利用不可となります。
・アカウントの新規作成
・トピック投稿、返信
たくさんのご利用誠にありがとうございました。
新Live2D公式クリエイターズフォーラムは以下バナーよりご利用いただけます。

なお、本コミュニティに投稿されたトピックはすべて残りますが、今後削除する可能性がございますので予めご了承ください。
閉鎖に関するお問い合わせにつきましてはLive2D公式クリエイターズフォーラムへご連絡ください。
Unity SDK 1.x から 2.0.08_1 に変更したらテクスチャの動的切り替えができなくなった
これまで Unity SDK 1.x (番号は失念..)で setTexture() による動的なテクスチャの差し替えを行っていましたが、先日 SDK を 2.0.08_1 に差し替えたところ、setTexture()によるテクスチャの差し替えが表示に反映されなくなりました。
一度 setTexture() でテクスチャの設定を行うと別のテクスチャへの動的な差し替えは行えないのは仕様でしょうか?
一度 setTexture() でテクスチャの設定を行うと別のテクスチャへの動的な差し替えは行えないのは仕様でしょうか?
0
コメント
どのようなコードを書いているのか教えてもらえますか?
再現コード少々おまちください。
(本来のコードはもっと複雑でこのスペースで説明するのが困難なため処理の要点を抜粋、および処理を簡略化して記述しています)
(あちこち省略しているのでこのままのコードではまともに動作はしないと思いますので、その点はご容赦ください)
class MyLive2DModel { // モデルデータ(.moc) public TextAsset m_modelData; // 標準のテクスチャ // 例えば 0:ボディ, 1:ヘアスタイル, 2:ドレス, ... // というように配列にテクスチャを割り当てている public Texture2D[] m_textures; // 髪色差し替え用のテクスチャ // 例えば 0:金, 1:茶, 2:黒 のように髪色毎に対応するテクスチャを割り当てている public Textures2D[] m_hairTextures; // 差し替え用のテクスチャを指すインデックス int m_hairColorIndex = -1; // Live2Dモデル Live2DModelUnity m_live2DModel; // 最初に1度だけ呼び出す public void Initialize() { // Live2Dモデルデータの読込み Live2D.init (); m_live2DModel = Live2DModelUnity.loadModel(m_modelData.bytes); // (1) --- テクスチャの読込 LoadTextures(); // レンダリングモード・モーションの初期化 m_live2DModel.setRenderMode(Live2D.L2D_RENDER_DRAW_MESH); // いろいろ初期化のコード } // Live2Dモデル描画(MonobehaviourのUpdate()から呼び出す) public void DrawModel() { m_live2dMode.update(); m_live2dMode.draw(); } // 髪色の変更 public void SetHairColor(int colorIndex) { m_hairColorIndex = colorIndex; // (2) --- テクスチャの差し替え LoadTextures(); } // テクスチャの割り当て void LoadTextures() { m_live2DModel.deleteTextures(); for (int i = 0; i < m_texturesCount; i++) { // デフォルトは標準のテクスチャ Texture2D tx = m_textures[i]; // ヘアスタイル用のテクスチャを選択した髪色に応じて差し替える if (i == 1) { // 髪色の指定があればテクスチャ差し替え if (m_hairColorIndex >= 0) tx = m_hairTextures[m_hairColorTextures]; } // テクスチャを設定 m_live2DModel.setTexture(i, tx); } } }上記の Initialize() から呼び出す LoadTexture() でデフォルトのテクスチャをモデルに適用されますが、以降、SetHairColor() を呼び出して テクスチャの差し替えを行っても、モデルの表示に反映されないという現象となっています。上記動作を確認した Unityのバージョンは 4.6.6p4 です。
このモードならテクスチャが即座に切り替わるようです。
L2D_RENDER_DRAW_MESHモードの場合は、Live2DModelUnity.loadModelをテクスチャ差し替え時に指定すれば切替できました。
SDKのSimpleプロジェクトで髪テクスチャだけ差し替えてみましたが、以下のようなソースになります。
Unity5.0.2p1で確認しましたが4.6.6p4でも問題ないかと思います。
[SimpleModel.cs]
おっしゃるとおり、現在の読み込み済みのモデルを捨てて、再度 Live2DModelUnity.loadModel() でモデルを読み込み直せばテクスチャを設定し直すことできるのは確認できたんですが、やはり以前(SDK 1.x の頃)の挙動に戻してほしいですね...(これが仕様でないのなら)
というのも、SDK 1.x の時点では モーション再生中にモーションを途切れさせずに自然に着せ替えができてたんですが、SDK2.0.08_1 した途端、着せ替えのたびにモーションが初期化されてギクシャクするので、、、ちょっと挙動として微妙なのです。
Unity-iOSの64bitビルド(IL2CPP)に絡んで今更 1.x には戻せないし、RenderModeを変えるとオブジェクトの重ね合わせ等にも問題でるので変えられず...
まあ結論としては、将来この挙動が改善されることを期待しつつ、当面はテクスチャ切り替えるタイミングで、loadModel() でモデルを読み込み直す方法で回避します。
ありがとうございました。