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

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

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

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

Unity

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

Q&A

解決済

1回答

7049閲覧

Unity Inspector上でオブジェクトの指定をしないでスクリプトから取得するには

Hutax

総合スコア32

C#

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

Unity

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

0グッド

2クリップ

投稿2016/09/22 03:25

編集2016/09/22 04:24

###前提
Unityでシステムを作成しならが、プログラミングの勉強をしています。
作成していく中で、疑問に感じたことがあったので、質問させていただきました。

###質問内容
uGUIでプログレスゲージ
参考サイトとして用いております、リンク先のような、円ゲージを用いた表示を試してみたいと考え、作成に取り掛かっています。

上記の参考サイトでは、
public Image CircleGauge;
public Image BarGauge;
を加え、UnityのInspector上で、ゲージを調整したいImage画像をD&Dで設定していますが、この操作をスクリプト上で行いたいと考えました。

InspectorにD&Dせずに、スクリプトから、ゲージを調整したいimageオブジェクトを指定し、ゲージの値を設定できる方法がございましたら、ご教授お願いできませんでしょうか。

よろしくお願い致します。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Resourcesフォルダを使うとスクリプトから読み出せますよ。
色々方法はありますが一般的な方法かと思います。ResourcesフォルダはUnity上で特殊な意味を持つフォルダでして、画像に限らずResourcesフォルダ内に入れたものをResources.Loadメソッドでスクリプトから読み出せるというものになります。詳しくはこちらを参照ください-> https://docs.unity3d.com/ja/current/ScriptReference/Resources.html

###使い方説明 下準備

  1. Resourcesフォルダを適当な場所に制作
  2. 読み出したい画像を制作したフォルダ内に配置 仮にp1.pngとしておきます。

準備完了
今後も使いそうでしたらわかりやすいようにResources/progressなどのフォルダを作ってその中に入れてもいいと思います。とりあえず今回は入れている程で進めます。

###実装
・画像の配置場所を以下と仮定して進めます。
Resources/progress/p1.png
・Imageコンポーネントはインスペクタから設定すると仮定します

C#

1using UnityEngine; 2using System.Collections; 3using UnityEngine.UI; 4 5public class resourcesManager : MonoBehaviour { 6 7 [SerializeField] 8 Image imgRender; 9 string progressFolder = "progress/"; 10 11 void Awake (){ 12 //画像の読み出し 13 imgRender.sprite = getSprite(progressFolder + "p1"); 14 //画像を破棄 15 imgRender.sprite = null; 16 //メモリ上から破棄 ※この画像に限らず使用していないものはすべてメモリ上から破棄されるメソッドです。 17 Resources.UnloadUnusedAssets(); 18 19 //もし画像がスライスされているものなら 20 Sprite[] sprites = getSprites(progressFolder + "p1"); 21 imgRender.sprite = sprites[0]; 22 } 23 24 public Sprite getSprite(string imgName) 25 { 26 return Resources.Load<Sprite>(imgName); 27 } 28 29 public Sprite[] getSprites(string[] imgName) 30 { 31 Sprite[] sprite = new Sprite[imgName.Length]; 32 for(int i = 0; i < sprite.Length; i++){ 33 sprite[i] = getSprite(imgName[i]); 34 } 35 return sprite; 36 } 37}

###最後に 結構画像使うアプリならResouces.Loadおすすめです。
インスペクタ上で画像を設定するということは起動直後にメモリ上に展開するということになります。画像自体が軽くてもメモリ上に展開すると数倍〜数十倍の重さになることもあるのでバカにできません。起動直後使用しない画像はスクリプトから読み出したい時以外でもResourcesフォルダの使用をお勧めします。アプリによって効果は様々なので一度画像のメモリ使用量をProfiler上のMemory->Texturesから確認してみてもいいかもしれません。

###Resoucesフォルダの注意点
Unityはビルド時に使用していないものをアプリ内に含まれないようにしますが、Resoucesフォルダ内は例外なので必要無いものを残さないようにご注意ください。

投稿2016/09/22 07:29

編集2016/09/22 10:52
IShix

総合スコア1724

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

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

Hutax

2016/09/22 09:07

IShikawan様 ご回答ありがとうございます。 Resouces.Loadの使い方について、とても丁寧に教えていただきまして、ありがとうございます。ソースコードまで載せていただき、大変分かりやすかったです。 無事行いたい処理もResouces.Loadを用いてできました!
IShix

2016/09/22 10:50

無事実装できてよかったです。 そういえばもう一点伝え忘れていたのですが、Unityは使用していないものをアプリ内に含めないようにビルドされますが、Resoucesフォルダ内は例外で必要無いものを入れっぱなしにしないように注意してくださいね。
Hutax

2016/09/22 12:15

IShikawan様 ご丁寧に注意点までご教授していただき、ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問