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

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

ただいまの
回答率

87.36%

Unityの音ゲー制作にてキーの割り当てをしたいと思っています。

受付中

回答 0

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 299

score 1

実現したいこと

Unityで音楽ゲームの製作をしています。
生成して落ちてきたオブジェクトに対して特定のキーを押すとそのオブジェクトを消えるというプログラムにしたいです。

発生している問題

生成して落ちてきたオブジェクトに対して特定のキーを押してもオブジェクトが消えません.
ちなみにUnityは実行できています。

該当のソースコード

ここでキーの割り当てをしています。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public static class GameUtil {

    public static KeyCode GetKeyCodeByLineNum (int lineNum) {
        switch (lineNum) {
            case 0:
                return KeyCode.F;
            case 1:
                return KeyCode.G;
            case 2:
                return KeyCode.H;
            case 3:
                return KeyCode.J;
            default:
                return KeyCode.None;
        }
    }
}


ここでは生成されたオブジェクトを落ちるようにするプログラムと特定のキーを押したときにDestroy関数を作動するようにしています。
ここのCheckInput関数が反応していません。

using System.Collections;
using UnityEngine;

public class NoteScript : MonoBehaviour {

    public int lineNum;
    private GameManager _gameManager;
    private bool isInLine = false;
    private KeyCode _lineKey;

    void Start () {
        _gameManager = GameObject.Find ("GameManager").GetComponent<GameManager> ();
        _lineKey = GameUtil.GetKeyCodeByLineNum(lineNum);
    }

    void Update () {
        this.transform.position += Vector3.down * 10 * Time.deltaTime;

        if (this.transform.position.y < -5.0f) {
            Debug.Log ("false");
            Destroy (this.gameObject);
        }

        if(isInLine){
            CheckInput(_lineKey);
        }

    }


    void OnTriggerEnter (Collider other) {
        isInLine = true;
    }

    void OnTriggerExit (Collider other) {
        isInLine = false;
    }

     void CheckInput (KeyCode key) {
        if (Input.GetKeyDown (key)) {
            _gameManager.GoodTimingFunc (lineNum);
            Destroy (this.gameObject);
        }

     }
}


ここではオブジェクトが生成されています。
オブジェクトの生成に関しては問題ないと思います

using UnityEngine;
using System.Collections;
using System.IO;
using System;
using UnityEngine.UI;

public class GameManager : MonoBehaviour {
  [Serializable] public class InputJson
  {
  public string name;
  public int BPM;
  public Note[] Notes;
}
[Serializable] public class Note
  {
  public int LPB;
  public int num;
  public int block;
  public int type;
}
  public GameObject[] notes;
  private float[] _timing;
  private int[] _lineNum;
  public string filePass;
   private int _notesCount = 0;
  public float timing;
    private AudioSource _audioSource;
    private float _startTime = 0;
    public float timeOffset = 0;
    private bool _isPlaying = false;
    public GameObject startButton;
    public Text scoreText;
    private int _score = 0;
     void Start(){
        _audioSource = GameObject.Find ("GameMusic").GetComponent<AudioSource> ();
        _timing = new float[1024];
        _lineNum = new int[1024];
        LoadCSV ();
    }

     void Update () {
        if (_isPlaying) {
            CheckNextNotes ();
            scoreText.text = _score.ToString ();
        }

    }

     public void StartGame(){
        startButton.SetActive (false);
        _startTime = Time.time;
        _audioSource.Play ();
        _isPlaying = true;
    }

    void CheckNextNotes(){
        while (_timing [_notesCount] + timeOffset < GetMusicTime () && _timing [_notesCount] != 0) {
            SpawnNotes (_lineNum[_notesCount]);
          _notesCount++;

        }
    }

    void SpawnNotes(int block){
      if(block==0){
        Instantiate (notes[block], 
            new Vector3 (-5.3f, 10.0f, 0),
            Quaternion.identity);
      }
      if(block==1){
        Instantiate (notes[block], 
            new Vector3 (-1.85f, 10.0f, 0),
            Quaternion.identity);
      }
      if(block==2){
        Instantiate (notes[block], 
            new Vector3 (1.85f, 10.0f, 0),
            Quaternion.identity);
      }
      if(block==3){
        Instantiate (notes[block], 
            new Vector3 (5.3f, 10.0f, 0),
            Quaternion.identity);
      }
    }

  void LoadCSV(){
    string json = Resources.Load (filePass).ToString();
    InputJson inputJson = JsonUtility.FromJson<InputJson>(json);
    Debug.Log(inputJson.name);
    int i=0;
    for(int j=0;j < inputJson.Notes.Length; j++){
      timing=((float)inputJson.Notes[j].num*4+inputJson.Notes[j].LPB)/100;
      _timing [i] = timing;
      _lineNum [i] = inputJson.Notes[j].block;
      i++;
        }
    }
         float GetMusicTime(){
        return Time.time - _startTime;
    }
     public void GoodTimingFunc(int block){
        Debug.Log ("Line:" + block + " good!");
        Debug.Log (GetMusicTime());

        _score++;
    }
}

試したこと

参考にしている記事
[Unity]シンプルな音ゲーの作り方 part2 ゲーム製作
UnityでJSONファイルを読み込むメモ

補足情報(FW/ツールのバージョンなど)

Unity 2020.1.5f1
NoteEditor
【Unity】音ゲーの譜面エディタ「NoteEditor」紹介

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

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

まだ回答がついていません

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

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る