我々はプロジェクトディレクトリ内のすべての画像を再生するために必要なのは、それをドラッグして、私たちは選択を選択する必要が最初Unityが再生するために来たアニメーションコンポーネントを使用することで、二つの方法でフレームアニメーションシーケンスの団結で遊んでいることを知っていますHiercarchyに、Unityは自動的にアニメーションクリップを作成するために私たちを助けるだろう、我々は我々のアニメーションを制御するアニメーションコンポーネントを使用しますが、この方法で作成した画像スプライトレンダラタイプすることができます。第二の方法は、イメージ成分を生成スプライトを作成するためにコードを使用し、アニメーションを実現するためにフレームによってスプライトフレームの画像を置き換えるために、アップデート機能を使用してコードの一部を書き込むことです。このような言葉は、トラブルのスポットかもしれないが、制御することができる自由度が自分のニーズに応じてコードを書くために
昨今のプロジェクトにアニメーションコンポーネントを達成するために来たが、党が何度も何度も変更する必要があるので、あなたはあまりにも多くのロジックに対処する必要があり、変更と拡張を容易にするために、ユニティを使用したいと考えていました、アニメーション処理のロジックとシーケンスのフレームを大量に必要と、独自のカスタムコンポーネントのニーズに応じてプロジェクトが開発を支援するためにフレームのシーケンスを再生するようにします。まず、我々は唯一のパネルを編集することができ、自分のニーズに応じて、あなたは、スクリプト上のスプライトに割り当てられた画像の配列を再生する必要があります。そして、画像を作成するスクリプトにマウントする必要があり、以下に示すこのImageAnimationスクリプトコンポーネントであるとして、効果を確認するために写真を貼ります写真はループモード、再生速度を設定し、自動再生するかどうか、あなたは自分のニーズに応じてコールバック関数を追加することができます。非常に便利。
まあ、騒ぎ、コード上で、スクリプトを開きが(プレイを再生するために出てきた)、(一時停止を一時停止)、停止停止()、リプレイリプレイ()4パブリックメソッド、およびコールバック関数、直接自分のニーズに応じてこの4回のコールとコールバックメソッドは、うまく自分の絵の再生コントロールを制御します。このスクリプトは、主に私たちはアイデアが効率を改善するために、独自の開発を補完する機能のいくつか出て、自分のニーズに応じて、プロジェクトの開発にカプセル化することができます提供したいと考えて、非常に複雑ではありません。ここでこれを共有し、ご質問やコメントが、私と通信話し合い、一緒に進行学ぶことができます。
/ * ********************************** *説明:この説明は、画像フレームシーケンス再生スクリプトです *マウントポイント:Imageコンポーネントにマウントするマウントポイントを 2019年7月11日:*日付 *バージョン:Unityバージョン2017.2.0f3 *著者:LJFを ******************* *************** * / 使用;にSystem.Collectionsを 使用System.Collections.Genericを、 使用UnityEngine; 使用UnityEngine.UI; 使用LjfLog; 使用UnityEngine.Events; 名前空間LJF { // 仕様を命名、コメントを追加し、合理的なパッケージング、アクセスを制限、例外処理 のパブリック クラスImageAnimationを:MonoBehaviour { 公共 列挙型国家 { IDLE、 遊ぶ、 PAUSE } パブリック 列挙Statel { 一度、 ループ } [ヘッダー(" 再生モード(循環、シングル)")] // デフォルトの単一 のパブリック Statel条件条件について= State1.once; [ヘッダー(" オート遊ぶ")] // デフォルトが自動的に再生されない 公共 BOOL = Play_Awakeをfalseに; // 再生状態(デフォルト、再生、一時停止) プライベート Play_state状態; プライベート画像manimg; [ヘッダー(" フレーム毎秒(整数)" )] パブリック フロート Frame_Number = 30 ; [ヘッダー(" スプライトアレイを滴下した" )] パブリックスプライト[] sprit_arr; // コールバック 公衆UnityEvent onCompleteEvent; プライベート int型のインデックス、 プライベート フロートティム; プライベート フロートwaittim、 プライベート BOOL DisplayRID、 無効目覚めを() { manimg = GetComponent <画像> (); ティム = 0 ; インデックス = 0 ; waittim = 1 / frame_number。 play_state = State.idle。 isplay = 偽; もし(manimg == NULL ) { Debuger.LogWarning(" イメージ为空、添加イメージ组件请!!! " )。 返します。 } であれば(sprit_arr.Length < 1 ) { Debuger.LogWarning(" スプライトアレイは、アレイのスプライトに要素を追加、0です!" ); } manimg.sprite = sprit_arr [ 0 ]; IF (Play_Awake) { 再生(); } } 無効更新を() { // テスト IF (Input.GetKeyDown(KeyCode.A)) { ()を再生する; } IF (Input.GetKeyDown(KeyCode.S)) { リプレイ(); } であれば State.playing。(Input.GetKeyDown(KeyCode.D)) { 停止(); } であれば(Input.GetKeyDown(KeyCode.P)) { 一時停止(); } UpMove()。 } プライベート ボイドUpMove() { // 单播 場合(条件== State1.once) { 場合(play_state == State.idle && isplay) { play_state = = インデックス = 0 ; ティム0 ; } であれば(play_state == State.pause && isplay) { play_state = State.playing。 ティム = 0 ; } であれば(play_state == State.playing && isplay) { ティム + = Time.deltaTime。 もし(TIM> = waittim) { ティム = 0 。 インデックス ++ ; IF(インデックス> = sprit_arr.Length) { インデックス = 0 ; manimg.sprite = sprit_arr [インデックス]; DisplayRID = falseに、 play_state = State.idle; // ここでコールバックを終了追加する IF( onCompleteEvent!= nullの) { onCompleteEvent.Invoke(); 返します。 } } manimg.sprite = sprit_arr [インデックス]。 } } } // 循环播放 場合(条件== State1.loop) { 場合(play_state == State.idle && isplay) { play_state = State.playing。 インデックス = 0 ; ティム = 0 ; } であれば(play_state == State.pause && isplay) { play_state = State.playing。 ティム = 0 ; } であれば(play_state == State.playing && isplay) { ティム + = Time.deltaTime。 もし(TIM> = waittim) { ティム = 0 。 インデックス ++ ; もし(指数> = sprit_arr.Length) { インデックス = 0 ; // ここでは、コールバック関数を追加するが終了 } manimg.sprite = sprit_arr [インデックス]; } } } } /// <まとめ> /// プレイ /// </要約> 公共 ボイドプレイ() { DisplayRID = trueに; } /// <まとめ> /// 懸濁 /// </要約> 公衆 空ポーズ() { isplay = 偽; play_state = State.pause。 } /// <要約> /// 停止 /// </要約> 公共 ボイド停止() { isplay = 偽。 play_state = State.idle。 インデックス = 0 ; ティム = 0 ; 場合(manimg == NULL ) { (Debuger.LogWarning "画像の为の空、请赋值" ); 返します。 } manimg.sprite = sprit_arr [インデックス]。 } /// <要約> /// 重播 /// </要約> 公共 ボイドリプレイ() { isplay = 真。 play_state = State.playing。 インデックス = 0 ; ティム = 0 ; } } }