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

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

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

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

Q&A

解決済

1回答

3632閲覧

Unity2DのSetPixelメソッドが機能しません

salaam

総合スコア12

Unity

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

0グッド

0クリップ

投稿2018/12/17 18:42

編集2018/12/17 18:46

前提・実現したいこと

Unity及びプログラミング初心者です。
Unity2Dでスネークゲームを作ろうと思い、下の動画を見ながら写経をしておりました。
youtube
しかし、再生画面は変化なしでした。(補足情報に画像1枚目、2枚目)

原因は自分の環境開発なのか、何度も見直したけれども写経ミスなのか、あるいは他の設定なのかが分かりません。

彼の動画で学んでみたいので、SetPixelメソッドがきちんと反映される様にしたいです。

しかし、ほかの方法でpixelで描画できる方法があればお願いします

何かアドバイスがありましたらよろしくお願いします。

該当のソースコード

C#

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5namespace SA//ep1 0:46 6{ 7 public class GameManager : MonoBehaviour 8 { 9 public int maxHeight = 15; //ep1 1:23 10 public int maxWidth = 17;//ep1 1:33 11 12 public Color color1;//ep1 1:55 13 public Color color2;//ep1 1:58 14 15 GameObject mapObject;//ep1 4:30 16 SpriteRenderer mapRenderer;//ep1 4:38 17 18 private void Start()//ep1 0:48 19 { 20 CreateMap();//ep1 7;30 21 } 22 void CreateMap()//ep1 1:15 23 { 24 mapObject = new GameObject("Map");//ep1 4;54 25 mapRenderer = mapObject.AddComponent<SpriteRenderer>();//ep1 5:05 26 27 Texture2D txt = new Texture2D(maxWidth, maxHeight);//ep1 2:25 28 for(int x = 0; x < maxWidth; x++) 29 { 30 for (int y = 0; y < maxHeight; y++)//ep1 2:42 31 { 32 #region Visual 33 if(x % 2 !=0) 34 { 35 if(y % 2 != 0) 36 { 37 txt.SetPixel(x, y, color1);//ep1 2:50 38 Debug.Log("1"); 39 } 40 else 41 { 42 txt.SetPixel(x, y, color2); //ep1 3:41 43 Debug.Log("1.5"); 44 } 45 } 46 else 47 { 48 if (y % 2 != 0) 49 { 50 txt.SetPixel(x, y, color2);//ep1 2:51 51 Debug.Log("2"); 52 } 53 else 54 { 55 txt.SetPixel(x, y, color1); //ep1 3:51 56 Debug.Log("2.5"); 57 } 58 59 } 60 #endregion 61 } 62 } 63 txt.filterMode = FilterMode.Point;//ep1 8:46 64 65 txt.Apply();//ep1 5:56 66 Rect rect = new Rect(0, 0, maxWidth, maxHeight);//ep1 6;17 67 Sprite sprite = Sprite.Create(txt, rect, Vector2.one * .5f, 1, 0,SpriteMeshType.FullRect);//ep1 7:11 68 mapRenderer.sprite = sprite;//ep1 7;23 69 Debug.Log("end"); 70 } 71 } 72}

試したこと

コメントは動画内でその行を書いてた時間です
デバッグログは確認のため付け加えました。
1517のmapは作られ、1517+1個の全てのログは正常にコンソール上に出てきました。

試しに以下の公式サイトのsetpixelメソッドも試してみましたが同じく何も起こりませんでした。(補足情報の画像3枚目4枚目)
Unity公式setpixel

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

Unity2017.3.1f1Personal(64bit)
Unity2018.1.6f1Personal(64bit)
の両方で試しました

pcスペック
- Intel(R)Core(TM) i5-4690CPU 3.5GHz

  • RAM 8GB
  • グラフィックボードは付けていません

再生前
再生前
再生後(ここで画面上に15*17の色が塗られたピクセルの塊が出てほしい)
再生後(ここで画面上に15*17の色が塗られたピクセルの塊が出てほしい)
公式サイト再生前
公式サイト再生前
公式サイト再生後
公式サイト再生後
### 公式のSetPixelソースコード
C#
using UnityEngine;
using System.Collections;

public class ExampleClass : MonoBehaviour
{
void Start()
{
Texture2D texture = new Texture2D(128, 128);
GetComponent<Renderer>().material.mainTexture = texture;

for (int y = 0; y < texture.height; y++) { for (int x = 0; x < texture.width; x++) { Color color = ((x &amp; y) != 0 ? Color.white : Color.gray); texture.SetPixel(x, y, color); } } texture.Apply(); }

}

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

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

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

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

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

guest

回答1

0

ベストアンサー

「再生前」のスクリーンショットに映っているインスペクタ上の「Color 1」と「Color 2」の色ボックスの下のバーの色が真っ黒...つまりアルファが0のように見えますが、これを100に変えると変化はあるでしょうか?

インスペクタ

投稿2018/12/17 22:42

Bongo

総合スコア10807

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

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

salaam

2018/12/18 11:37 編集

凄いです!動画のようなカラフルな市松模様が出てきました! ありがとうございます。本当に感動です。何日も1日一時間悩んでsetpixelメソッドについて調べまくってました! 別の問題だったとは.... これでUnityの勉強がはかどります! 動画内で同じ状況のような方がいらっしゃるのでそちらにもコメントしてきます 本当にありがとうございました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問