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

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

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

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

Q&A

解決済

1回答

5162閲覧

Unity 2D:画像の色を変更したいが、関係ない画像まで色が変わってしまう

Gluek731

総合スコア26

C#

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

0グッド

0クリップ

投稿2016/10/31 09:28

前回Unity2Dに関して、画像をクリックしてほかの画像に変更することについての質問を投下したものです。

今回はその続きで、何とか色が変わるようにはなったのですが、クリックしてない画像の色もまとめて変わってしまうバグがあり、Unity本家との関連付けの問題なのかコード自体が悪いのかさっぱりわからない状態です。

質問の連投で大変お恥ずかしいのですが、だれか回答をいただけると助かります・・・

C#

1using UnityEngine; 2using System.Collections; 3 4public class Dustdelete : MonoBehaviour { 5 public Sprite[] tiles; 6 7 8 // Use this for initialization 9 void Start () { 10 SpriteRenderer renderer = gameObject.GetComponent<SpriteRenderer> (); 11 } 12 13 // Update is called once per frame 14 void Update () { 15 SpriteRenderer renderer = gameObject.GetComponent<SpriteRenderer> (); 16 //マウスボタン(タップ)が押されたら 17 if (Input.GetMouseButtonDown (0)) { 18 Vector2 tapPoint = Camera.main.ScreenToWorldPoint (Input.mousePosition); 19 Collider2D collider = Physics2D.OverlapPoint (tapPoint); 20 if (collider != null) { 21 GameObject obj = collider.transform.gameObject; 22 Debug.Log (obj.name); 23 renderer.sprite = tiles[1]; 24 //Destroy (obj); 25 } 26 } 27 } 28} 29

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

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

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

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

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

guest

回答1

0

ベストアンサー

Collider2D collider = Physics2D.OverlapPoint (tapPoint);
これは当たっているスプライトがある場合、そのスプライトのcolliderを取ってきますが、
SpriteRenderer renderer = gameObject.GetComponent<SpriteRenderer> ();
で取れる自分のrendererとは全く関係がありません。

仮にスプライト1とスプライト2がある場合、スプライト2をタッチするとします。
そして下記はスプライト1のスクリプトです。

C#

1SpriteRenderer renderer = gameObject.GetComponent<SpriteRenderer> (); //スプライト1のスクリプトなので、取れるレンダラは当然スプライト1のレンダラ 2345Collider2D collider = Physics2D.OverlapPoint (tapPoint); // タップされたのはスプライト2なので取れるのはスプライト2のコライダ 6if (collider != null) { // スプライト2がタッチされているのにこのコードは動いてしまう 7 GameObject obj = collider.transform.gameObject; 8 Debug.Log (obj.name); // このobjはスプライト2 9 renderer.sprite = tiles[1]; // でもこれはスプライト1 10 //Destroy (obj); 11}

ですので、タップされたのが自分かどうか判別するコードを追加しましょう

C#

1if (collider != null) { 2 GameObject obj = collider.transform.gameObject; 3 if (obj == this.gameObject) { // タップされたスプライトと自分が同じなら色を変える 4 Debug.Log (obj.name); 5 renderer.sprite = tiles[1]; 6 //Destroy (obj); 7 } 8}

投稿2016/10/31 10:00

ishi9

総合スコア1294

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問