暂停不起作用(Unity c#)

时间:2016-03-22 17:44:05

标签: c# android ios unity3d

我在Unity(C#)上为手机编写亚军游戏。

我使用Canvas - Button在屏幕上制作了Pause按钮。

我还在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;
            }
        }
    }
}

我的暂停按钮运行良好。但当我点击它时,我的角色正在跳跃,游戏暂停。

我想做到这一点,当我点击按钮游戏时只是停顿并且角色不会跳跃。

我是如何做到的。感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

我建议你不要使用相同的输入来跳跃和暂停。此外,将跳转和暂停功能分成单独的功能。对于暂停,在屏幕上创建一个UI按钮,并使其在Pause脚本上调用公共函数,这将切换暂停。然后,在同一功能中,检查您是否暂停,并相应地调整Time.timescale

您必须将具有暂停功能的脚本附加到始终位于屏幕中的对象(例如,画布中的面板或MainCamera)。在按钮下,在将带有apt脚本的GO拖到框中后添加一个新的onClick()函数。然后,选择上述公共功能。

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;
}

希望这有帮助!

答案 1 :(得分:0)

好吧,你的代码搞砸了,但只是从pause方法中删除了跳转脚本。所以它会暂停...

public void Pause()

    {
        paused = !paused;

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

请注意,只应在Update

中调用Input.GetButton

修改

您必须点按屏幕按下按钮的问题。代码jump = Input.GetButton(&#34; Fire1&#34;);基本上意味着&#34;我是否在点击屏幕?&#34;所以JUMP和PAUSE都被触发了。

一种解决方案是将画布放在按钮下方的整个屏幕上。只有在单击此画布时,才会触发JUMP操作。因此,当您单击暂停按钮时,它将停止传播并且不会单击全屏画布,这不会触发跳转动作。

<强> EDIT2

尝试更改行(在更新功能中):

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

for:

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

我认为在更新see reference

之前调用了按钮事件

答案 2 :(得分:0)

可以确保暂停按钮上的光线投射。

答案 3 :(得分:0)

我一直都是这样做的,基本上用paused-bool围绕整个固定更新(或者你的游戏动作的任何地方)

    private void FixedUpdate()
    {
if (paused != true){
        // 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;
}
    }