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

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

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

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

Q&A

解決済

1回答

1814閲覧

Unity 3D オブジェクト衝突でスクリーンを赤くフラッシュさせる ダメージ表示

911RSR

総合スコア13

Unity3D

Unity3Dは、ゲームや対話式の3Dアプリケーション、トレーニングシュミレーション、そして医学的・建築学的な技術を可視化する、商業用の開発プラットフォームです。

0グッド

0クリップ

投稿2020/10/22 01:11

編集2020/10/22 03:03

オブジェクトが"W"というタグが付いたオブジェクトと衝突した時に、

スクリーン全体を赤くフラッシュさせたいです。

https://nn-hokuson.hatenablog.com/entry/2017/01/11/215346

を参考に、Imageをcanvas下にhierarchy windowで作成し、

下記のスクリプトをオブジェクトにアタッチしました。

C#

1using System; 2using System.Collections; 3using System.Collections.Generic; 4using System.Reflection; 5using UnityEngine; 6using UnityEngine.UI; 7 8public class FlashController : MonoBehaviour 9{ 10 private Image img; 11 // Start is called before the first frame update 12 void Start() 13 { 14 GameObject img = GameObject.Find("Image"); 15 img.GetComponent<Image>().color = new Color (1f, 1f, 1f, 0f); 16 } 17 18 // Update is called once per frame 19 void Update() 20 { 21 void OnCollisionEnter(Collision collision) 22 { 23 if (collision.gameObject.tag == "W") 24 { 25 img.GetComponent<Image>().color = new Color(0.5f, 0f, 0f, 0.5f); 26 } 27 else 28 { 29 img.GetComponent<Image>().color = Color.Lerp(img.color, Color.clear, Time.deltaTime); 30 } 31 } 32 } 33}

無事compileできるのですが、画面が赤くフラッシュしません。

どこがおかしいか、またスクリプトをどう描き直したらよいか、ご教示頂けますと幸甚です。

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

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

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

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

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

guest

回答1

0

ベストアンサー

基本的にはメソッドの中にメソッドは入りません。
OnCollisionEnter(Collision collision) を Update() から出してみてください。

---追記---

質問編集前のコードの問題は修正されたものと思って色々見落としました。すみません。

C#

1private Image img; 2void Start() 3{ 4 GameObject img = GameObject.Find("Image"); 5 img.GetComponent<Image>().color = new Color (1f, 1f, 1f, 0f); 6} 7```上のコードではStart()内でインスタンス変数のImage imgには何も代入していないのでnullのままです。 8こういう混同を避けるために変数名は違うものを使うといいと思います。 9```C# 10private Image img; 11void Start() 12{ 13 GameObject imgObject = GameObject.Find("Image"); 14 img = imgObject.GetComponent<Image>(); 15 img.color = new Color (1f, 1f, 1f, 0f); 16} 17```コンポーネントからコンポーネントを取得する必要はないのでOnCollisionEnter()内の 18img.GetComponent<Image>().color= は img.color= に戻してください。 19 20また、エラーが出ていないということは衝突も検出されていないということになります。 21Rigidbodyを両方Kinematicにしているということですが、Kinematic同士の衝突はデフォルトでは検出しません。 22片方のKinematicを外すかProject Settings -> Physics -> Contact Pairs Modeを変えるかする必要があります。

投稿2020/10/22 03:29

編集2020/10/22 05:36
i_zna

総合スコア198

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

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

911RSR

2020/10/22 04:07

早速のご回答ありがとうございます。ご教示の通り、改変してみました。 using System; using System.Collections; using System.Collections.Generic; using System.Reflection; using UnityEngine; using UnityEngine.UI; public class FlashController : MonoBehaviour { private Image img; // Start is called before the first frame update void Start() { GameObject img = GameObject.Find("Image"); img.GetComponent<Image>().color = new Color (1f, 1f, 1f, 0f); } // Update is called once per frame void Update() { } void OnCollisionEnter(Collision collision) { if (collision.gameObject.tag == "W") { img.GetComponent<Image>().color = new Color(0.5f, 0f, 0f, 0.5f); } else { img.GetComponent<Image>().color = Color.Lerp(img.color, Color.clear, Time.deltaTime); } } } compile errorはないのですが、やはり赤くフラッシュしてくれません。 オブジェクトは衝突する方、される方ともにcollider, rigidbody (is Kinetic)は付属、onにしているのですが。。
i_zna

2020/10/22 05:32

回答に追記しました。
911RSR

2020/10/23 05:03

神です!ご丁寧かつ迅速にご教示頂き、本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問