unityでほかのオブジェクトについているスクリプトのを実行しようとしたところ、そのメソッドで取得したローカル変数は普通なのですが、そのスクリプトのほかのメソッドで変更されたメンバ変数が反映されず、なぜか初期値のまま計算されてしまいます。Update関数でDebug.Logを行ったときにはきちんと現在の値を表示してくれるので、GUIボタンの挙動がややこしいことになってるものだと思いますが、ボタンのOn Clickで呼び出されたメソッドにはそのスクリプトのメンバ変数は使えないということでしょうか
c#
1using System.Collections; 2using System.Collections.Generic; 3using UnityEngine; 4using UnityEngine.UI; 5 6public class rythm1 : MonoBehaviour 7{ 8 9 [SerializeField] RectTransform lettucebutton; 10 [SerializeField] RectTransform patebutton; 11 12 [SerializeField] RectTransform pan; 13 14 15 Vector2 leftup = new Vector2(280, 550); 16 Vector2 leftbottom = new Vector2(280, 200); 17 Vector2 rightup = new Vector2(270, -450); 18 Vector2 rightbottom = new Vector2(800, 200); 19 20 [SerializeField] AudioSource audiosource; 21 [SerializeField] AudioClip clip; 22 23 float st; 24 25 [SerializeField] gamedirsc da; 26 private int miss; 27 28 29 GameObject lettuce; 30 GameObject pate; 31 32 private void OnEnable() 33 { 34 miss = da.Setmiss; 35 36 pan.position = leftbottom; 37 lettucebutton.position = leftup; 38 patebutton.position = rightbottom; 39 40 41 st = Time.time; 42 43 audiosource.PlayOneShot(clip); 44 StartCoroutine("coroutine"); 45 46 Debug.Log(st); 47 48 } 49 50 private IEnumerator coroutine() 51 { 52 yield return new WaitForSeconds(5.33f); 53 Destroy(pan); 54 Destroy(lettuce); 55 Destroy(pate); 56 enabled = false; 57 } 58 59 // Start is called before the first frame update 60 void Start() 61 { 62 63 } 64 65 public void Clickpan() 66 { 67 Debug.Log(st); 68 var beat = Time.time; 69 var don = beat - this.st; 70 71 if ((don >= 2.46f & don <= 2.86f)|(don >= 4.46f & don <= 4.86f)) 72 { 73 Debug.Log("Great!"); 74 Debug.Log(don); 75 } 76 else 77 { 78 79 Debug.Log("Miss!"); 80 Debug.Log(don); 81 da.Setmiss = miss - 1; 82 } 83 84 } 85 // Update is called once per frame 86 void Update() 87 { 88 89 if (Input.GetMouseButtonDown(1)) 90 { 91 Debug.Log(st); 92 } 93 } 94}
このスクリプトで言うと、OnEnableとUpdateのDebug.Logではきちんとゲームが始まってからの時間が表示されるのですが、Clickpan、ボタンで呼び出されるメソッドではstがなぜか0と表示されてしまいます。
また、スクリプトの切り替えが前提となるスクリプトのためOnEnableを使っているためか、GetComponentをしてもnullexceptionとなってしまいます。この場合はどうすればよいのでしょうか
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。