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

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

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

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

Unity

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

Q&A

解決済

1回答

2538閲覧

Unity C♯ ボールとブロックの接触音を鳴らしたい

jo1jo2jo3

総合スコア45

C#

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

Unity

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

0グッド

0クリップ

投稿2020/07/03 17:00

1、わからない事
・ボールが壁と接触した時の接触音を鳴らしたいのですがプログラムを入れても鳴りません。ボールと壁の接触音を鳴らす方法を教えてください。よろしくお願いします。

  ・著書 UnityではじめるC♯基礎編に掲載されているTHE BALLというゲームを参考に追加でボール接触音を入れて鳴らしたいです。

2、現在の状態 やったこと
・HierarchyのGameManagerのInspector → Add component →  GameManager.csのスクリプトにボール衝撃音を追加しましたがなりません。
・クリアー音 BGMは追加できました。 接触音はなりません。どうすればよいかわかりません。

  ・プログラムエラーはなくなりました。ミュートにはなっていません。音の発生タイミングプログラムが悪いのかなと思いますが参考サイトいくつか見て変更しましたがなりません。

参考にしたサイト
http://inter-high-blog.unity3d.jp/2019/07/12/collider/

イメージ説明

3、GameManagerのスクリプトGameManager.csを添付します↓

using

1using System.Collections; 2 3using UnityEngine.SceneManagement; 4 5public class GameManager : MonoBehaviour { 6 7 public int StageNo; //ステージナンバー 8 9 public bool isBallMoving; //ボール移動中か否か 10 11 public GameObject ballPrefab; //ボールプレハブ 12 public GameObject ball; //ボールオブジェクト 13 14 public GameObject goButton; //ボタン:ゲーム開始 15 public GameObject retryButton; //ボタン:リトライ 16 public GameObject clearText; //テキスト:クリア 17 18 public AudioClip wallSE; //追加効果音 接触音 19 public AudioClip clearSE; //効果音:クリア 20 private AudioSource audioSource;//オーディオソース 21 22 // Use this for initialization 23 void Start () { 24 retryButton.SetActive (false); //リトライボタンを非表示 25 isBallMoving = false; //ボールは「移動中ではない」 26 27 // オーディオソースを取得 28 audioSource = gameObject.GetComponent<AudioSource> (); 29 } 30 31 // Update is called once per frame 32 void Update () { 33 34 } 35 36 private void OnCollisionEnter (Collision collision) 37 { 38 //ぶつかったときの処理 39 audioSource.PlayOneShot (wallSE); 40 } 41 42 43 //GOボタンを押した 44 public void PushGoButton () { 45 46 47 //ボールの重力を有効化 48 Rigidbody2D rd = ball.GetComponent<Rigidbody2D>(); 49 rd.isKinematic = false; 50 51 retryButton.SetActive (true); //リトライボタンを表示 52 goButton.SetActive (false); //GOボタンを非表示 53 isBallMoving = true; //ボールは「移動中」 54 } 55 56 //リトライボタンを押した 57 public void PushRetryButton () { 58 Destroy (ball); //ボールオブジェクトを削除 59 60 //プレハブより新しいボールオブジェクトを作成 61 ball = (GameObject)Instantiate (ballPrefab); 62 63 retryButton.SetActive (false); //リトライボタンを非表示 64 goButton.SetActive (true); //GOボタンを表示 65 isBallMoving = false; //ボールは「移動中ではない」 66 } 67 68 //バックボタンを押した 69 public void PushBackButton () { 70 GobackStageSelect (); 71 } 72 73 //ステージクリア処理 74 public void StageClear () { 75 audioSource.PlayOneShot (clearSE); //クリア音再生 76 77 78 79 80 81 //セーブデータ更新 82 if (PlayerPrefs.GetInt ("CLEAR", 0) < StageNo) { 83 //セーブされているステージNoより今のステージNoが大きければ 84 PlayerPrefs.SetInt ("CLEAR", StageNo); //ステージナンバーを記録 85 } 86 87 clearText.SetActive (true); //クリア表示 88 retryButton.SetActive (false); //リトライボタン非表示 89 90 //4秒後に自動的にステージ選択画面へ 91 Invoke ("GobackStageSelect", 4.0f); 92 } 93 94 //移動処理 95 void GobackStageSelect () { 96 SceneManager.LoadScene ("StageSelectScene"); 97 } 98} 99 100 101こに言語を入力 102コード

4 BallのBallManager.cs Script添付します。

using

1using System.Collections; 2 3public class BallManager : MonoBehaviour { 4 5 6 7 8 // Use this for initialization 9 void Start () { 10 11 } 12 13 // Update is called once per frame 14 void Update () { 15 16 } 17 18 //ボールが何かのコリジョンに衝突 19 void OnCollisionEnter2D (Collision2D coll) { 20 Debug.Log ("Collistion"); 21 if (coll.gameObject.tag == "OutArea") { 22 //「アウトエリア」に衝突 23 //ゲームマネージャーを取得 24 GameObject gameManager = GameObject.Find ("GameManager"); 25 //リトライ 26 gameManager.GetComponent<GameManager> ().PushRetryButton (); 27 } 28 } 29 30 31 32 33 //ボールが何かのトリガーに衝突 34 void OnTriggerEnter2D (Collider2D other) { 35 if (other.gameObject.tag == "ClearArea") { 36 //「クリアーエリア」に入った 37 GameObject gameManager = GameObject.Find ("GameManager"); 38 gameManager.GetComponent<GameManager> ().StageClear (); 39 } 40 } 41} 42 43コード

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

動作しないaudioSource.PlayOneShot (wallSE);を行っているのはOnCollisionEnter内です。
一方で動作したaudioSource.PlayOneShot (clearSE);を行っているのは(元をたどれば)OnTriggerEnter2D内です。
OnCollisionEnterは3Dの関数なので、OnCollisionEnter2D(場合によってはOnTriggerEnter2D)にする必要があります。

投稿2020/07/03 23:17

fiveHundred

総合スコア10152

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

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

jo1jo2jo3

2020/07/04 09:33

鳴りました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問