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

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

新規登録して質問してみよう
ただいま回答率
85.69%
Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

Q&A

解決済

1回答

5178閲覧

UnityでTexture2Dを動的に生成したい

yrema

総合スコア286

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。

0グッド

0クリップ

投稿2021/07/11 21:54

・やりたいこと
ピクセルごとのカラー情報からTexture2Dを生成してSpriteとして表示したい。

・問題
どんな色を指定してもグレーになってしまう。

イメージ説明

c#

1 2 private void ShowSample() 3 { 4 SpriteRenderer sr = GameObject.Find("test").GetComponent<SpriteRenderer>(); 5 6 Color[,] colorArray = new Color[128, 128]; 7 int width = colorArray.GetLength(0); 8 int height = colorArray.GetLength(1); 9 for (int y = 0; y < height; y++) { 10 for (int x = 0; x < width; x++) { 11 // とりあえず1色でお試し 12 // colorArray[x, y] = new Color(1, 0, 0, 1); 13 colorArray[x, y] = Color.green; // ★ここをいくら変えても色が変わらない 14 } 15 } 16 // Color配列からTexture2Dを生成 17 Texture2D texture = CreateTexture(colorArray); 18 // Texture2DからSpriteを生成 19 Sprite sprite = CreateSprite(texture); 20 21 sr.sprite = sprite; 22 } 23 24 /// <summary> 25 /// Colorの二次元配列からTexture2Dを生成 26 /// </summary> 27 /// <param name="colorArray"></param> 28 /// <returns></returns> 29 public static Texture2D CreateTexture(Color[,] colorArray) 30 { 31 int width = colorArray.GetLength(0); 32 int height = colorArray.GetLength(1); 33 var texture = new Texture2D(width, height, TextureFormat.RGBA32, false); 34 35 for (int y = 0; y < texture.height; y++) { 36 for (int x = 0; x < texture.width; x++) { 37 texture.SetPixel(x, y, colorArray[x, y]); 38 } 39 } 40 return texture; 41 } 42 43 /// <summary> 44 /// Texture2DからSpriteを生成 45 /// </summary> 46 /// <param name="tex"></param> 47 /// <returns></returns> 48 private Sprite CreateSprite(Texture2D tex) 49 { 50 return Sprite.Create( 51 tex, new Rect(0, 0, tex.width, tex.height), new Vector2(0.5f, 0.5f)); 52 } 53

◆環境
Unity2020.3.0f1
Windows10

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

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

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

下記のような質問は推奨されていません。

  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

guest

回答1

1

ベストアンサー

テクスチャを作ったのち、Applyを行ってみてはいかがでしょうか?

lang

1 /// <summary> 2 /// Colorの二次元配列からTexture2Dを生成 3 /// </summary> 4 /// <param name="colorArray"></param> 5 /// <returns></returns> 6 public static Texture2D CreateTexture(Color[,] colorArray) 7 { 8 int width = colorArray.GetLength(0); 9 int height = colorArray.GetLength(1); 10 var texture = new Texture2D(width, height, TextureFormat.RGBA32, false); 11 12 for (int y = 0; y < texture.height; y++) { 13 for (int x = 0; x < texture.width; x++) { 14 texture.SetPixel(x, y, colorArray[x, y]); 15 } 16 } 17 18 texture.Apply(); 19 20 return texture; 21 }

ちなみに、少量でしたら気にせずとも害は小さいかもしれませんが、もし何度もテクスチャやスプライトの作り直しをする場合は、古いオブジェクトの廃棄にも気を遣っていただくともっと望ましいかと思います。
動的に生成したTextureとSpriteはしっかり管理しよう! - エイリアンプログラム」あたりの記事がご参考になるでしょうか?

投稿2021/07/11 22:18

Bongo

総合スコア10702

yrema👍を押しています

下記のような回答は推奨されていません。

  • 質問の回答になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

このような回答には修正を依頼しましょう。

また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。

回答へのコメント

yrema

2021/07/12 03:37

ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.69%

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

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

質問する

同じタグがついた質問を見る

Unity

Unityは、ユニティテクノロジーが開発したゲームエンジンです。 主にモバイルやブラウザ向けのゲーム製作に利用されていましたが、3Dの重力付きゲームが簡単に作成できることから需要が増え、現在はマルチプラットフォームに対応しています。 言語はC言語/C++で書かれていますが、C#、JavaScript、Booで書かれたコードにも対応しています。