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

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

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

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

Unity

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

Q&A

解決済

3回答

1514閲覧

別スクリプトで設定した文字変数をプログラムでText(Script)に入れたいが反映されない

退会済みユーザー

退会済みユーザー

総合スコア0

C#

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

Unity

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

0グッド

0クリップ

投稿2020/05/10 23:44

編集2020/05/12 09:20

実装したいこと
画像のピンクスロットの中にしたのアイテムアイコンをドロップした際に画像右側のText(Script)の中身へMyExplanationの中身を入れたい

errorはスクリプトへ記載 画像で解決案へ対する質問

アイテムのデータ(呼び出し用の変数)

using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; [CreateAssetMenu(fileName = "Items", menuName = "Items/items")] public class Item : ScriptableObject { [SerializeField] private string itemName; [SerializeField] private Sprite itemImage; [SerializeField] private Text explanation;  private EditButton.Symbol EditSymbol; public string MyItemName { get => itemName;} public Sprite MyItemImage { get => itemImage;} public static Text MyExplanation { get => explanation; } ☆この部分を呼び出したい

実際にアイテムの変数を呼び出し文字変数をセットするスクリプト

using System.Collections; using System.Collections.Generic; #if UNITY_EDITOR using UnityEngine; using UnityEngine.UI; public class ExplanationTXT : MonoBehaviour { private Item item; public Item MyItem { get => item; set => item = value; } public virtual void SetExplanation(Text text) { Text ChangeTXT = MyItem.MyExplanation; } } #endif

関数を呼び出すタイミング

using

1using System.Collections.Generic; 2using UnityEngine; 3using UnityEngine.EventSystems; 4using UnityEngine.UI; 5 6public class EditSlot : Slot 7{ 8 private Edit edit; 9 private Text text; 10 public Edit MyEdit { get => edit; private set => edit = value; } 11 public Text Text { get => text; private set => text = value; } 12 13 protected override void Start() 14 { 15 base.Start();//継承元のスタート関数 16 17 MyEdit = FindObjectOfType<Edit>(); 18 19 } 20 21 public override void OnDrop(PointerEventData eventData) 22 { 23 base.OnDrop(eventData); 24 //ExplanationTXT.SetExplanation(Text); 25 edit.SetItem(MyItem); 26 edit.SetExplanation(text); 27 }

イメージ説明

STATICを外した場合のエラー
イメージ説明

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

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

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

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

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

Zuishin

2020/05/10 23:46

合っているかわからないものだけ見せられて何がしたいか伝わりますか?
退会済みユーザー

退会済みユーザー

2020/05/10 23:50

あっているかわからないから質問しているのですが それに”スクリプトの内容””ができているかわからないという意味です
Zuishin

2020/05/10 23:51

何がしたいか回答者に伝わらなければ、あっているかをこちらで判断することも、できているかを判断することも、代替案を用意することもできないのでは?
退会済みユーザー

退会済みユーザー

2020/05/10 23:56 編集

改めて文にするとやりたいことは別スクリプトで設定した任意の文字変数を 画像右の青い部分に入れたいという感じです
退会済みユーザー

退会済みユーザー

2020/05/10 23:58

上のスクリプト [SerializeField] private string explanation;を読み取って青文字の場所に入れたいです
Zuishin

2020/05/11 00:03 編集

ここは目につきにくいので、「自分と他人は違う」ということを念頭に、知らない人に十分な状況説明ができるよう質問を書き直すのが良いのではないかと思います。 編集ボタンを押せば追記・修正できます。
退会済みユーザー

退会済みユーザー

2020/05/11 00:00

下のスクリプトは自分でいろいろ調べて仮で作ったスクリプトなのですができてないっぽいので こまってます
退会済みユーザー

退会済みユーザー

2020/05/11 00:08

最初のコメントはそもそもの認識が違うようなのでそこに対して補足しました  編集でスクリプト内にある説明を改めて付け足しました。
sakura_hana

2020/05/11 00:42

プログラムにおいての「合っている」には何段階かあります。 1.エラーが出ず、正常な動作をする(大前提) 2.動作が重い・他プログラムに影響を与える等が無い 3.テスト・デバグや以後の編集(拡張)が容易である teratailで見られるのは大体1です。2、3は全体のプロジェクト構成等に影響される為です。 そしてUnityの場合、「スクリプトは正しく記載されていても、正常な動作をしない(上記1すら満たさない)」場合があります。(シーン上に必要なオブジェクトが存在しない等) https://teratail.com/help/question-tips こちらも参考に、何が起こっているのか・どうしたいのか(何が問題なのか)を明記してください。 (「元データのテキストが表示されない(上記1を満たさない)」、「テキストは表示されるが動作が遅い(上記2を満たさない)」など)
guest

回答3

0

ベストアンサー

BRAK さんの回答をあまり呑み込めていないようなので、補足という形で回答します。

当初の問題に対しての回答

Item.MyExplanation;はエラーです。Itemクラスに定義されているMyExplanationプロパティはstaticではありません。なので、クラス.プロパティの形式ではなくインスタンス.プロパティの形式で記述する必要があります

ExplanationTXTクラスではthis.text = "任意の文字列";と書く事は出来ません。
ExplanationTXTクラスにおいて、this.textの型はstringではなくTextです。ゲーム内で表示する文字列を変えるにはExplanationTXTクラスではなく、Textクラスに定義されているtextフィールドを使う必要があります。

変更後のコードに対しての回答

いろいろ試した結果 コードに変更を加えた結果スクリプト上のエラーは解決しました。

ですがUNITY上で画像のようなエラーが起きてしまいます

(Tokumei3さんの自己回答を参照)

「当初の問題に対しての回答」と原因・解決策は同じです。

staticでないプロパティに対してクラス.プロパティと書くことはできません。
インスタンス.プロパティの形式で記述する必要があります。

補足

この回答を理解するには下記ワードを理解する必要があります。

  • static
  • プロパティ
  • クラス
  • インスタンス

投稿2020/05/12 06:58

編集2020/05/12 07:01
BluOxy

総合スコア2663

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

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

退会済みユーザー

退会済みユーザー

2020/05/12 07:46 編集

ではMyExplanationをSTATICで宣言すればいいんですかね?
BluOxy

2020/05/12 07:50

まず、staticにすべきか否かを決める必要があります。 すべきなら、そのように定義すれば良いです。
BluOxy

2020/05/12 08:06 編集

Itemとはクラスのことを指しています。インスタンスではありません。 クラスとインスタンスの違いは理解しているでしょうか。 (追記)↑は間違いです。 ExplanationというプロパティはItemクラスに存在していないように思います。
BluOxy

2020/05/12 08:09

Itemクラスが持っているプロパティはExplanationではなく、MyExplanationではないでしょうか。
BluOxy

2020/05/12 08:10

また、コメントに添付したコードは質問内容に記載してください。 他の回答者が現在の質問内容を見ても何も分からないと思います。
BluOxy

2020/05/12 08:12

私も「Text ChangeTXT =MyItem.Explanation;でエラーが出ている」という情報は書かれるまで分かりませんでした。ということは他のユーザーはもっとついてこれていないと思います。
退会済みユーザー

退会済みユーザー

2020/05/12 08:24 編集

元々は出ていなかったのですがスクリプトを変更した際に出てきたものなので追記し忘れていました
退会済みユーザー

退会済みユーザー

2020/05/12 08:18

少々お待ちを
退会済みユーザー

退会済みユーザー

2020/05/12 08:32

using System.Collections; using System.Collections.Generic; #if UNITY_EDITOR using UnityEngine; using UnityEngine.UI; public class ExplanationTXT : MonoBehaviour { private Item item; public Item MyItem { get => item; set => item = value; } public virtual void SetExplanation(Text text) { Text ChangeTXT = !MyItem.MyExplanation;! !マーク内でエラーが出ました。 エラー CS0176 インスタンス参照でメンバー 'Item.MyExplanation' にアクセスできません。代わりに型名を使用してください } } #endif
BluOxy

2020/05/12 08:37

まず、MyExplanationをstaticにするか否かを決めてください。 するならMyItem.MyExplanationではインスタンス.プロパティの形式となっているのでエラーです。 クラス.プロパティの形式にしなければいけません。 しないならMyExplanationからstaticを外してください。
退会済みユーザー

退会済みユーザー

2020/05/12 08:40

後々ドロップ関数が呼ばれたタイミングで変更を加えるのでスタティックにすべきですかね?もしそうであれば スタティックにします
BluOxy

2020/05/12 08:41

staticの特性がわからなければ(staticの意味を理解せずにクラス.プロパティと書いている場合)、使わない方が火傷しなさそうですから、後者で良いのではないでしょうか。
BluOxy

2020/05/12 08:43

staticにするとItemのインスタンスが複数存在するときにそれぞれが1つのMyExplanationプロパティを持つことになります。 上記文章の意味がわからなければstaticを使わない方が良さそうです。特性を理解した上でどちらにするか決めた方が良いです。
退会済みユーザー

退会済みユーザー

2020/05/12 08:45

ではスタティックを外した場合なんですが スクリプト上では赤いボーダーラインが出ないのですがUNITY上では画像(追加します)のようなエラーが新しく出てきます
退会済みユーザー

退会済みユーザー

2020/05/12 08:48

スタティックはやめます
退会済みユーザー

退会済みユーザー

2020/05/12 08:49

MyExplanationを読み取ってただそれをChangeTXTに入れることができればそれでいいので
BluOxy

2020/05/12 09:12 編集

また、1つの質問で問題数が多すぎるので、質問を分けていただきたいです。 全てが完成するまで最後まで付き合うのはとても辛いです。給料があるなら頑張れますが。 ここではコンパイルエラーが出たことに対する質問に対して回答しました。 CS0176やCS1061のエラーについてはまずは自分で調べてください。 うまくいかなければ、参考にしたページを添付した上で改めて質問してください。 それで一度質問をクローズしませんか。
退会済みユーザー

退会済みユーザー

2020/05/12 09:09

了解しました
退会済みユーザー

退会済みユーザー

2020/05/12 09:15

やっぱりわからなかったので 別の質問として各エラーを質問してみます
BluOxy

2020/05/12 09:17 編集

分からない部分を整理した上での質問なら良いと思います。 こちらの質問はベストアンサーを選んでクローズをお願いします
guest

0

Textに参照させるプログラムに問題があるっぽいですね

C#

1public void OnSetExplanation() 2 { 3 text.text = item.MyExplanation;//ここの部分に対して ☆の変数を画像の青い部分に対して格納したい処理 4 }

前に書いた文を読んではいませんがやりたいことはわかりますよ。
ちなみに違う個所はtext.textこの箇所

投稿2020/05/11 00:39

BRAK

総合スコア98

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

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

退会済みユーザー

退会済みユーザー

2020/05/11 00:45

やっとまともにわかってくれる方が来た! ありがとうございます
BluOxy

2020/05/12 03:58

> Tokumei3さん これで解決しませんか。しなければ解決しない部分をこの回答のコメントに書き、解決したならばこの回答にベストアンサーを選択してください。
退会済みユーザー

退会済みユーザー

2020/05/12 05:48

間違ってベストアンサーを選んでしまいました 結果としては反映できませんでした。
退会済みユーザー

退会済みユーザー

2020/05/12 05:50

改めてここで投稿するので少々お付き合いをお願いします
BluOxy

2020/05/12 05:50

ベストアンサーは外せます。 >結果としては反映できませんでした なぜ反映できなかったかを質問文に記載すると正しい回答がもらえる可能性があります
退会済みユーザー

退会済みユーザー

2020/05/12 05:59

別の回答として投稿しましたのでご確認お願いします
退会済みユーザー

退会済みユーザー

2020/05/12 06:35 編集

ベストアンサーをはずしました
guest

0

更新しましたこのコメントは無視してください

投稿2020/05/12 05:58

編集2020/05/12 07:18
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2020/05/12 06:34 編集

生成するためのオブジェクトが出ないという感じのエラーです
BluOxy

2020/05/12 06:51 編集

この画像を見るに根本の問題(本当に知りたい疑問)は「別スクリプトで設定した文字変数をプログラムでText(Script)に入れたい」ではなく「なぜこのコンパイルエラーが出るかが分からない」ではないでしょうか。 また、質問は修正できますので、回答ではなくそちらで対応をよろしくお願いします。
BluOxy

2020/05/12 07:03

また、画像とコードが不一致しているので、どちらが新しいコードかが分かりません。 人の混乱を招きます。
退会済みユーザー

退会済みユーザー

2020/05/12 08:26 編集

なるほど新しく質問内容へ書き直したスクリプトのほうが新しいものとなります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問