UnityのRigidbody
は、(3Dも2Dも)一定時間動かなかったものを「スリープ状態」にします。ゆえに、OnTriggerStay2D
も呼ばれなくなるわけです。
追記: 「Rigidbody
がスリープにする」のではなく「Rigidbody
がスリープにされる」でしたね。
OnTriggerEnter2D
でフラグを立て、Update
内で数値を増やし、OnTriggerExit2D
でフラグを折ればあなたの思うようなことができるのではないかと。
こんな感じです↓
C#
1private bool _flag;
2
3private void Update()
4{
5 if (_flag)
6 {
7 PlayerManager.playerManager.ElecPower++;
8 }
9}
10
11private void OnTriggerEnter2D(Collider2D collision)
12{
13 if (collision.gameObject.tag == "ElecPowerPosition")
14 {
15 _flag = true;
16 }
17}
18
19private void OnTriggerExit2D(Collider2D collision)
20{
21 if (collision.gameObject.tag == "ElecPowerPosition")
22 {
23 _flag = false;
24 }
25}
追記: PlayerManager.playerManager.ElecPower++
の部分ですが、Unityのゲームは(設定を変えない限り)可変フレームレートなので、この書き方だとゲームを動かすPCのスペックによってこの値が増える速度が変わります。Time.deltaTime
についてここ(Unity スクリプトリファレンス)に書かれているので、一度読んでおきましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。