###実機で反応しない
Unityにてスマホ向けリズムゲームのセレクト画面を作っていて、
上下フリックでタイトルなど譜面の変更、
左右フリックで譜面スピードの変更、
タップで譜面・譜面スピードの決定・ゲームシーンへの遷移
を想定してスクリプトを書いていて、下記の状態から実機にてこれが出来るようにしたいです。
説明が拙い中恐縮ですがお力添えいただければ幸いです。
発生している問題・エラーメッセージ
現状として、Editer上では問題なく動いています。
しかし実機にて同じことをしようとすると譜面情報やスピード設定の情報を読み込むことすら出来ておらず、フリックタップに反応しない状態になっています。
###対象コード
using System.Collections.Generic; using System.IO; using System.Linq; using UnityEngine; using UnityEngine.SceneManagement; // シーン遷移に必要 using UnityEngine.UI; public class SelectorController : MonoBehaviour { [SerializeField] private Text textInformation; [SerializeField] private Text textScrollSpeed; private Vector3 touchStartPos; private Vector3 touchEndPos; private string Direction; bool oneplay; // フォーマット指定文字列(テキストの初期状態から読み込み) private string informationTextFormat; private string scrollSpeedTextFormat; // スクロール速度 private float scrollSpeed = 1.0f; // BMSファイル一覧 private string[] beatmapPaths; private List<BmsLoader> bmsLoaders; private BmsLoader selectedBmsLoader; // 選択中の譜面ID private int selectedIndex = 0; // 譜面の数 private int beatmapCount; private void Start() { // 譜面を検索するフォルダパス var beatmapDirectory = Application.dataPath + "/../Beatmaps"; // BMSファイル一覧を取得・設定 beatmapPaths = Directory.GetFiles(beatmapDirectory, "*.bms", SearchOption.AllDirectories); // 譜面情報を読み込み bmsLoaders = beatmapPaths.Select(path => new BmsLoader(path)).ToList(); selectedBmsLoader = bmsLoaders[selectedIndex]; beatmapCount = bmsLoaders.Count(); // 初期状態のテキスト内容をフォーマットとして保持 informationTextFormat = textInformation.text; scrollSpeedTextFormat = textScrollSpeed.text; // 初期状態でテキストを更新 ChangeSelectedIndex(selectedIndex); ChangeScrollSpeed(scrollSpeed); } void Update() { Flick(); } void Flick() { if (Input.GetKeyDown(KeyCode.Mouse0)) { touchStartPos = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z); } if (Input.GetKeyUp(KeyCode.Mouse0)) { touchEndPos = new Vector3 (Input.mousePosition.x, Input.mousePosition.y, Input.mousePosition.z); GetDirection(); } } void GetDirection() { float directionX = touchEndPos.x - touchStartPos.x; float directionY = touchEndPos.y - touchStartPos.y; //xがyより絶対値が大きい時。 //if (Mathf.Abs(directionX) < 30 && Mathf.Abs(directionY) < 30) if (Mathf.Abs(directionY) < Mathf.Abs(directionX)) { if (30 < directionX) { //右向きにフリック Direction = "right"; } if (-30 > directionX) { //左向きにフリック Direction = "left"; } //yがxより絶対値が大きい時。 } else if (Mathf.Abs(directionX) < Mathf.Abs(directionY)) { if (30 < directionY) { //上向きにフリック Direction = "up"; } if (-30 > directionY) { //下向きのフリック Direction = "down"; } } else { //フリック量が30以上でXY同量なら Direction = "touch"; //input = false; //return; } if (Direction == "touch") { PlayerController.ScrollSpeed = scrollSpeed; // 譜面を設定 PlayerController.beatmap = new Beatmap(beatmapPaths[selectedIndex]); // シーン切り替え SceneManager.LoadScene("GameScene"); } if (Direction == "up") { ChangeSelectedIndex(selectedIndex - 1); //上フリックされた時の処理 } if (Direction == "down") { ChangeSelectedIndex(selectedIndex + 1);//下フリックされた時の処理 } if (Direction == "right") { ChangeScrollSpeed(scrollSpeed - 0.1f);//右フリックされた時の処理 } if (Direction == "left") { ChangeScrollSpeed(scrollSpeed + 0.1f);//左フリックされた時の処理 } } private void ChangeSelectedIndex(int newIndex) { // 譜面IDを0~譜面数-1 の間に収める selectedIndex = Mathf.Clamp(newIndex, 0, beatmapCount - 1); selectedBmsLoader = bmsLoaders[selectedIndex]; // 楽曲情報 var title = selectedBmsLoader.headerData["TITLE"]; var artist = selectedBmsLoader.headerData["ARTIST"]; var playLevel = selectedBmsLoader.headerData["PLAYLEVEL"]; var notesCount = selectedBmsLoader.noteProperties .Count(x => x.noteType == NoteType.Single) + selectedBmsLoader.noteProperties .Count(x => x.noteType == NoteType.Long) * 2; var minBpm = selectedBmsLoader.tempoChanges.Min(x => x.tempo); var maxBpm = selectedBmsLoader.tempoChanges.Max(x => x.tempo); // テキストを変更 var text = string.Format(informationTextFormat, title, artist, playLevel, notesCount, minBpm, maxBpm ); textInformation.text = text; } private void ChangeScrollSpeed(float newScrollSpeed) { // スクロール速度を0.1~10 の間に収める scrollSpeed = Mathf.Clamp(newScrollSpeed, 0.1f, 10f); // テキストを変更 var text = string.Format(scrollSpeedTextFormat, scrollSpeed); textScrollSpeed.text = text; } }
試したこと
タップ操作のみ、譜面・譜面スピードの決定を除外し、ゲームシーンへの遷移のみを実行させると反応してシーンに移行することが出来ました。しかしそれもタップに反応する場所が画面の角のみとかなり偏った場所のみになってしまいます。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
あなたの回答
tips
プレビュー