我在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;
}
}
}
}
我的暂停按钮运行良好。但当我点击它时,我的角色正在跳跃,游戏暂停。
我想做到这一点,当我点击按钮游戏时只是停顿并且角色不会跳跃。
我是如何做到的。感谢您的帮助。
答案 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;
}
}