2017-01-18 5 views
0

Yo!オブジェクトをクリックするだけで作業が行われることがあります(Unity 3D)

私は非常に基本的なアクティベーションコードを持っています。プレイヤーがオブジェクトをクリックして、そのオブジェクトはそのことを行います。問題は、最初のクリックで動作することがあり、2番目、3番目または4番目のクリックで動作することがあることです。

これは更新頻度と関係があると思われますが、この作業を適切に行うために何をすべきかわかりません。

ここで私が持っているコードです:

void OnTriggerStay(Collider col) 
    { 
     if (col.gameObject.tag == "Player") 
     { 
      if (Input.GetMouseButtonUp(0)) 
      { 
       if (Activated.GetComponent<raycastTest>().SystemEnabled == true) 
       { 
        Activated.GetComponent<raycastTest>().SystemEnabled = false; 
       } 
       else if (Activated.GetComponent<raycastTest>().SystemEnabled == false) 
       { 
        Activated.GetComponent<raycastTest>().SystemEnabled = true; 
       } 
      } 
     } 
    } 

答えて

0

OnTriggerStayはFixedUpdateと整列されます。それが60に設定されている(私はそれがデフォルトであると思う)が、あなたのコンピュータは100fpsを実行すると、物理プロセスで廃棄されるフレームは40です。

しかし、入力はOSで実行されるため、1秒あたり100回のチェックが行われます。

ロジックでは、ヒットする確率は40%です。

これらの破棄されたフレームのうちの1つを押すと、ボタンが押されたかどうかを確認するので、そのフレームに対してのみ有効です。次のフレームは消えています。

bool isIn = false; 
void OnTriggerEnter(Collision col) 
{ 
    isIn = true; 
} 
void OnTriggerExit(Collision col) 
{ 
    isIn = false; 
} 

void Update() 
{ 
    if (Input.GetMouseButtonUp(0) && isIn == true){ Action();} 
} 
+0

おかげで多くのことを:あなたは/ exitと入力し、を押すそのフラグをチェックするとき

ソリューションは、フラグになります!本当にシンプルだが、天才的な解決策! – EtaCarinae

関連する問題