【Unity&C#】同シーン上のアクションに反応して、画像を切り替える方法

解決済

回答 1

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 287

k2zu1112

score 7

前提・実現したいこと

現在、C#とUnityを使ってサッカーをモチーフにしたクリッカーゲームを製作しております。
その仕様としては、サッカーボール(クッキークリッカーでのクッキー)をクリックするたびに、画面上部に配置されたゴールキーパー目掛けてボールprefabsが飛んでいくと同時にゴール数が増えるようになっています。それを繰り返し獲得ゴール数を増やしていくことで、強化アイテムの購入が可能となってさらにゴール数を稼いでいくというものです。
そこで私が行いたいことは、クリック(ゴール)毎にキーパーの画像が切り替わる演出(ダメージアクション)を追加です。ダメージアクションとしては、キーパーの目が✖印になる画像(1種類)を用意しているので、あとはクリック(ゴール)毎に一瞬だけそちらの画像へ切り替えるScriptが必要です。

質問の要約

ボールクリック(ゴール)に反応して、同じシーンに配置されているキーパーの画像を切り替えたい。

試したこと

Element機能を見よう見まねで使ってみましたが上手くいきませんでした。
(キーパー画像自体をクリックすると切り替わるようにはなりました。)

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

Unity,VisualStudioは共に無料版(先月にインストール)のものを使用しています。
キーパーの画像を切り替えるのは一瞬のみで再度最初の画像に戻るようにしたい。
現在は上記問題に関してのScriptはありません。
周りのScriptも載せたいのですが、出版物のものなのでここに書いてしまっていいものか分かりませんでした。

現状(画像説明)Rendererのprivate修正

![イメージ説明説明](44a3ef7e7d02503d4bea2b473b004753.png)](834df41a6bde6520fd1b5916759f13d7.png)
!!イメージ説明明](254818bc6132ef5bf7df4d85ad6ccfcb.gif)明](aa64945fe59dddb52d3106fe043e9316.gif)
![イメージ説明説明](0f7eff9ca981748a6a7407d5988a11a9.png)](229da1c96d24140b64f57fc1e4175241.png)

有識者の方、よろしくお願い致します。

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

+1

質問いただきありがとうございます!
Spriteを使っているのかどうなのかよくわからないので色んな場合を書いておきます

Spriteの場合

参考リンクに書いてあるようにスクリプトから変更すると良いでしょう。
参考リンク 英語なので分かりやすいと思います。
forum.unity.com

Sprite animationを使う方法もあると思います
unity3d.com

Materialの場合

スクリプトからMainTextureを書き換えると良いでしょう
参考リンク:英語なので分かりやすいと思います
docs.unity3d.com

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

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

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

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2019/01/06 12:39

    ご回答ありがとうございます。
    現在Spriteの場合(✖animation)とMaterialの場合で試しておりますが、少し苦戦しております。
    調べてみたところそれぞれ以下のようなコードが必要だと分かりましたが、どちらにも共通する「Renderer」という存在を理解できず苦しんでおります。
    Materialパターンですとpublicで宣言しているため、Unity上にもRendererの項目が出現するのですがどのように扱えばよろしいのでしょうか?
    引き続き自らでも調べていきますが、もし説明いただけたら大変助かります。

    【Spriteパターン】
    public Sprite mySprite;
    this.GetComponent<SpriteRenderer>().sprite = mySprite


    【Materialパターン】
    {
    public Texture[] textures;
    public float changeInterval = 0.33F;
    public Renderer rend;

    void Start()
    {
    rend = GetComponent<Renderer>();
    }

    void Update()
    {
    if (textures.Length == 0)
    return;

    int index = Mathf.FloorToInt(Time.time / changeInterval);
    index = index % textures.Length;
    rend.material.mainTexture = textures[index];
    }
    }

    キャンセル

  • 2019/01/06 12:46

    getComponentを使う場合はpublicの前に[HideInInspector]を付けるかprivateにしておいた方が良いと思います。
    また、unityのinspector画面で設定する場合はgetComponent無しになります

    キャンセル

  • 2019/01/06 14:06

    仰る通り、privateへ変更しInspectorタブからRenderer部分を見えなくしました。(本文に画像あり)
    このままElement部分に、変更前・後画像を足してみたのですが何も変化がありませんでした。
    そこでまた何点かご質問させていただきます。

    ①Elementで0として選択する変更前画像と、既に画面に配置されているキーパーの画像は同じ画像なのですが、それらを紐づける必要はありますか?その必要があるとすればどうすればよろしいでしょうか?(Element0へD&D出来るのかと思っていましたが出来ませんでした。)

    ②また、先ほどのスクリプトはどのオブジェクトにアタッチするべきでしょうか?
    1,新たなオブジェクト、2,キーパーオブジェクト、3,ボールオブジェクト

    ご回答のよろしくお願いいたします。

    キャンセル

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

  • ただいまの回答率 90.21%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる