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

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

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

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

Q&A

解決済

2回答

4185閲覧

並列処理のやり方を教えてください

kidaer

総合スコア31

Unity

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

0グッド

0クリップ

投稿2020/04/28 14:22

編集2020/04/29 10:01

シーン1の変数を変更したときに、シーン2のテキストやコメントを自動で変更する仕組みにしたいです。

以下の状態でテキストが自動変更できることがわかりました。

using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using UnityEngine.UI; public class 文字変数 : MonoBehaviour { public GameObject score_object = null; // Textオブジェクト // 初期化 void Start () { } // 更新 void Update () { // オブジェクトからTextコンポーネントを取得 int b = titleJup.aaa; Text score_text = score_object.GetComponent<Text> (); if (b == 1) { // テキストの表示を入れ替える score_text.text = "aaaaa"; } } }

上記を真似てImageもできないかやってみたのですが、再生ができなくなってしまいました。

using System.Collections; using System.Collections.Generic; using UnityEngine; using System; using UnityEngine.UI; public class 画像変更 : MonoBehaviour { public GameObject Image_object = null; // Imageオブジェクト public Sprite 偽金; void Start() { } void Update() { int flag = titleJup.aaa; Image Image_image = Image_object.GetComponent<Image> (); if (flag == 1) { Image_image.Sprite = 偽金; } } }

どうしたらいいのでしょうか?
よろしくお願い致します

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

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

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

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

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

guest

回答2

0

ベストアンサー

この内容の場合「並列処理」という言葉は意識しないほうが良いでしょう。
「並列処理=マルチスレッド」という意味であれば、そもそもUnityは基本的にシングルスレッドで処理されているので、マルチスレッドが必要になることはありませんし、そもそも一部を除いて使えません。
必要なのは「シーン間の数値の共有方法」「ボタンを押した時に処理を実行する方法」「数値が変更された時に処理を実行する方法」であり、これらはマルチスレッドとは関係ないです(「非同期処理」であれば関係あるかもしれないけど)。

前者2つは調べれば出てくるはずなので、「数値が変更された時に処理を実行する方法」ですが、これは変数を変更するための関数、もしくはプロパティを用意し、それが呼び出された時に処理を実行すれば良いです。
具体的には以下のような感じです。

C#

1bool foo; 2 3void execChangeFoo() 4{ 5 // ここに変更時に処理したい処理を書く 6} 7 8public void SetFoo(bool val) 9{ 10 foo = val; 11 execChangeFoo(); 12}

他にもUpdate()やコルーチン内で毎フレーム変更があるかチェックする方法もあります。

ループは回数制限もありますしちょっと違う気がします(無限ループはバグるはずですし)

ループに回数制限はありません。
無限ループでフリーズするのは、「関数が終わらないため他の処理ができない」からです。

投稿2020/04/29 08:54

編集2020/04/29 09:38
fiveHundred

総合スコア10152

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

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

kidaer

2020/04/29 09:48

「シーン間の数値の共有方法」「ボタンを押した時に処理を実行する方法」はクリアしているので、「数値が変更された時に処理を実行する方法」になりそうです。今回はUpdate()を使う方法でなんとかなりそうな気がしました。少々現状に進展がありまして、質問内容を変更します。もしよければ再度返答をいただけると幸いです。ご返答ありがとうございました!
fiveHundred

2020/04/29 10:30

編集された回答を見ましたが、「Image_image.Sprite」ではなく「Image_image.sprite」が正しいのでは? というか、「再生できない=エラーがある」なので、Consoleウィンドウを見て自分で対処しましょう。 どうしても分からずに質問する場合でも、その内容はコピペで記載するのが礼儀です。
kidaer

2020/04/29 10:46

まさにそのエラーでした!画像も自動で切り替わりできるようになりました!了解しました。次回からコンソールログを貼り付けるように気を付けます。ご返答ありがとうございました!
guest

0

並列処理のやり方を知りたいです。

Unityって事はC#ですかね。

学習をしたいという意味であって、作りたいものの直接的な答えを知りたいというような丸投げ質問ではないという前提であれば、

.NET での並列プログラミング

を読むとか、
Unityに限定するとこれですかね?(Unityやってないから自信ないけど)
Unity Manual - ParallelFor jobs

投稿2020/04/28 16:16

gentaro

総合スコア8947

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

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

kidaer

2020/04/29 08:16

中を覗いたのですが、プログラムに対するレベルが足らず、具体的にどうすればいいのかよくわかりませんでした。申し訳ありません。ご返答ありがとうございました。
gentaro

2020/04/29 09:40

一応、質問文の > 並列処理のやり方を知りたいです。 > unityにはそういう機能がなく、自分でイチから組むしかないのでしょうか? ここ以外の文章はノイズだと判断して上記回答としていますが、fiveHundredさんの回答を読んで、やりたいことがそもそも並列処理と関係ないのであれば、そちらの回答をベストアンサーとして解決とするか、質問文を修正して質問の方法を変えた方が良いです。 あくまで「並列処理」の質問であれば上記回答で終わりです。 具体的にどうすれば良いのかわからないのであれば、出てくる用語ひとつひとつをちゃんと調べて、わからない箇所をまた個別に質問を建てるなりして解決していくしか無いです。
kidaer

2020/04/29 10:47

申し訳ございません。おっしゃることがよくわかないのですが、なんとか解決することができました。ご返答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問