Open sygeyacc opened 7 years ago
sygeyacc 様
お世話になっております。 コードの実行状況を見ている限り、恐らく
// パーツのセル変更 root.CellChange (partsID, 0, cellIdx, true); /* ←アニメーションでセル変更アトリビュートがあっても無視する */ // アニメーションを再生 root.AnimationPlay(root.IndexGetAnimation("Animation"));
もしくは
// アニメーションを再生 root.AnimationPlay(root.IndexGetAnimation("Animation")); // パーツのセル変更 root.CellChange (partsID, 0, cellIdx); /* ←アニメーションのセル変更アトリビュートを優先する場合、再生開始後に行う(そうしないと再生開始時の初期化でセル変更がリセットされてしまう) */
でご希望の結果が出るのではないでしょうか。
NGUIでのspriteNameを変更させるような感じで
とのことですので、次にプログラムから指定するまで、そのセルで動作し続けることがご希望の動作かと思いますので、上記で大丈夫なのではないかと思われます。
もし、上記でも問題が生じました場合、本Issueにその旨ご返信いただけますと助かります。
お忙しい中、大変申し訳ございませんが、ご検証のほどお願い申し上げます。
追伸: これは余談ですが、 セルの検索を、 int cellIdx = root.DataCellMap.ListDataCellMap [0].IndexGetCell (”NewSpriteName”); で行われているようですが、これ、内部関数なので、 int cellIdx = root.IndexGetCell(0, ”NewSpriteName”, false); で検索した方がいろいろ(今後)良いかと思われます(諸事情でpublicにはなっていますが、非解説関数なので……今後で根こそぎ仕様変更になる可能性が0ではないので……)。
返信ありがとうございました
どうやっても変わらなかったのですが インポートの設定を変更したら画像が差し替わりました。 取得関数も変更しました。
ご質問は他のユーザー様にも共有させていただく目的でオープンとさせていただきます。 ご了承ください。
sygeyacc様
お世話になっております。 また、お返事が遅れて申し訳ございません。
インポートの設定を変更したら画像が差し替わりました。
ご検証ありがとうございます&言及が足りず申し訳ございません。
確かに、インポート時に「Calculate In Advance」のオプションがONになっていますと、各パーツで使用しているセルの情報がUV情報に確定されてしまうため、セル(およびセルマップ)の動的変更機能が無効化されてしまいます。 ですので、セルの動的変更を使用する場合、同オプションをOFFにしてインポートおく必要があります。
マニュアルの端々には書いてありはするのですが、目に留まりづらい記述であるかと思われます。 マニュアル記述の改良の参考にさせていただきます。
重ねて、ありがとうございます。
お世話になっております。
NGUIでのspriteNameを変更させるような感じで アニメーションさせているオブジェクトの一部のスプライトを同一アトラス内の別のスプライトに変更したいのですが思ったように動かすことができませんでした。
以下試したプログラムですが間違っておりますでしょうか
var root = go.GetComponent();
// cellIdxに-1以外の値が返ってきていました int cellIdx = root.DataCellMap.ListDataCellMap [0].IndexGetCell (”NewSpriteName”);
// partsIDにも-1以外の値が返ってきていました int partsID = root.IDGetParts ("ChangeSpriteParts");
// パーツのセル変更 root.CellChange (partsID, 0, cellIdx);
// アニメーションを再生してもスプライトが差し替わっていませんでした root.AnimationPlay(root.IndexGetAnimation("Animation"));
デバッグでCellMap内をステップ実行したときに 1909〜1915行まで実行されました。
ご教授宜しくお願い致します。