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

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

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

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

Q&A

解決済

2回答

1182閲覧

動的にSpriteRendererで画像を表示する方法

Jyha1420B1G7DHP

総合スコア9

C#

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

0グッド

0クリップ

投稿2021/04/01 16:14

編集2021/04/03 06:27

前提・実現したいこと

動的にSpriteRendererで画像を表示したいですが、inspectorのspriterendererのspriteにnoneと表示されます。

該当のソースコード

using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; public class CardManager : MonoBehaviour { List<GameObject> OwnHand; List<GameObject> OpponentHand; // Start is called before the first frame update void Start() { OwnHand = new List<GameObject>(10); OpponentHand = new List<GameObject>(10); GameObject card_01 = new GameObject("Card_RedDragon"); card_01.transform.SetParent(GameObject.Find("Canvas").transform); card_01.AddComponent<SpriteRenderer>(); card_01.AddComponent<Card_RedDragon>(); card_01.AddComponent<RectTransform>().anchoredPosition = new Vector3(0, 0, -1); card_01.GetComponent<RectTransform>().localScale = new Vector3(1f,1f,1f); card_01.GetComponent<SpriteRenderer>().sprite = Resources.Load<Sprite>(card_01.AddComponent<Card_RedDragon>().arturl); OwnHand.Add(card_01); } // Update is called once per frame void Update() { } }

arturlはstring型で、ファイルネームが入ります。

試したこと

SpriterendererではなくImageを利用したり、Spriteを返す関数を用意したりしましたがダメでした。
inspectorのDefault references will only be applied in edit modeと書いてあるところで初期設定して見てもダメでした。
Debug.Log(card_01.GetComponent<Card_RedDragon>().arturl);がnullになるので、それをなんとかすれば行けそう?
何度も確認したので、Resourcesに置かなかったとか、ファイルネームを間違えたとかじゃあ断じてないです。最後に、arturlの内容を直接書けば動きますが、それは拡張性がないのでダメです。どうか他の方法を教えてください。お願いします。

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

Unity 2019.4.10f1

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

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

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

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

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

guest

回答2

0

card_01.AddComponent<Card_RedDragon>().arturlこの部分は
card_01.GetComponent<Card_RedDragon>().arturlではないですか?

と思ったんですが、結局Card_RedDragonって直前でAddComponentしてるんですね。
その場合arturlの初期設定がされていない(設定したつもりになっているだけ)とかだったりしませんか?
もしくはarturlを設定済みのCard_RedDragonコンポーネントが既に存在するのに更にAddComponentしているとか。

投稿2021/04/02 00:43

編集2021/04/02 00:46
sakura_hana

総合スコア11425

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

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

Jyha1420B1G7DHP

2021/04/02 01:08

本当だ。それも一つのミスですね。今試して見たんですが、GetComponentでは変わりませんでした(が、そのままGetComponentにしておきます)。 初期設定とのことなんですが、Card_RedDragonと基底クラスにarturlがあり、Card_RedDragonの方のStart()でarturl = "Art_RedDragon";と初期設定がなされています。
guest

0

自己解決

解決しました

どうやら、スクリプトの実行順の問題のようでした。
今回の場合、例に挙げたプログラムが実行されてから初期化プログラム(arturl)が行われていたみたいです。
初期化をAwakeに置くことで解決いたしました。
一応、他の方法も出しておきます。
【Unity】狙った順に処理したい時はスクリプトの実行順を指定する

投稿2021/04/03 23:49

Jyha1420B1G7DHP

総合スコア9

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問