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

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

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

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

Q&A

0回答

630閲覧

Eventごとにpublic変数を変更したい

moukin

総合スコア5

Unity

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

0グッド

0クリップ

投稿2021/11/30 08:11

前提・実現したいこと

学校の課題で音ゲーを作成しているunity初心者です

スタジオしまづ様の動画を見ながら自分で改良を重ねています

音ゲーのシステムとしては、右手側で言うと、右手でのノーツを生成するために、note_RightプレハブにMoveRightスクリプトをアタッチして、そこで、参照したい、曲がり方のための変数divrを受け取り、divrigに代入してレーンごとのノーツの曲がり方を変更しています。
参照される側の、public変数であるdivr自体はInstantRightスクリプトで定義しています

MoveRightスクリプトでは、落ちると同時に拡大もしているので、ノーツの左部分がズレるのを右に徐々に進ませることでまっすぐ進んでいるように見せています

GameobjectとしてSignalReceiverを用意し、そこには、MIDIデータで用意した音源の音に反応してnote_Rightプレハブが、例えばラが一回鳴ると第一レーンに一つのーつが、生成されるようになっています

GeneRightスクリプトでは動かすためのMoveRightスクリプトを受け取り、SpawnNoteでレーンごとにノーツを準備しています

InstantRightスクリプトは、レーンごとに生成したいノーツの位置と曲がり方を変更して最終的に生成しています

簡潔な順序としては
Signalreceiverによって、midiデータからNoteEvent1~4が起動し、GeneRightが、MoveRightがアタッチされたnote-Rightプレハブを保持している状態を、InstantRightで実行していると解釈しています。

一番にやりたいこととしては、NoteEvent1~4でpublic変数をイベントごとに定義し直して、ノーツが右に進む割合を徐々に増やしたいので、MoveRight.csでは分母にあたるdivrの値が変更することになるので、定義し直した変数が反映され、MoveRight.csによるノーツの動き方をそれぞれ実現することです。

(*1レーン目のノーツと2レーン目のノーツが落ち方が一緒なので重なってしまっているゲーム画面)1レーン目のノーツと2レーン目のノーツが落ち方が一緒なので重なってしまっている

発生している問題・エラーメッセージ

InstantRight.csでのpublic変数がうまく機能していません

参照するオブジェクトAにAスクリプト、参照されるオブジェクトBにBスクリプトがアタッチされているとしたら、今回ではオブジェクトAはnoteプレハブでAスクリプトはMoveRight.cs,オブジェクトBはSignalReceiverでBスクリプトはInstantRight.csだと認識しております

Event1~4で、public変数を変更するやり方はまずあっているのか自信がありません。
やりたいことを現在コードで定義しているやり方の延長線上で実現できたり、何か他の方法で同様の結果が得られたら嬉しいです

大変長くなりましたが、アドバイスをいただければと思います

該当のソースコード

unity

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class InstantRight : MonoBehaviour 6{ 7 [SerializeField] GeneRight geneRight = default; 8 9 public static int divr=9; 10 // Start is called before the first frame update 11 public void NoteEvent1() 12 { 13 geneRight.SpawnNote(new Vector3(2,40,0)); 14 divr=9; 15 } 16 public void NoteEvent2() 17 { 18 geneRight.SpawnNote(new Vector3(5,40,0)); 19 divr=7; 20 } 21 public void NoteEvent3() 22 { 23 divr=5; 24 geneRight.SpawnNote(new Vector3(8,40,0)); 25 } 26 public void NoteEvent4() 27 { 28 divr=3; 29 geneRight.SpawnNote(new Vector3(10,40,0)); 30 } 31 32} 33

unity

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class MoveRight : MonoBehaviour 6{ 7 8 float speed; 9 int divrig; 10 11 12 void Start() 13 { 14 divrig = InstantRight.divr; 15 16 speed =47; 17 StartCoroutine ("ScaleUp"); 18 } 19 20 void Update() 21 { 22 transform.Translate((speed * Time.deltaTime)/divrig,-speed * Time.deltaTime,0); 23 } 24 25 IEnumerator ScaleUp() 26 { 27 for ( float i = 0 ; i < 40 ; i+=1f ){ 28 transform.localScale += new Vector3(i/44,i/44,0); 29 yield return new WaitForSeconds(0.05f); 30 } 31 } 32}

unity

1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4 5public class GeneRight : MonoBehaviour 6{ 7 [SerializeField] MoveRight notePrefab; 8 9 // Start is called before the first frame update 10//[SerializeField] GameManager gameManager = default; 11 public void SpawnNote(Vector3 pos) 12 { 13 Instantiate(notePrefab,pos, Quaternion.identity); 14 //gameManager.AddNotes(1); 15 } 16}

試したこと

 public変数での定義を数パターンやってみて、エラーが出ないのが現在のコードです

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

unityのバージョンは2021.2.4f1です
ノーツに対するMidiのイベントはこのツールで実行しています
https://github.com/keijiro/MidiAnimationTrack
スクリプト間での変数の共有はここらへんを参考にしました
https://ymgsapo.com/2020/10/22/unity-refer-script/
https://teratail.com/questions/212545

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

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

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

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

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

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問