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

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

新規登録して質問してみよう
ただいま回答率
85.48%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

Q&A

解決済

3回答

5404閲覧

アニメーションを数秒一時停止したいときの方法

Anet

総合スコア27

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

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

0グッド

0クリップ

投稿2016/12/15 02:57

C#

1if(col.gameObject.tag == "Ice") 2{ 3 rightbody2D.velocity = Vector2.zero; 4 System.Threading.Thread.Sleep(3000) 5}

このように打って氷に当たった時にプレイヤーキャラクターをアニメーション含めて一時停止させようとするとゲームごと止まってしまい、どのように改善すれば行けるかわからないです・・・。ご教授お願い致します・・・。

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

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

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

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

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

guest

回答3

0

ベストアンサー

描画以外の全ての処理を止めたいのなら、以下のURLが参考になりそうです。
[Unity] ポーズ動作をTime.timeScale=0を使わずに実現する

後はコルーチンを使って停止→三秒待つ→再開と実装すればできると思います

C#

1 2if(col.gameObject.tag == "Ice") 3{ 4 StartCoroutine( Pause() ); 5} 6

C#

1IEnumerator Pause(){ 2 Pauser.Pause(); 3 yield return new WaitForSeconds( 3.0f ); 4 Pauser.Resume(); 5}

投稿2016/12/15 05:29

編集2016/12/15 05:32
ishi9

総合スコア1294

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

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

guest

0

ソースが一部しかなく全体像が見えてこないので、漠然とした回答しかできませんが...

氷に当たったフラグを用意し、氷に当たった時点(質問文のif文)に入った時点でtrueにします。また、この時氷に当たった時点の時間を保存しておきます。
氷に当たったフラグがtrueの間はアニメーションや描画の更新を行わないように(更新処理を通らないように)します。
氷に当たった時点の時間から3000ミリ秒以上経った場合に氷に当たったフラグをfalseにする処理を入れます。
こうすれば、氷に当たってから3000ミリ秒の間はアニメーションの更新が行われないようになるはずです。

投稿2016/12/15 03:46

hitsujimeeee

総合スコア486

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

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

0

Unityでこの手の一時停止をする場合はコルーチンを利用することが一般的だと思われます。
簡単な形だと以下のようなソースになると思われます。

C#

1void OnCollisionEnter( Collision col ){ 2 if ( col.gameObject.tag == "Ice" ){ 3 rigidbody2D.velocity = Vector2.zero; 4 StartCoroutine( "katamaru" ); 5 } 6} 7 8 9 10// コルーチンで一時停止. 11private IEnumerator katamaru(){ 12 13 // 停止したい時間(仮に1秒) 14 yield return new WaitForSeconds( 1.0f ); 15 16 yield return null; 17}

但し動作の停止をrigidbody2D.velocityでzeroを代入していますがおそらく次のフレームにまた動き出すかと思います。
なので以下の方法が良いかもしれません.

C#

1void OnCollisionEnter( Collision col ){ 2 if ( col.gameObject.tag == "Ice" ){ 3 StartCoroutine( "katamaru" ); 4 } 5} 6 7 8 9// コルーチンで一時停止. 10private IEnumerator katamaru(){ 11 12 // 一秒停止. 13 float time = 0.0f; 14 while ( time < 1.0f ){ 15 time += Time.deltaTime; 16 rigidbody2D.velocity = Vector2.zero; 17 yield return new WaitForSeconds( 0 ); 18 } 19 20 yield return null; 21} 22

テストしていないのでこれで良いかはわかりませんが解決の糸口になればと思います。
そのほかコルーチン系はいろいろ使い道があるので調べてみると良いかもしれません。

投稿2016/12/15 04:34

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問