Unity1week「あつい」にて制作。
作品URL:https://unityroom.com/games/huttobademae
やりたいことはいろいろあったが、結果的にはかなりオミットすることになった。
一番ボトルネックになったのは、パラメータの強化システム。ここの解決に時間を食った。
具体的に言うと、あるスクリプトで定義した変数を、ほかのスクリプトで呼び出し、変更し、再定義すること。
基本的にGetter/Setterを使うことは分かった。
ほかのスクリプトから変数の値を参照する
https://qiita.com/Teach/items/8d1cdb90a3b533707c9aシーンをまたいでデータを参照する
※FindObjectOfTypeを利用してGetterを使うやり方はできない?⇒シーンに存在するオブジェクトから探してくるっぽい
が、ボタンオブジェクトにくっつけたスクリプト内でGetter/Setter関数を使ってもうまくいかない。
public staticな変数を取得、変更しても、同じ変数名で中身が異なるものが複数存在するような状況になってしまった。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public void OnClickPowerUpSpeed() { //所持金がパワーアップコストより少なければエラー if (tmpCash < powerUpCost) { Debug.Log("所持金足りません"); } else { //tmpPowerValueの値を増やす tmpPowerValue++; //所持金を減らす tmpCash -= powerUpCost; //必要コストに倍率かける powerUpCost *= powerUpCostRate; //表示に更新する this.valueSpeed.GetComponent<Text>().text = tmpPowerValue.ToString(); this.valueCashUI.GetComponent<Text>().text = "現在の所持金 " + tmpCash.ToString() + "円"; } } |
tmpPowerValueは、別スクリプトで定義したパワーの値をGetterで取得して格納している。仮に10が入っているとして、これを実行すると、中身が10のtmpPowerValueと11のものが同時に存在するような状況に。
解決策としては、tmpPowerValueもpublic staticなものとして宣言することで意図するような挙動となった。残念ながら理由はわからない。おそらく、変数の寿命の問題だろうと考えている。このメソッドの中で変更した値が、クラス全体で共有されてないとかそんな感じ。クラス変数と、メソッドの中でしか有効でない変数について、勉強する必要がありそうだ。ということで下記を読んでみる
苦しんで覚えるC言語「変数の寿命」
https://9cguide.appspot.com/12-01.html