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

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

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

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

Unity

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

Q&A

解決済

3回答

8135閲覧

Unityでテクスチャをスクリプトで設定するには?

takuson

総合スコア36

C#

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

Unity

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

0グッド

0クリップ

投稿2019/05/21 02:50

編集2019/05/24 04:47

unityにてUIのPanelにテクスチャをスクリプトから指定して貼りたいと思ったのですが、うまくいきませんでした
自分でいろいろ調べたのですがよくわからず、とりあえず下記のサイトを参考にやっては見ました

https://dennou-note.blogspot.com/2014/01/unity_20.html

私はunityを始めて日が浅く、C#もその時初めて触ったぐらいなのでまだよく書き方がわかっていない状態です

一応自分で書いてみたプログラムが以下のものです

C#

1 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7public class TextureSet : MonoBehaviour 8{ 9 10 const string TEXNAME_SEN1 = "Texture/j_seikai01"; 11 12 private void Start() 13 { 14 Texture2D J_SEIKAI01; 15 J_SEIKAI01 = Resources.Load(TEXNAME_SEN1) as Texture2D; 16 GameObject go = GameObject.Find("Panel"); 17 if (go) 18 { 19 Debug.Log(go.name); 20 } 21 else 22 { 23 Debug.Log("No game object called wibble found"); 24 } 25 go.GetComponent<Renderer>().material.mainTexture = J_SEIKAI01; 26 } 27 28 // Update is called once per frame 29 void Update() 30 { 31 32 } 33}

実行してみると
NullReferenceException: Object reference not set to an instance of an object....
というエラーが出たので参照がうまくできていないんだと思うのですがどこがおかしいのかがわかりません
(エラー文で「go.Get...」のところがだめだとは言われたのですが何がだめかわかっていない状態です)

わかる方がいらっしゃいましたら教えていただけると幸いです

作成環境
unity 2017.4.2f2
VisualStudio 2017

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

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

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

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

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

takuson

2019/05/24 03:45

質問文を変えました まだサイトのルールを知らず申し訳ありません
k.matsuda

2019/05/24 04:12

GameObject go = null; nullじゃ、だめな気がしますが?
sakura_hana

2019/05/24 04:14

これから知っていってもらえれば大丈夫です! エラー文はそのままググってみるといいです。今回なら「unity NullReferenceException」と検索すると公式リファレンスが出ますし、teratail内でも同様の質問があります。
takuson

2019/05/24 04:46

k.matsudaさん コードを修正しました sakura_hanaさん 公式で検索しエラーが出ないようにプログラムを加えました
takuson

2019/05/24 04:57

プログラムを修正した結果 MissingComponentException: There is no 'Renderer' attached to the "Panel" game object, but a script is trying to access it. You probably need to add a Renderer to the game object "Panel". Or your script needs to check if the component is attached before using it. UnityEngine.Renderer.get_material () (at C:/buildslave/unity/build/Runtime/Export/GraphicsRenderers.bindings.cs:71) TextureSet.Start () (at Assets/TextureSet.cs:24) というエラーがでて 調べたところ「ゲームオブジェクトにレンダラがアタッチされていないのにスクリプトでアクセスしようとしている」らしく、レンダラを追加すればよいとは書いてあったのですがよくわかりません
k.matsuda

2019/05/24 08:27

GameObject go を初期化すれば良いんじゃないかなぁ・・・
k.matsuda

2019/05/24 08:41

unityはよくわかりませんが、 クラス、インスタンス、コンストラクタ 必須項目だと思います。
guest

回答3

0

自己解決

投稿2019/05/28 03:30

takuson

総合スコア36

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

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

0

cs

1GameObject go = null; 2go.GetComponent<Renderer>().material.mainTexture = J_SEIKAI01;

GameObject型のgonullとしているのですが
次の行ではgoのコンポーネントのRendererを参照しようとしています。
「goっていわれてもnullだからRendererなんて見つからんよ」っていうエラーになって怒られています。

投稿2019/05/24 04:42

hogefugapiyo

総合スコア3302

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

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

takuson

2019/05/24 05:08

いま、sprite Rendererを追加したところMissingComponentExceptionというエラーは消えましたがまだテクスチャは貼れていない状態でした
hogefugapiyo

2019/05/24 05:38

正直何がやりたいのかいまいちわかりません。 uGUIのPanelの背景を変えたいってことなら、Renderer ではなく Image コンポーネントのspriteを書き換えれば終わりです。
takuson

2019/05/24 05:57

私がやりたいことはPanelのImageコンポーネントのSource Imageのところに画像をドロップすることでpanelに画像を表示することができますがそれをunity上で行うのではなく、スクリプトでそれと同様のことをしたいということです
hogefugapiyo

2019/05/24 06:06

Imageコンポーネントですよね? だからGetComponentする対象はImageです。 GetComponent<Image>().sprite っていうのが、Source Imageにあたります。
takuson

2019/05/24 09:24

わかりました 早速試したいのは山々なんですが週明けにならないとできそうにないので、月曜日にやってみます
guest

0

こんにちは。
これは回答ではないです。すみません。

いろいろ調べたり質問に起こしたりする前に、まずは「C#/プログラミングの基礎」をちゃんと学習してください。
今の状況は例えるなら、英語を一ミリも読めないし話せない状態で英語圏に行き「英語がわかりません」って言ってるような状態です。
せめて基礎文法くらいは覚えてから……って思いませんか?

幸い、C# という言語は、

  • 豊富な初心者向け基礎情報が「日本語で」
  • 豊富な公式マニュアルやチュートリアルが「日本語で」
  • 豊富な知見やノウハウ情報が「日本語で」

Web や書籍にいくらでも存在する、恵まれた言語です。これらを一時気合を入れて読み進めてみれば、すぐに些細な疑問は自力で解決できるようになります。


何も書かないのも良くないので、、
現時点の質問文のコードにある問題点を解決するには、null の概念と インスタンス の概念を学ぶことが必要です。一度理解してしまえば一生使えるので、頑張って覚えましょう。

投稿2019/05/24 04:35

tamoto

総合スコア4105

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

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

takuson

2019/05/24 05:11

そうですね できれば勉強したいとは考えているのですが... 言い訳がましいですが、なにぶん時間などの関係でちょっとできない状態です。なので余裕ができれば勉強したいです!
tamoto

2019/05/24 05:28

ぶつかった問題、これからぶつかるであろう問題を、その都度調べて対処するのに掛かる時間よりも、一通り入門を終えるのに掛かる時間のほうが短いだろうと思います。 当初の問題を解決したと思ったら、直後にまた別の問題が発覚するを永久に繰り返すことになりかねないです。いえ、既になっていませんか?
takuson

2019/05/24 06:01

そうですね 確かにそんな状態になっていると思います ですが、私は問題にぶち当たりそれを解決することの方がいろいろと頭に入る人間なので...申し訳ない
sakura_hana

2019/05/24 06:49

横から失礼します。 「(いわゆる普通の)C#」と「UnityのC#」は似て非なるもの(正確には「UnityのC#は普通のC#を拡張しているもの」)なので、もしUnityの為に学習するなら「UnityのC#」を学ぶと良いです。 (実際今回詰まっている直接的な部分はUnityのコンポーネントの基礎なので、普通のC#とはあんまり関係無いんじゃないかなと思います。もちろんnullとインスタンスの概念はUnityでも必要なので学ぶ必要はありますが、GameObject特有の動きもあるので普通のC#のつもりでやると逆に混乱するかもしれません)
tamoto

2019/05/24 07:19

補足ありがとうございます。全面的に同意で、C# というよりは、Unity におけるスクリプティングの基礎を学ぶところから始めるのが良いと思います。 問題を解決することで理解を深めること自体はとても良いやり方なので、その問題解決を効率的に進めるための地盤の確立を先にしてください、というだけの話です。 それすらもスキップして、共通認識を持たないまま個別の問題への対応を行うというのは、あまりにも非効率が過ぎると思うのです。 先に全てを頭に入れて、なんてことは全然言っていなくて、入門本とかをとりあえず全ページ流し見してみて、どんな固有名詞が載ってたかぼんやり思い出せる程度からで良いのです。
takuson

2019/05/24 09:27

なるほど やってみます
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問