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

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

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

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

Q&A

解決済

1回答

1758閲覧

Unity Time.timeScale=0でUpdateが止まってしまう

hukahirame

総合スコア19

Unity

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

0グッド

0クリップ

投稿2020/06/16 14:25

Unity(C#)における質問です。Time.timeScale=0で時間を止めた後、Update内でキー入力を取得次第Time.timeScale=1を実行したいのですが、Update内なのに実行されなくて原因がわからず困っています。
###スクリプト
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Player : MonoBehaviour
{
public float speed;
public GameObject Keepcanvas;
private Rigidbody2D rb;
private bool cool=false;//動けなくさせるシステム
public GameObject invent;
public Image isr;
private bool inventcool;
void Start()
{
rb= GetComponent<Rigidbody2D>();
velocity = new Vector2(speed, 0);
isr = invent.GetComponent<Image>();
isr.color = new Color(0.675f, 0.675f, 0.675f, 0f);
}
void Update()
{
if (cool == false)//この中は停止可能
{
if (isr.color.a == 0f)//消えてるとき
{
foreach (Transform child in invent.transform)
{
child.transform.localScale = new Vector3(child.transform.localScale.x, 0, child.transform.localScale.z);
}

if ((Input.GetKey("e")) && (inventcool == false))//入力されたら { isr.color = new Color(0.675f, 0.675f, 0.675f, 0.9f); Invoke("Inventcooling", 0.2f); inventcool = true; **Time.timeScale = 0;** foreach (Transform child in invent.transform) { child.transform.localScale = new Vector3(child.transform.localScale.x, 60, child.transform.localScale.z); } } } if ((isr.color.a == 0.9f) && (Input.GetKey("e")) && (inventcool == false))//消えてないときに入力されたら { **Time.timeScale = 1;** isr.color = new Color(0.675f, 0.675f, 0.675f, 0f); Invoke("Inventcooling", 0.2f); inventcool = true; } }

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

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

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

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

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

MMashiro

2020/06/16 14:29

コードが見にくいためコードは ``` で囲ってください
Daregada

2020/06/16 14:36

末尾のif文の条件式から「(isr.color.a == 0.9f) && 」を削除すると想定した動作になるのかどうか試してみてくださいな。
hukahirame

2020/06/17 15:02

回答ありがとうございます。いただいた通り(isr.color.a == 0.9f) &&を削除して最後の条件を減らしたのですが、それでも一回目で時間が止まった後、最後の条件が実行されることなく、止まったままになってしまいました。
guest

回答1

0

ベストアンサー

提示のコードだけですとinventcoolがfalseになる個所が存在しません
Updateは実行されていてもinventcoolがfalseにならない為 Time.timeScale = 1 の処理が走っていないものと思われます

---- 追記 ----
Invoke("Inventcooling", 0.2f); で指定されているInventcoolingメソッドも提示のコードに存在しないのでおそらくコード全てを貼っていないものと思われます。
Inventcoolingメソッドの中で WaitForSeconds を使用し inventcool 変数にfalseを代入しているのだとした場合、timeScale = 0 中は WaitForSeconds は機能しないので yield return null 等 別の待機方法を考える必要があります

---- 追記2 ----
Coroutine呼び出しだと勘違いをしていましたInvokeメソッドはtimeScale 0中は動作しない為、
Inventcoolingメソッド内でfalseに戻す処理を書いてもInventcoolingは呼び出されない為
別の方法を使用する必要があります
(WaitForSecondsを使用しないコルーチンなど)

投稿2020/06/16 14:38

編集2020/06/16 14:48
MMashiro

総合スコア2378

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

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

hukahirame

2020/06/18 09:26

Invokeではなくコルーチンを使ったところうまくいきました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問