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

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

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

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

Q&A

解決済

2回答

3004閲覧

Update関数の実行を遅らせる方法

unitykun

総合スコア2

C#

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

0グッド

0クリップ

投稿2021/03/26 06:21

前提・実現したいこと

ここに質問の内容を詳しく書いてください。 unity のC#です Update関数の実行を〇秒間遅らせて実行させる機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ Assets \ Scripts \ BlockMgr2.cs(26,14):警告CS8321:ローカル関数 'Update'が宣言されていますが、使用されていません

該当のソースコード

C#

ソースコード

using System.Collections; using System.Collections.Generic; using UnityEngine; public class BlockMgr2 : MonoBehaviour { // 生成するBlockオブジェクト public GameObject block; // 0になったらBlockオブジェクトを生成 float _timer = 0; // トータルの経過時間を保持 float _totalTime = 0; // ①ブロック生成回数 int _cnt = 0; void Start() { Invoke("second", 9); } void second() { void Update() { // 経過時間を差し引く _timer -= Time.deltaTime; // トータル時間を加算 _totalTime += Time.deltaTime; if (_timer < 0) { // 0になったのでBlock生成 // BlockMgrの場所から生成 Vector3 position = transform.position; // ※上下(±3)のランダムな位置に出現させる position.y = Random.Range(-3, 5); // プレハブをもとにBlock生成 GameObject obj = Instantiate(block, position, Quaternion.identity); // Blockオブジェクトの「Block」スクリプトを取得する Block blockScript = obj.GetComponent<Block>(); // 速度を計算して設定 // 基本速度100に、経過時間x10を加える float speed = 100 + (_totalTime * 10); blockScript.SetSpeed(-speed); // 左方向なのでマイナス // ②生成回数をカウントアップ _cnt++; if (_cnt % 10 < 3) { // 0.1秒後にまた生成する _timer += 0.1f; } else { // 1秒後にまた生成する _timer += 1; } } } } }

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

unity20203.1f1

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

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

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

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

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

y_waiwai

2021/03/26 06:30

で、しつもんはなんでしょうか
unitykun

2021/03/26 06:41

Update関数を時間が経ってから実行するコード(関数)が見つからなかったため質問させてもらいました。それを教えてもらいたいです。
guest

回答2

0

ベストアンサー

以下のように、フラグ変数を用意すればよろしいかと思います。

C#

1 bool _isStart = false; 2 3 void Start() 4 { 5 Invoke("second", 9); 6 } 7 8 void second() 9 { 10 _isStart = true; 11 } 12 13 void Update() 14 { 15 if (!_isStart) 16 { 17 return; 18 } 19 20 // 本来実行したい処理 21 }

投稿2021/03/26 07:33

fiveHundred

総合スコア10152

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

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

0

提示されたものはエラーではなく警告です
そのままコンパイル、実行できますよ

投稿2021/03/26 06:31

y_waiwai

総合スコア88042

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

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

fiveHundred

2021/03/26 07:28

Update()は本来、毎フレームUnityから呼ばれるようになっております。 (https://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.Update.html) しかしながら、second()の関数内にUpdate()が存在するため、このままではUnityから自動で呼ばれることはありません。 また、second()の中で実行されている箇所もないので、このままではUpdate()が実行されることが一切なく、無意味な記述になっております。 そのため、警告を無視したところで、意図した挙動にならないでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問