【问题标题】:Pause don't works (Unity c#)暂停不起作用(Unity c#)
【发布时间】:2016-03-22 17:44:05
【问题描述】:

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

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

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

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

我想做那个,当我点击按钮时游戏只是暂停并且角色不会跳跃。

我怎样才能做到。谢谢你的帮助。

【问题讨论】:

  • 真的,老实说,只是不能使用可笑的“时间刻度”技巧“暂停”统一游戏对上帝诚实。也就是说,老实说,只是不是他们在任天堂暂停游戏的方式。几年前有人在 Unity 论坛中提到的一个非常愚蠢的想法,它已在互联网上被复制。这完全是荒谬的。
  • 游戏工程中的“暂停”是一种艺术形式。对于场景中的每一类对象,您必须特别为该类型的事物编写暂停代码。这是在游戏工程中实现暂停概念的唯一方法
  • 好的,我该如何暂停? @JoeBlow
  • @JoeBlow:我们在这里帮助他人。这里的基本规则之一是Be nice。荒谬,愚蠢,......这没有必要,也对某人没有帮助。
  • 嗨@ЕвгенийСухомлин!你只需要为游戏中的每一件事写一个暂停函数。这是一项巨大的工作!如果你有一个机器人,写一个暂停函数。如果你有背景,写一个暂停函数,如果你有直升机,写一个暂停函数。这是一项艰巨的工作:O

标签: c# android ios unity3d


【解决方案1】:

我建议您不要使用相同的输入来进行跳跃和暂停。此外,将您的跳转和暂停功能分离为单独的功能。对于暂停,在屏幕上创建一个 UI 按钮并使其调用暂停脚本上的公共函数,这将切换暂停。然后,在同一个函数中,检查你是否暂停并相应地调整 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;
}

希望这有帮助!

【讨论】:

    【解决方案2】:

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

    public void Pause()
    
        {
            paused = !paused;
    
            if (paused)
            {
                Time.timeScale = 0;
            }
            else
            {
               Time.timeScale = 1;
            }
        }
    

    注意 Input.GetButton 只能在 Update 中调用

    编辑

    您必须点击屏幕才能按下按钮的问题。并且代码跳转 = Input.GetButton("Fire1");基本上意味着“我在点击屏幕吗?”所以 JUMP 和 PAUSE 都被触发了。

    一种解决方案是在按钮下方放置一个填满整个屏幕的画布。仅当单击此画布时才会触发 JUMP 动作。所以当你点击暂停按钮时,它会停止传播,不会点击全屏画布,也不会触发跳转动作。

    EDIT2

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

    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

    【讨论】:

    • 你在说这段代码' if (!jump) jump = Input.GetButton("Fire1"); ' ?
    • 是的,仅在更新函数中使用 Input.GetButton
    • 好的,我删除了代码。但我的问题仍然存在。当我点击按钮时,我的角色会跳跃。
    • 你删除了 jump = !jump 吗?
    • 阅读我的编辑,我会尝试找到一个链接来解释如何做到这一点
    【解决方案3】:

    一种解决方案可能是确保暂停按钮的光线投射。

    【讨论】:

    • 应该是评论
    【解决方案4】:

    我一直都是这样做的,基本上用 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;
    }
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-06
      • 2023-04-07
      • 1970-01-01
      相关资源
      最近更新 更多