teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

コード修正

2020/04/29 09:38

投稿

fiveHundred
fiveHundred

スコア10443

answer CHANGED
@@ -13,7 +13,7 @@
13
13
  // ここに変更時に処理したい処理を書く
14
14
  }
15
15
 
16
- public bool SetFoo(bool val)
16
+ public void SetFoo(bool val)
17
17
  {
18
18
  foo = val;
19
19
  execChangeFoo();

2

ループについて追記

2020/04/29 09:38

投稿

fiveHundred
fiveHundred

スコア10443

answer CHANGED
@@ -20,4 +20,9 @@
20
20
  }
21
21
  ```
22
22
 
23
- 他にもUpdate()やコルーチン内で毎フレーム変更があるかチェックする方法もあります。
23
+ 他にもUpdate()やコルーチン内で毎フレーム変更があるかチェックする方法もあります。
24
+
25
+ > ループは回数制限もありますしちょっと違う気がします(無限ループはバグるはずですし)
26
+
27
+ ループに回数制限はありません。
28
+ 無限ループでフリーズするのは、「関数が終わらないため他の処理ができない」からです。

1

「数値が変更された時に処理を実行する方法」を追記

2020/04/29 09:19

投稿

fiveHundred
fiveHundred

スコア10443

answer CHANGED
@@ -1,4 +1,23 @@
1
1
  この内容の場合「並列処理」という言葉は意識しないほうが良いでしょう。
2
2
  「並列処理=マルチスレッド」という意味であれば、そもそもUnityは基本的にシングルスレッドで処理されているので、マルチスレッドが必要になることはありませんし、そもそも一部を除いて使えません。
3
3
  必要なのは「シーン間の数値の共有方法」「ボタンを押した時に処理を実行する方法」「数値が変更された時に処理を実行する方法」であり、これらはマルチスレッドとは関係ないです(「非同期処理」であれば関係あるかもしれないけど)。
4
+
5
+ 前者2つは調べれば出てくるはずなので、「数値が変更された時に処理を実行する方法」ですが、これは変数を変更するための関数、もしくはプロパティを用意し、それが呼び出された時に処理を実行すれば良いです。
6
+ 具体的には以下のような感じです。
7
+
8
+ ```C#
9
+ bool foo;
10
+
11
+ void execChangeFoo()
12
+ {
13
+ // ここに変更時に処理したい処理を書く
14
+ }
15
+
16
+ public bool SetFoo(bool val)
17
+ {
18
+ foo = val;
19
+ execChangeFoo();
20
+ }
21
+ ```
22
+
4
- 全ての容を書くのは面倒くさいの、まずは自分で調べてみて、分からない点があればそれを記載するようにしてください
23
+ 他にもUpdate()やコルーチン内で毎フレーム変更があるかチェックする方法もあります