🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Unity

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

Q&A

解決済

1回答

2391閲覧

2D Objectのスプライトにスクリプトから画像を貼り付けたい

Grass_64

総合スコア4

Unity

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

0グッド

0クリップ

投稿2021/03/04 15:26

編集2021/03/05 13:50

前提・実現したいこと

Unityでゲームを作ろうとおもっております。
2D Object>Spritesで生成したオブジェクト名"Char"に
スクリプトから別の画像を貼り付けたいです。
Hierarchyには
Char(2D Object>Sprites Spriteに”C001”)
GameObject(ImageControl.cs)
AssetにTexturesフォルダ以下に
C001.png
イメージ説明
C002.png
イメージ説明
があります!
■■な機能を実装中に以下のエラーメッセージが発生しました。

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

元の画像(C001)が消えて、新しい画像(C002)は表示されない

該当のソースコード

Unty

1using UnityEngine; 2using System.Collections; 3 4public class ImageControl : MonoBehaviour 5{ 6 //定数定義 7 const string BASE_TEXTURE = "Textures/C002"; 8 9 void Start() 10 { 11 //テクスチャを貼りたいゲームオブジェクトの配列生成(タグ名は「Char」) 12 GameObject spriteObjects = GameObject.Find("Char"); 13 14 //スプライト画像の配列生成(テクスチャ画像の読み込み) 15 Sprite sprites = Resources.Load<Sprite>(BASE_TEXTURE); 16 17 //ゲームオブジェクトのスプライトレンダラ設定を取得 18 GameObject sp = GameObject.Find("Char"); 19 SpriteRenderer spObRender = sp.GetComponent<SpriteRenderer>(); 20 21 spObRender.sprite = sprites; 22 23 } 24 25 void Update() 26 { 27 28 } 29

試したこと

https://qiita.com/ntkgcj/items/61faa07e5a24c59fa950
こちらを参考にしていたのですが、配列など組み込まれていて、
理解が及びませんでした。
foreach (GameObject sp in spriteObjects)
ここの一文で宣言している”sp”がキモだとは思うのですが。
動かすと画像は消えるので、ロードしたデータが間違ってるのか、
Charのspriteへの渡し方が間違ってるかですよね。
ご指導よろしくお願いします。
イメージ説明
イメージ説明
指摘いただいてResouces.Loadの後にデバッグ文を追加しましたが
Debug.Log("sprites :" + sprites);
内容が表示されていないですね

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

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

AssetにTexturesフォルダ以下に

Resources.Loadを利用する場合、対象のスプライトを格納する階層を以下の様にしたら改善しませんでしょうか。
※こちらで試したところ階層修正するだけでスプライト表示は行えたのですが、完全に状態を合わせているわけではないので、動作しなかったらすみません。

階層: Assets > Resources > Textures > C002
(Resourcesを追加する)

・参考URL
スクリプトからアセットを読み込む

投稿2021/03/04 16:02

編集2021/03/04 16:03
tsuki01

総合スコア1751

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

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

Grass_64

2021/03/05 12:54

ありがとうございます。 修正してみたのですが、反映されなかったです。 参考URLにあるように Sprite sprites = Resources.Load<Sprite>(BASE_TEXTURE); を Sprite sprites = Resources.Load<Sprite>("Textures/C002"); とか Sprite sprites = Resources.Load("Textures/C002") as Sprite; とか Sprite sprites = Resources.Load(BASE_TEXTURE) as Sprite; とやってみたのですが、 いざプログラムを流すと CharのスプライトがNone(Sprite)に変わっています。 Charに書き込む手順が間違ってるんでしょうか
tsuki01

2021/03/05 13:14 編集

ご確認ありがとうございました。 提示されているコードでこちらは読み込みされてますし、処理自体も間違っている様には見えないので大丈夫と思ったのですが。。直ぐに解決できずすみません。 追加で以下のご確認をお願いできますでしょうか? 1、C002.pngが格納されている階層のキャプチャを質問に添付して頂きたい。(階層が分かる形でキャプチャを頂きたいです) 2、スプライトをResources.Loadした次の行に、以下を追加して、ログに何が表示されるか確認して頂きたい。(スプライトが読み込まれているかを確認するため) Debug.Log("sprites :" + sprites); 3、C002.pngの「Texture Type」が、ちゃんとSpriteになっているかどうか(インスペクターからご確認ください。もしくはインスペクターのキャプチャでも良いです)
Grass_64

2021/03/05 13:17

GameObjectに張り付けていたImageControl.csを Charのスプライトに移してみたけれど、変わらないです。 関連した質問を見ても、あっているような気がするのですが どこを見落としているのでしょうorz
Grass_64

2021/03/05 13:19

ありがとうございます!タイミングが被っていましたね。 画像を見てもらおうと、ちょうどキャプチャしたんですが、 キャプチャ画像どうやってアップするかちょっと確認してます。
Grass_64

2021/03/05 13:32

指摘いただいた Debug.Log("sprites :" + sprites); ですが、余白でした。ロードできていないってことですよね 002.pngもSprite(2D and UI)になっていました。
tsuki01

2021/03/05 13:53 編集

キャプチャありがとうございました。 「Resources」をスペルミスしています。修正して再度実行したらどうなりますでしょうか? ※ソースコードは、一番最初に質問した時のままで実行お願いします。 ・誤:Resouces ・正:Resources
Grass_64

2021/03/05 14:02

Σ!!! 動きました!!!!!! 今回の修正で色々進みそうです! アセットフォルダ名のスペルミスとは、、なかなか恥ずかしいですね! エディターが賢いので、なかなかスペルミスとか減っているなぁと感じてはいたのですが、 り、そーっすか! おあとがよろしいようで!
tsuki01

2021/03/05 14:09

動いた様で良かったです(笑) フォルダ名は特にエラーとかないのでミスしやすいですよね。 早々に試して頂いてありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問