2016-03-22 18 views
1

携帯電話用Unity(C#)でランナーゲームを書く。一時停止が動作しない(Unity c#)

キャンバスボタンを使用して画面上に一時停止ボタンを作成しました。

また、Platformer2DUserControlスクリプトでPauseのコードを作成しました。

ここでは、このスクリプトのコードです:

using UnityEngine; 
using UnitySampleAssets.CrossPlatformInput; 

namespace UnitySampleAssets._2D 
{ 

    [RequireComponent(typeof(PlatformerCharacter2D))] 
    public class Platformer2DUserControl : MonoBehaviour 
    { 
     private PlatformerCharacter2D character; 
     private bool jump; 
     public bool paused; 

     private void Awake() 
     { 
      character = GetComponent<PlatformerCharacter2D>(); 
      paused = false; 
     } 

     private void Update() 
     { 

      /*if (Input.GetButton("Fire1")) 
      { 

      }*/ 


      if (!jump) 
       // Read the jump input in Update so button presses aren't missed. 
       jump = Input.GetButton("Fire1"); //&& CrossPlatformInputManager.GetButtonDown("Jump"); 


     } 

     private void FixedUpdate() 
     { 
      // Read the inputs. 
      bool crouch = Input.GetKey(KeyCode.LeftControl); 
      // float h = CrossPlatformInputManager.GetAxis("Horizontal"); 
      // Pass all parameters to the character control script. 
      character.Move(1, false, jump); 
      jump = false; 

     } 
     public void Pause() 

     { 
      if (!jump) 
       // Read the jump input in Update so button presses aren't missed. 
       jump = Input.GetButton("Fire1"); //&& CrossPlatformInputManager.GetButtonDown("Jump"); 

      paused = !paused; 


      if (paused) 
      { 
       jump = !jump; 
       Time.timeScale = 0; 

      } 
      else if (!paused) 
      { 
       // jump = Input.GetButton("Fire1"); 
       Time.timeScale = 1; 
      } 
     } 
    } 
} 

マイ一時停止ボタンがうまく機能しています。しかし、私がそれをタップすると、私のキャラクターがジャンプして、ゲームが一時停止しています。

私はボタンゲームをタップすると、一時停止してキャラクターがジャンプしないようにしたいと思います。

どうすればいいですか?手伝ってくれてありがとう。

+1

あなたは本当に正直なところ、「タイムスケール」トリックを使ってユニティゲームを「一時停止」することはできません。つまり、正直なところ、神様、正直なところ***ではなく、任天堂のゲームを一時停止する方法ではありません。これは、何年も前にUnityフォーラムで言及された本当に信じられないほど馬鹿げたアイデアであり、インターネット上でコピーされています。それは完全にばかげている。 – Fattie

+0

ゲームエンジニアリングで「一時停止」することは、非常に芸術的な形です。シーン内にあるオブジェクトのクラスごとに、そのタイプのものに対してポーズコード*を書く必要があります。それはゲーム工学で休止の概念を実装する*唯一の方法です。 – Fattie

+0

さて、どうやって一時停止することができますか? @JoeBlow –

答えて

0

あなたのコードはうんざりですが、一時停止方法からジャンプスクリプトを削除するだけです。だから、ちょうどInput.GetButtonのみEDIT

ボタンを押して、画面をタップする必要が問題

更新

に呼ばれるべきであることを注意...

public void Pause() 

    { 
     paused = !paused; 

     if (paused) 
     { 
      Time.timeScale = 0; 
     } 
     else 
     { 
      Time.timeScale = 1; 
     } 
    } 

を一時停止します。コードジャンプ= Input.GetButton( "Fire1");基本的に「画面をタップしていますか?したがって、JUMPとPAUSEの両方がトリガーされます。

あなたのボタンの下に画面全体を塗りつぶすキャンバスを置くのが1つの解決策です。このキャンバスがクリックされたときにのみJUMPアクションをトリガーします。したがって、一時停止ボタンをクリックすると、伝播が停止され、全画面キャンバスはクリックされず、ジャンプアクションがトリガーされません。

EDIT2

(Update関数で)行を変更してみてください:

if (!jump) 
      // Read the jump input in Update so button presses aren't missed. 
      jump = Input.GetButton("Fire1"); 

のために:

if (!jump && !paused) 
       // Read the jump input in Update so button presses aren't missed. 
       jump = Input.GetButton("Fire1"); 

私はボタンイベントを更新する前に呼ばれると思いますが、see reference

+0

あなたはこのコードについて話しています 'if(!jump) jump = Input.GetButton( "Fire1"); '? –

+0

はい、Update関数でInput.GetButtonを使用してください – JoRouss

+0

OK、コードを削除しました。しかし、私の問題はまだ残っています。私はボタンをタップすると、私のキャラクターはジャンプします。 –

0

ジャンプと一時停止に同じ入力を使用しないことをお勧めします。また、ジャンプ機能と一時停止機能を別々の機能に分けることもできます。一時停止するには、画面にUIボタンを作成し、一時停止を切り替える一時停止スクリプトで公開機能を呼び出すようにします。次に、同じ機能で、一時停止中かどうかを確認し、それに応じてTimexscaleを調整します。

一時停止機能付きのスクリプトを、常に画面に表示されるオブジェクトに添付する必要がありますあなたのキャンバスまたはあなたのMainCameraで)。ボタンの下に、aptスクリプトとともにGOをボックスにドラッグした後、新しいonClick()関数を追加します。次に、前述のpublic関数を選択します。

private bool paused = false; 

//The function called by the button OnClick() 
public void TogglePause() 
{ 
    paused = !paused; 

    if(paused) 
     Time.timescale = 0f; 
    else 
     Time.timescale = 1f; 
} 

これが助けられました!

0

一時停止ボタンのレイキャストを確実にする1つの解決策が可能です。

+0

コメントがあります – Robert

関連する問題