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

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

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

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

Q&A

解決済

1回答

3089閲覧

当たり判定検出でtextを表示、離れたところで非表示とするスクリプトについての質問

rTG

総合スコア16

Unity

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

0グッド

0クリップ

投稿2019/01/14 10:26

編集2019/01/14 10:27

いつもお世話になっています。
今回playerとゲームオブジェクトが接触した際のセリフの呼び出しについて質問させてください。
やりたいことは
「最初非表示になっているセリフ(オブジェクト)を当たり判定がある間は表示に、離れた場合は再び非表示に」です。
様々なサイトを参照しつつスクリプトを書いていました。
しかし、コード1とコード2をうまく連動させる方法がわからず、試行錯誤するうちにドツボにはまってしまいました。
現在下記にあるscriptの//左クリックした時〜〜のところを当たり判定の有無に置き換える書き方と、コード1、2の連動のさせ方を教えていただきたいです。
ややこしくなってしまい申し訳ありません。
よろしくお願いします。

C#

1コード1(表示と非表示を切り替えたいオブジェクト) 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5public class GameController : MonoBehaviour 6{ 7 public GameObject Panel; 8 // Use this for initialization 9 void Start() 10 { 11 Panel.SetActive(false); 12 GameObject Table = GameObject.FindGameObjectWithTag("table"); 13 gameObject.GetComponent<KARI>(); 14 } 15 // Update is called once per frame 16 void Update() 17 { 18 } 19 void OnTriggerExit2D(Collider2D other) 20 { 21 22 23 > // 左クリックしたとき、オブジェクト表示 24> if (Input.GetMouseButtonDown(0)) 25> { 26> Panel.SetActive(true); 27> } 28> // 右クリックしたとき、オブジェクト非表示 29> if (Input.GetMouseButtonDown(1)) 30> { 31> Panel.SetActive(false); 32> } 33 34 } 35 36} 37

C#

1コード2(プレイヤーがぶつかったことを感知する当たり判定を付与したオブジェクト) 2using System.Collections; 3using System.Collections.Generic; 4using UnityEngine; 5using UnityEngine.UI; 6 7public class KARI : MonoBehaviour 8{ 9 10 void OnTriggerExit2D(Collider2D other) 11 { 12 Debug.Log("OnTriggerExit2D " + other.gameObject.name); 13 } 14 15 16 // Use this for initialization 17 void Start() 18 { 19 GameObject speech = GameObject.FindGameObjectWithTag("speech"); 20 gameObject.GetComponent<GameController>(); 21 22 23 } 24 25 // Update is called once per frame 26 27 28}

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

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

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

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

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

guest

回答1

0

ベストアンサー

未検証ですがこんな感じで出来ると思います。

C#

1public class GameController : MonoBehaviour 2{ 3 public GameObject Panel; 4 // Use this for initialization 5 void Start() 6 { 7 Panel.SetActive(false); 8 GameObject Table = GameObject.FindGameObjectWithTag("table"); 9 10 gameObject.GetComponent<KARI>(); 11 // ↑本題とは関係無いですが、変数に代入していないので意味の無いコードです。 12 } 13 14 // 衝突した/離れた時に呼ばれるメソッド 15 // 衝突時はisHit=true,離れた時はisHit=false 16 public void PlayerCollision(bool isHit) 17 { 18 Panel.SetActive(isHit); 19 // 適宜他の処理を入れる 20 } 21} 22 23 24 25public class KARI : MonoBehaviour 26{ 27 GameController gameController; 28 29 // 衝突した 30 void OnTriggerEnter2D(Collider2D other) 31 { 32 Debug.Log("OnTriggerEnter2D " + other.gameObject.name); 33 34 // GameControllerの処理を呼ぶ 35 gameController.PlayerCollision(true); 36 } 37 38 // 離れた 39 void OnTriggerExit2D(Collider2D other) 40 { 41 Debug.Log("OnTriggerExit2D " + other.gameObject.name); 42 43 // GameControllerの処理を呼ぶ 44 gameController.PlayerCollision(false); 45 } 46 47 48 // Use this for initialization 49 void Start() 50 { 51 GameObject speech = GameObject.FindGameObjectWithTag("speech"); 52 53 // ↓だと同じオブジェクトにあることになってますが合ってますか? 54 //(同じオブジェクトにあるなら衝突スクリプトを分ける必要無いですがとりあえずそのままにしておきます) 55 gameController = gameObject.GetComponent<GameController>(); 56 } 57}

投稿2019/01/14 10:59

sakura_hana

総合スコア11425

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

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

rTG

2019/01/14 12:01

回答ありがとうございます。 早速試してみたのですが、KARI.csの方で gameController.PlayerCollision(true);の部分に、 「NullReferenceException: Object reference not set to an instance of an object KARI.OnTriggerEnter2D (UnityEngine.Collider2D other) (at Assets/KARI.cs:15)」というエラーが出てしまいました。 この場合どのような解決策があるのでしょうか?
rTG

2019/01/14 12:04

追記: このエラーが出る時の状況としては、プレイヤーと当たり判定オブジェクトが接したときに、表示と非表示を切り替えたいオブジェクトが表示されずエラーとなります。
sakura_hana

2019/01/14 12:18

コメントにも書きましたが、GameControllerとKARIは同じオブジェクトに付いていますか? もし別のオブジェクトに付いていた場合、GameControllerの取得に失敗し、gameControllerがnullになり、nullはPlayerCollisionというメソッドを持っていないので該当のエラーになります。 別オブジェクトに付いている場合は「unity 別オブジェクト スクリプト」とかでググると沢山情報が出るので、適宜改変してください。
rTG

2019/01/14 12:27

返信ありがとうございます。 ご指摘の通り同じオブジェクトにつけるのを忘れていたためにエラーが起きていました。 今現在しっかり動作しており一安心です。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問