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

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

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

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

Q&A

1回答

835閲覧

同じスクリプト内の同じ変数の共有

niwa

総合スコア0

C#

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

0グッド

0クリップ

投稿2022/11/26 00:51

前提

unityで電卓をつくっているところで、数を保存したいというところです。
スクリプトをどこに張り付けたかの画像です今回はbuttonスクリプトをつかいます。
イメージ説明
![イメージ説明]
イメージ説明

実現したいこと

・同じスクリプト内の同じ変数の共有

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

該当のソースコード内の問題の部分のメッセージをみてほしいです具体的に書いてあります。

該当のソースコード

c♯

問題の部分
public void OnClick1()
{
UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>();
score.text = score.text + "1";
firstnumber[numberType, count] = 1;
count = count + 1; //ボタン①をおすとcountが1ずつあがって今回は3回押してcount = 3になる

}

public void OnClickplus()
{
UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>();
score.text = score.text + "+";
button obj = new button();// number関数のないのDebug.Log(count)では1が出力される
obj.number();
UnityEngine.Debug.Log(count);//ここでは3が出力される
count = 0;
numberType++;
}
public void number()
{
count++;
UnityEngine.Debug.Log(count);
count++;
for (int b = 0; b < count; b++)
{

calnumber = calnumber + firstnumber[numberType, b] * (10 ^ (count - b - 1)); UnityEngine.Debug.Log(calnumber); } stocknumber[numberType] = calnumber; }

全体のソースコード
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
using UnityEngine;
using UnityEngine.UI;

public class button : MonoBehaviour
{
/*表示されている数字が0のときに=をやるとfirstnumber[0, 0]の適当な数字が画面出力させてしまう
/同名の変数で初期化しなおし、元の配列のコピーから書き戻す例(配列の長さを初期化後に変更するより)
/配列から要素を検索するにはArray.IndexOfメソッドを使用します配列のメソッド(c#)超初心者向けより。
/配列の要素数を取得、変更するArray.Resize(ref numbers, numbers.Length * 2);をつかって
/lengthをつかってfor文をする
/
firstnumber[0] = score.text;
/
/UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>();は何個もいるのか?/
/同じスクリプトを違うボタンにアタッチしているからそれぞれのcountができている/
/Flagが1か0でwhileするかしないか決める/
/数字を文字列で表して演算子が来たら文字列終わってまた新しい文字列を作る/
/演算子のボタンを押したら違う配列に切り替わる/
/bool型を使って演算子か数字かを分ける/
/掛け算割り算を優先的に計算する方法/
/0を先頭の数字にしない方法/
/
=を入力したら計算して表示する方法
/
private int[,] firstnumber = new int[100, 100];
private int[] stocknumber = new int[100];
public int count = 0;
public int numberType = 0;
private int calnumber = 0;

public void OnClick1() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "1"; firstnumber[numberType, count] = 1; count = count + 1; } public void OnClick2() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "2"; firstnumber[numberType, count] = 2; count = count + 1; } public void OnClick3() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "3"; firstnumber[numberType, count] = 3; count = count + 1; } public void OnClick4() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "4"; firstnumber[numberType, count] = 4; count = count + 1; } public void OnClick5() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "5"; firstnumber[numberType, count] = 5; count = count + 1; } public void OnClick6() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "6"; firstnumber[numberType, count] = 6; count = count + 1; } public void OnClick7() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "7"; firstnumber[numberType, count] = 7; count = count + 1; } public void OnClick8() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "8"; firstnumber[numberType, count] = 8; count = count + 1; } public void OnClick9() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "9"; firstnumber[numberType, count] = 9; count = count + 1; } public void OnClickdevide() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "÷"; button obj = new button(); obj.number(); count = 0; numberType++; } public void OnClickmulti() { UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>(); score.text = score.text + "×"; button obj = new button(); obj.number(); count = 0; numberType++; }

  public void OnClickequal()
{
UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>();
score.text = score.text + "=";
numberType++;

}

  public void OnClickreset()
{
UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>();
score.text = null;

count = 0; numberType= 0; }

  public void OnClickplus()
{
UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>();
score.text = score.text + "+";
button obj = new button();
obj.number();
UnityEngine.Debug.Log(count);
count = 0;
numberType++;
}
public void OnClickminus()
{
UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>();
score.text = score.text + "-";
button obj = new button();
obj.number();
count = 0;
numberType++;
}
public void OnClick0()
{
UnityEngine.UI.Text score = text.GetComponent<UnityEngine.UI.Text>();
score.text = score.text + "0";
firstnumber[numberType, count] = 0;
count++;
}

public void number() { count++; UnityEngine.Debug.Log(count); count++; for (int b = 0; b < count; b++) { calnumber = calnumber + firstnumber[numberType, b] * (10 ^ (count - b - 1)); UnityEngine.Debug.Log(calnumber); } stocknumber[numberType] = calnumber; } public GameObject text = null; // Start is called before the first frame update void Start() { } // Update is called once per frame void Update() { }

}

試したこと

同じスクリプトないの同じ変数の共有と調べたが違うスクリプトの変数の共有しか出てこなかった

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

unity2020

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

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

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

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

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

guest

回答1

0

変数の共有であれば、staticをつけるなり引数を取ってスクリプトのメソッド内で渡すなりreturn返すなりすれば問題ないかと思います。
個人的には numberType++; やnumberType--; とやってしまうと numberTypeの数そのものが変わってしまうので、自作のアプリで2時間ほど躓いた経験があります。デバッグで注意してみてください。

出来ればどの変数を共有したいのか明確に分かりやすくご提示ください。

投稿2023/02/19 05:28

sheephuman

総合スコア112

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問