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

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

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

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

Q&A

解決済

1回答

2127閲覧

unity scrollview itemの取得が出来ない

29507-01

総合スコア46

Unity

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

0グッド

0クリップ

投稿2020/03/24 10:29

編集2020/03/28 09:25

前提・実現したいこと

scrollViewをクリックした時にテキストの内容を取得したいのですが,
最後の内容がセットされます。

NODE

デバック(イメージの部分をクリックした結果)
イメージ説明

Imageのクリック
イメージ説明

該当のソースコード

unity

1 public void ChangeGazo() 2 { 3 var textaa = Node_Label; 4 Debug.Log("puzzle-x!" + textaa); 5 } 6

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

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

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

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

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

sakura_hana

2020/03/25 01:38

「どのScrollViewを〜」ということは、ScrollViewが複数あるということですか? "Node_Label"という名前のオブジェクトが複数あったりしますか?
29507-01

2020/03/25 09:03

返事が遅くなり申し訳ありません。 ScrollViewもNode_Labelも一つしかありません。 どのスクロールバーを押しても最後のデータを取って来ているようなのです。
sakura_hana

2020/03/25 10:26

Node_Labelが1つしかないなら、そこのデータを取ってくるのは当然ではないですか? (このスクリプトは「シーン上にあるNode_Labelという名前のオブジェクトの子であるTextを取得」という意味ですが)
29507-01

2020/03/25 10:34

クリックしたラベルの取得方法を教えて欲しいのですが。
sakura_hana

2020/03/25 10:48

「ScrollViewをクリックした時、Node_LabelオブジェクトのTextコンポーネントを取得したい」というのなら、このコードがそうです。(ScrollViewをクリックした時にChangeGazoメソッドを呼んでいる場合) 「最後の内容(データ)」の意味と、何が問題なのか分かりません。 普通は「クリックした時のデータ=最新のデータ=最後のデータ」だと思うのですが、どうなることを希望しているのですか?
29507-01

2020/03/25 10:58

データを読み込みそれをScrollViewに表示していくのですが,3件あった場合 1番目がaaa,2番目がbbb,3番目がcccの時 私の方法ではどれをクリックしても cccを表示しているという結果です。
sakura_hana

2020/03/25 11:05

「Node_Labelオブジェクトの子オブジェクトとして3つのGameObjectが生成され、このGameObject名はそれぞれaaa,bbb,cccであり、それぞれTextコンポーネントが付いている。子オブジェクトのいずれかをクリックした際、ChangeGazoが実行される」という認識で合っていますか?
29507-01

2020/03/25 11:20

画像を添付しました。 NodeLabelというよりはNodeObjectが3件作成されその中に各々NodeLabelが存在するという形
29507-01

2020/03/25 11:32

参考URLを添付しましたが,ClickしてItemを取得するチュートリアルが全然ないのです。
sakura_hana

2020/03/25 11:43

まぁそこは普通のUIの領域ですから、これ専門のチュートリアルは無いでしょうね。 「RoomNodeオブジェクトの子オブジェクトとして入室ボタンオブジェクトとNode_Labelオブジェクトが存在している」「RoomNode (1)の子の入室ボタンが押されたら、RoomNode (1)の子のNode_Labelオブジェクトに付いているTextコンポーネントを取得する」という認識で合っていますか?
29507-01

2020/03/25 11:51

そうです。 Nodeオブジェクトの子オブジェクトとしてScroll_Image,Text,Node_lableがありNode_lableをクリックするとChangeGazo()に処理が移るようにしています
Hawn

2020/03/25 18:09 編集

↓sakura_hanaさんのコードでNullReferanceだったという話を考慮してのコメント
Hawn

2020/03/25 18:09 編集

構成的な問題があるかもしれないので RoomNodeの子要素まで映した画像とNode_labelのInspector情報が映った画像見せて頂けませんか?
Hawn

2020/03/26 07:10 編集

RoomNodeというオブジェクトはシーン内に存在しないのですか...。 参考URLにも見当たらないというかTECH Projinの画像なので何の為に載せているのか不明です。 勘違いが発生するので意図的では無いにしても質問の際は気を付けた方が良いです。 hanaさんの「~認識で合っていますか?」という確認も無駄にしかなっていません。 NodeObjectクラスをアタッチしたオブジェクトは結局のどれになるのでしょうか?
29507-01

2020/03/26 09:03

RoomNodeというは最初にイメージとして添付した画像になります。 なのでその添付画像と参考URLは削除します。そのまま添付している画像が実際のNodeとNode_Labelで Node_Lableに内容をセットしてあります。
29507-01

2020/03/26 09:13

すみませんでした。 変な添付画像をセットしたためRoomNodeオブジェクトの名前があたかも実際 の名前になってしまいました。画像を貼り付け直しています。
guest

回答1

0

ベストアンサー

色々やり方あると思いますが参考までに。

C#

1public class NodeObject : MonoBehaviour { 2 Text nodeLabel; 3 4 void Start() { 5 nodeLabel = transform.Find("Node_Label").GetComponentInChildren<Text>(); 6 } 7 8 public void ChangeGazo() { 9 // ラベルを使った処理(とりあえずログを出す) 10 Debug.Log(nodeLabel.text); 11 } 12}

これをRoomNodeオブジェクトに付けてください。
(要はGameObject.Findではなくtransform.Findを使う。こうすることで「自身の子であるNode_Labelという名前のオブジェクト」を取得する)
(コンポーネントの取得は一度だけでいいのでStartでやっている)

投稿2020/03/25 12:03

sakura_hana

総合スコア11427

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

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

29507-01

2020/03/25 12:14

void Start() { nodeLabel = transform.Find("Node_Label").GetComponentInChildren<Text>(); } この箇所でNullReferanceでこけてしまいます
sakura_hana

2020/03/25 12:15

対象のGameObject名は確実に「Node_Label」になっていますか? 大文字小文字も完全一致させる必要があります。
29507-01

2020/03/25 12:43

RoomNodeオブジェクトに付けてください。 この部分が上手くいってないようです。この部分を貼り付けるとScroll自体が動かなくなります。2〜3日考えてみます。
29507-01

2020/03/25 12:55 編集

現在Panelの下のNodeに NodeObject ClassがセットしてありクリックするとChangeGazo()に飛んで来ます。 私のところでいうNode_Labelには貼り付けていません 少し考えます。
sakura_hana

2020/03/26 01:10

■回答のコード(NodeObject)を使う場合 コードを付けるのは「Node」です。「Node_Label」には何もしなくていいです。 この場合既存の「Button Class」は不要です。クリックした時、「Button ClassのChangeGazo()」ではなく「NodeObjectのNodeObject()」を実行するようにしてください。 ■既存のコード(Button Class)を使う場合 既に「Node_label」変数が見えているので、これをそのまま使ってもいいです。 インスペクターで見えているこの変数に、「Node_Label」オブジェクトをドラッグ&ドロップしてください。 後は「Button ClassのChangeGazo()」の中でそのままこの変数を使えばいいです。 (回答のコード(NodeObject)は不要です) ■スクロールが動かない件 恐らくNodeObjectコードは無関係です。 あるとすれば「クリックの為に付けた機能がスクロールを阻害している」という線なので、こちらに問題が無いか調べてみてください。
29507-01

2020/03/26 10:51 編集

有難うございます。
29507-01

2020/03/26 10:26 編集

Node_Label」オブジェクトをドラッグ&ドロップして Button ClassのChangeGazo()」の中で 処理を実行したのですがNullになりました。しかし実行時のNodeLabelのTextにはクリックした内容ではないようですが表示されています 画像も添付しました
sakura_hana

2020/03/27 04:52

何の処理を実行した時に、何がNullになったのですか? それをどう確認しましたか? (「デバッグログにNullと表示された」と「NullReferanceエラーが出た」は意味するものが違います) ChangeGazo()の中身は質問文内のコードと全く同じですか?(これ以外のコードが含まれていませんか?) 今提示されているコードにはNodeLabelのTextの内容を操作する部分が一切存在しないので、もしクリックが成功したところで何も変化が無くて当然です。(質問文のコード、私の書いたコード共にデバッグログが出るだけです) 恐らく別のコードでテキスト内容を設定しているだけだと思います。 ちなみに var textaa = Node_Label; Debug.Log("puzzle-x!" + textaa); これで表示されるデバッグログは、Node_LabelのTextに書かれた文字列ではありません。自分の認識通りかご確認ください。 (Node_Labelが何らかの理由でnullなら「puzzle-x!」、Node_Labelが入っているなら「puzzle-x!Text (UnityEngine.UI.Text)」と表示されます)
29507-01

2020/03/27 07:45

Image部分をクリックし,ButtonClass の箇所で止まりました。 画面を添付しましたが質問内容とあっているでしょうか? 因みに今は省いていますが img.color = Color.red; はクリックした箇所がカラー表示されます。
sakura_hana

2020/03/27 08:41

「Node(Clone)」のインスペクターの画像も頂けますか? あと、スクリプトの全文をください。 public Text Node_label; としておきながら Node_label = GameObject.GetFind("NodeLabel"); のように再代入している部分がある場合、インスペクタから設定する意味が無くなります。 (つまり再代入の結果がnullだった場合、インスペクタで設定していてもnullになってしまいます)
29507-01

2020/03/27 11:16 編集

using UnityEngine; using UnityEngine.UI; using System.Collections; using System.IO; public class ButtonClass : MonoBehaviour { /// Mode作成 private Image img; public Text Node_Label; GameObject lbl_obj; Text node_Label; void Start () { img = GetComponent<Image>(); } void Update () { } public void ChangeRed() { img.color = Color.red; } public void ChangeGazo() { img.color = Color.red; var textaa = Node_Label; Debug.Log("puzzle-x!" + textaa); } } Node_label = GameObject.GetFind("NodeLabel");は最初にテストしていた内容で現在はないです。 Nodeのインスペクタは添付しました。
Tto777

2020/03/27 17:27 編集

Node(Clone)のインスペクタ画像を要求されているのにNode_Labelのインスペクタ画像が出されています。 せめて指示された事はキチンとこなしましょう。
sakura_hana

2020/03/28 05:23

……なんでこれで動かないのか疑問です。 ・先頭のNode(Clone)のButtonClassの「Node_Label(Text)」の部分をクリックすると、自身の子のNode_Labelオブジェクトが選択状態になる。 ・Imageをクリックした時の処理が、「自分の親のNode(Clone)」のButtonClassのChangeGazoを指している。 とりあえず上記を確認してみてください。
29507-01

2020/03/28 09:29

すみませんでした。 私のやり方が悪いのですがテスト時,Image部分をクリックしていてScroll_image部分にNode_LableをDrag,Dropしたら取り込むことができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問