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

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

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

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

Q&A

解決済

1回答

1300閲覧

別スクリプトの変数の実体化について

NOOBPROGRAM

総合スコア1

Unity

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

0グッド

0クリップ

投稿2020/05/20 06:45

編集2020/05/23 02:44

実現したいこと
Item.CSのMyExplanationを読み取り、コード1のSetExplanation関数にて元データMyExplanationの内容をuiTxtの中に格納するという処理を作ったのですが、エラーはないのに処理が実行されなくて行き詰っています。

問題点
これに対していろいろと模索したところMyItemの実体が存在していないという結論にいたり、いろいろ試しているのですが”別スクリプトの変数の実体化”というものを記述する方法がわからないのでご教示いただければ嬉しいです。
(GetComponentを使えばいいのかNEWの形を使えばいいのかなど)

元データ

using System.Collections; using System.Collections.Generic; using UnityEngine; [CreateAssetMenu(fileName = "Items", menuName = "Items/items")] public class Item : ScriptableObject { [SerializeField] private string explanation; public string MyExplanation { get => explanation; } //読みとる用 }

コード1 (参考にして作った実際に機能するスクリプト)

using

1using System.Collections.Generic; 2#if UNITY_EDITOR 3using UnityEngine; 4using UnityEngine.UI; 5 6public class ExplanationTXT 7{ 8 private Item item; 9 10 public Item MyItem { get => item; private set => item = value; } 11 12 private string stringTxt; 13 14 private Text uiTxt; 15 16 public void SetExplanation(Text etext) 17 { 18 19 //new MyItem MyExplanation(); 20 stringTxt = MyItem.MyExplanation; 21 uiTxt = GameObject.Find("ChangeTXT").GetComponent<Text>(); 22 23 uiTxt.text = this.stringTxt;//ここでMyExplanationの内容を入れる 24 } 25} 26#endif 27 } 28} 29 30

追記1

イメージ説明
SAKURAさんの回答をふまえ、エラーにならない原因は画像の内容のせいかなと思います
[CreateAssetMenu(fileName = "Items", menuName = "Items/items")]
でこのようなデータを作っておりそれぞれに「〇〇の文」というふうに内容を設定しております。 

追記2
この件に関して個人的に聞いてみた方からここを見てもらった後に頂いたコメントなのですが


エラーが無いという事と、ざっとコードを見た感じから、MyItemの実体が無いというのは合ってる気がします。
teratailに貼ってあるコードが省略されてる部分があるなら、話は変わってくるかもしれませんが。

public class ExplanationTXT { private Item item; public Item MyItem { get => item; private set => item = value; } ExplanationTXT

クラスの実装を見ると MyItem プロパティは item フィールドを読み取って返します。
でも item フィールドに、中身を代入するコードが見当たらないので、MyItem プロパティには実体がない様に見えます。
なので stringTxt = MyItem.MyExplanation しても stringTxt フィールドには何も代入されていない(空文字列が代入されている?)様に思います。


という回答を頂きました。ですがここでプログラム初心者なもので太文字の部分に対する対応として実際にコードに記述するとするならばどういうモノを入力すればこの問題が解決するのかがわからなく、詰まっています。
ご教示お願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

ScriptableObjectの場合はScriptableObjectインスタンス(アセット)を生成した時点で実体化されます。
ScriptableObject - Unity マニュアル

正しくインスタンスが生成出来ているか、ExplanationTXTでそれが取得出来ているかを確認してください。
(見た感じこのコードだとエラーになる気がします)
(エラーにならないとすると、多分何かしらの理由でItemクラス(ScriptableObjectのインスタンスではない)がMyItemに入っていて、explanationの中身は空なのでMyExplanationの結果も空、結果的に何も表示されず処理が実行されていないように見えるのではないかと思います)


public Item MyItem { get => item; private set => item = value; }
この部分を
public Item MyItem;
こうしてから、
ExplanationTXTを付与しているGameObjectを選択→インスペクタ上のExplanationTXTコンポーネントの「My Item」に作成したItemのScriptableObjectインスタンスをドラッグ&ドロップ
で出来ませんか?

これは他オブジェクト参照を取るUnityでの基本的な操作です。この部分が分からない場合はUnityのチュートリアルを先にやった方がよいです。
また、動的にセットしたい場合(例えばResources.Loadしたい等)はやり方が異なりますが、とりあえず第一歩としてこれをやってみてください。

投稿2020/05/20 07:00

編集2020/05/22 09:07
sakura_hana

総合スコア11425

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

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

NOOBPROGRAM

2020/05/20 07:18

こちらの回答を踏まえエラーにならない原因となるものをついきしました
NOOBPROGRAM

2020/05/20 07:19

質問のCSの方も再編集しました。
NOOBPROGRAM

2020/05/20 07:24

正しくインスタンスが生成出来ているか、ExplanationTXTでそれが取得出来ているかを確認してください。というところで確認の方法というのを教えていただけたら嬉しいです。
sakura_hana

2020/05/20 08:06

スクショを見る限り、インスタンスの生成は正常に出来ています。 ExplanationTXTのコードはこれだけですか? SetExplanationメソッド自体は呼ばれていますか?(メソッドの先頭に「Debug.Log("SetExplanation");」などと追加し、ログが表示されるか確認してください)
NOOBPROGRAM

2020/05/21 04:52

追記いたしましたよろしくおねがいします
sakura_hana

2020/05/22 09:08

ベストアンサー付いていたので解決済みだと思っていました。回答追記しましたのでご確認ください。 なお既に指摘が入っていますが回答として書くとこちらが気付かない場合があるのと他の閲覧者さんが混乱するので、質問を編集するようにしてください。
NOOBPROGRAM

2020/05/22 22:25

わかりました修正いたします
NOOBPROGRAM

2020/05/22 22:28

回答を見つけた気でいたのですがそれで解決しなかったのでもう一度ご教示お願いいたします
NOOBPROGRAM

2020/05/23 06:42

できるようになりましたありがとうございます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問