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

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

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

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

Unity

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

Q&A

解決済

1回答

652閲覧

[Unity]オブジェクトのリストにアタッチしたPrefub内のデータにアクセスする方法について

FujiBayashi

総合スコア19

C#

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

Unity

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

0グッド

0クリップ

投稿2021/07/23 10:17

前提・実現したいこと

UNITYで「オブジェクトにアタッチしたスクリプト」から
そのオブジェクト内のリストにアタッチしたPrefubのコンポーネント内のデータ」にアクセスしたいのですが、
どうにもうまくいきません…。
かなり基本的な質問で申し訳ありませんが、ご教授いただければ幸いです。

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

Assets\Scripts\Test.cs(16,34): error CS1061: 'object' does not contain a definition for 'spriteData' and no accessible extension method 'spriteData' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)

該当のソースコード

TestObjectの内容

オブジェクトは「TestObject」及び、プレハブ化している「TestPrefub」です。
スクリプトは「Test.cs」及び「TestData.cs」です。

TestObject」にコンポーネント「Test.cs」を持たせています。
Test.cs」のコードは次のとおりです。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class Test : MonoBehaviour 6{ 7 public GameObject[] _TestPrefabs = new GameObject[1]; 8 private Sprite testSprite; 9 private object testPrefub0; 10 11 void Start() 12 { 13 testPrefub0 = _TestPrefabs[0].GetComponent<TestData>(); 14 testSprite = testPrefub0.spriteData; 15 } 16}

これによりInspectorに生成されたサイズ1のリストに「TestPrefub」をアタッチしています。↓

イメージ説明
※TestPrefubはScene内にはなく、Projectウインドウから直接アタッチしています。

######Test Prefubの内容
TestPrefub」にコンポーネント「TestData.cs」を持たせています。
TestData.cs」のコードは次のとおりです。

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class TestData : MonoBehaviour 6{ 7 [SerializeField] public Sprite spriteData; 8}

これによりInspectorに生成されたスプライト領域に画像(TestSprite.png)をアタッチしています。↓

イメージ説明

試したこと

testSprite = testPrefub0.spriteData;が無ければエラーが消えるので、
TestPrefub」内の「TestData」をコンポーネントとして取得することには成功しています。

しかし、その「TestData」の中にある「SpriteData」を参照するコードが
testSprite = testPrefub0.spriteData;ではダメ、という事のようです。

変数の型を変更しても正常に機能せず、どのように参照すればわかりません…。

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

Unity 2020.3.14f1(LTS)

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

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

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

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

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

tsuki01

2021/07/23 12:30

> 変数の型を変更しても正常に機能せず、 とありますが、以下に変更してもエラーが出るということでしょうか? ・変更前:private object testPrefub0; ・変更後:private TestData testPrefub0;
FujiBayashi

2021/07/23 13:07

ありがとうございます。その記述で試したところ、解決いたしました。 解ってみると大変基礎的なことでお恥ずかしい限りです。 (是非「回答」として再投稿いただければベストアンサーとして質問をクローズさせていただきます)
tsuki01

2021/07/23 13:24

ご確認とコメントありがとうございました。 回答にて再投稿させて頂きました。
guest

回答1

0

ベストアンサー

コメント頂きましたので、回答にて改めて投稿いたします。
Testクラス内、「testPrefub0」の型を以下の様に変更してみてください。

diff

1public class Test : MonoBehaviour 2{ 3- private object testPrefub0; 4+ private TestData testPrefub0; 5 6}

投稿2021/07/23 13:23

tsuki01

総合スコア1751

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

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

FujiBayashi

2021/07/23 13:26

ありがとうございます! 解ってみると大変基礎的なことでお恥ずかしい限りです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問