質問するログイン新規登録
C#

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

Unity3D

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

Unity

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

Q&A

解決済

1回答

630閲覧

unityの音ゲー判定をタップにしたい

omikan

総合スコア1

C#

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

Unity3D

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

Unity

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

0グッド

0クリップ

投稿2024/01/24 14:13

0

0

実現したいこと

unity初心者です
unityで音ゲーを作っています
https://www.youtube.com/@user-ll1yd6xc1j
こちらの方の動画を参考にして作成しているのですがこの方の動画の音ゲーがキーボードで操作するタイプのものでタップでできるようにしたいのですがやり方がわかりませんでした

発生している問題・分からないこと

タップで操作できるように変更したいです

該当のソースコード

c#

1using System; 2using UnityEngine; 3using TMPro; 4using UnityEngine.SceneManagement; 5public class Judge : MonoBehaviour 6{ 7 //変数の宣言 8 [SerializeField] private GameObject[] MessageObj;//プレイヤーに判定を伝えるゲームオブジェクト 9 [SerializeField] NotesManager notesManager;//スクリプト「notesManager」を入れる変数 10 11 [SerializeField] TextMeshProUGUI comboText; 12 [SerializeField] TextMeshProUGUI scoreText; 13 [SerializeField] GameObject finish;//new 14 15 AudioSource audio; 16 [SerializeField] AudioClip hitSound; 17 18 float endTime = 0;//new 19 20 void Start() 21 { 22 audio = GetComponent<AudioSource>(); 23 endTime = notesManager.NotesTime[notesManager.NotesTime.Count - 1];//new 24 } 25 void Update() 26 { 27 if (GManager.instance.Start) 28 { 29 if (Input.GetKeyDown(KeyCode.D))//〇キーが押されたとき 30 { 31 if (notesManager.LaneNum[0] == 0)//押されたボタンはレーンの番号とあっているか? 32 { 33 Judgement(GetABS(Time.time - (notesManager.NotesTime[0] + GManager.instance.StartTime)), 0); 34 } 35 else 36 { 37 if (notesManager.LaneNum[1] == 0) 38 { 39 Judgement(GetABS(Time.time - (notesManager.NotesTime[1] + GManager.instance.StartTime)), 1); 40 } 41 } 42 } 43 if (Input.GetKeyDown(KeyCode.F)) 44 { 45 if (notesManager.LaneNum[0] == 1) 46 { 47 Judgement(GetABS(Time.time - (notesManager.NotesTime[0] + GManager.instance.StartTime)), 0); 48 } 49 else 50 { 51 if (notesManager.LaneNum[1] == 1) 52 { 53 Judgement(GetABS(Time.time - (notesManager.NotesTime[1] + GManager.instance.StartTime)), 1); 54 } 55 } 56 } 57 if (Input.GetKeyDown(KeyCode.J)) 58 { 59 if (notesManager.LaneNum[0] == 2) 60 { 61 Judgement(GetABS(Time.time - (notesManager.NotesTime[0] + GManager.instance.StartTime)), 0); 62 } 63 else 64 { 65 if (notesManager.LaneNum[1] == 2) 66 { 67 Judgement(GetABS(Time.time - (notesManager.NotesTime[1] + GManager.instance.StartTime)), 1); 68 } 69 } 70 } 71 if (Input.GetKeyDown(KeyCode.K)) 72 { 73 if (notesManager.LaneNum[0] == 3) 74 { 75 Judgement(GetABS(Time.time - (notesManager.NotesTime[0] + GManager.instance.StartTime)), 0); 76 } 77 else 78 { 79 if (notesManager.LaneNum[1] == 3) 80 { 81 Judgement(GetABS(Time.time - (notesManager.NotesTime[1] + GManager.instance.StartTime)), 1); 82 } 83 } 84 } 85 86 if (Time.time > endTime + GManager.instance.StartTime) 87 { 88 finish.SetActive(true); 89 Invoke("ResultScene", 3f); 90 return; 91 } 92 93 if (Time.time > notesManager.NotesTime[0] + 0.2f + GManager.instance.StartTime)//本来ノーツをたたくべき時間から0.2秒たっても入力がなかった場合 94 { 95 message(3); 96 deleteData(0); 97 Debug.Log("Miss"); 98 GManager.instance.miss++; 99 GManager.instance.combo = 0; 100 //ミス 101 } 102 } 103 } 104 void Judgement(float timeLag, int numOffset) 105 { 106 audio.PlayOneShot(hitSound); 107 if (timeLag <= 0.05)//本来ノーツをたたくべき時間と実際にノーツをたたいた時間の誤差が0.1秒以下だったら 108 { 109 Debug.Log("Perfect"); 110 message(0); 111 GManager.instance.ratioScore += 5;//new!! 112 GManager.instance.perfect++; 113 GManager.instance.combo++; 114 deleteData(numOffset); 115 } 116 else 117 { 118 if (timeLag <= 0.08)//本来ノーツをたたくべき時間と実際にノーツをたたいた時間の誤差が0.15秒以下だったら 119 { 120 Debug.Log("Great"); 121 message(1); 122 GManager.instance.ratioScore += 3;//new!! 123 GManager.instance.great++; 124 GManager.instance.combo++; 125 deleteData(numOffset); 126 } 127 else 128 { 129 if (timeLag <= 0.10)//本来ノーツをたたくべき時間と実際にノーツをたたいた時間の誤差が0.2秒以下だったら 130 { 131 Debug.Log("Bad"); 132 message(2); 133 GManager.instance.ratioScore += 1;//new!! 134 GManager.instance.bad++; 135 GManager.instance.combo = 0; 136 deleteData(numOffset); 137 } 138 } 139 } 140 } 141 float GetABS(float num)//引数の絶対値を返す関数 142 { 143 if (num >= 0) 144 { 145 return num; 146 } 147 else 148 { 149 return -num; 150 } 151 } 152 void deleteData(int numOffset)//すでにたたいたノーツを削除する関数 153 { 154 notesManager.NotesTime.RemoveAt(numOffset); 155 notesManager.LaneNum.RemoveAt(numOffset); 156 notesManager.NoteType.RemoveAt(numOffset); 157 GManager.instance.score = (int)Math.Round(1000000 * Math.Floor(GManager.instance.ratioScore / GManager.instance.maxScore * 1000000) / 1000000); 158 //↑new!! 159 comboText.text = GManager.instance.combo.ToString();//new!! 160 scoreText.text = GManager.instance.score.ToString();//new!! 161 } 162 163 void message(int judge)//判定を表示する 164 { 165 Instantiate(MessageObj[judge], new Vector3(0f, 0.6f, 0.3f), Quaternion.Euler(45, 0, 0)); 166 } 167 168 void ResultScene() 169 { 170 SceneManager.LoadScene("Result"); 171 } 172} 173

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

自分でもいろいろと調べたり試したのですがよくわからず...

補足

特になし

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

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

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

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

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

guest

回答1

0

ベストアンサー

思いついた限りでは、以下の方法があります。

  • UIのボタンを配置して、そこから関数を呼び出す
  • Input.touchCountでタッチされているか確認し、されていればInput.GetTouch(0).positionでその座標を確認する(参考

投稿2024/01/25 02:42

fiveHundred

総合スコア10466

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

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

omikan

2024/01/26 08:59

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.30%

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

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

質問する

関連した質問