gpt4 book ai didi

c# - 用第一根手指检测按钮按下但如果用更多手指Unity按下则不会

转载 作者:行者123 更新时间:2023-11-30 22:52:32 24 4
gpt4 key购买 nike

在我的平台游戏中,我有一个通过按下三个按钮移动的球角色:“向右移动” 按钮让它向右移动,“MoveLeft” 让它向左移动,“跳跃” 向球施加垂直力使其跳跃的按钮。

这是我的运动控制代码 - 一切正常:

脚本 Move2D:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Move2D : MonoBehaviour
{
public float moveSpeed = 7f;
public float jumpSpeed = 7F;
public bool isGrounded = false;

public Rigidbody2D rigidbody;

private Vector2 currentMoveDirection;

private void Awake()
{
rigidbody = GetComponent<Rigidbody2D>();
}

public void Jump()
{
if (isGrounded)
{
rigidbody.AddForce(new Vector3(0f, jumpSpeed), ForceMode2D.Impulse);
}
}
public void JumpHigher()
{
rigidbody.AddForce(new Vector3(0f, 12), ForceMode2D.Impulse);
}

private void FixedUpdate()
{
rigidbody.velocity = currentMoveDirection * moveSpeed + Vector2.up * rigidbody.velocity.y;
}

public void TriggerMoveLeft()
{
currentMoveDirection += Vector2.left;
}

public void StopMoveLeft()
{
currentMoveDirection -= Vector2.left;
}

public void TriggerMoveRight()
{
currentMoveDirection += Vector2.right;
}

public void StopMoveRight()
{
currentMoveDirection -= Vector2.right;
}
}

脚本 ContinuesButton:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
using UnityEngine.UI;

public class ContinuesButton : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
[SerializeField] private Button targetButton;

[SerializeField] private Move2D playerMovement;

[SerializeField] private bool movesLeft;

private readonly bool isHover;

private void Awake()
{
if (!targetButton) targetButton = GetComponent<Button>();
}

public void OnPointerDown(PointerEventData eventData)
{
if (movesLeft)
{
playerMovement.TriggerMoveLeft();
} else
{
playerMovement.TriggerMoveRight();
}
}

public void OnPointerUp(PointerEventData eventData)
{
if (movesLeft)
{
playerMovement.StopMoveLeft();
} else
{
playerMovement.StopMoveRight();
}
}
}

如您所见,我在每次按下按钮时添加一个力。通过这样做,我意识到玩家可以通过多种方式“作弊”

平台上有很多障碍,很难通过,因为速度刚好。通过用两根手指按下同一个按钮,我会为球增加双倍的水平力,它会速度加倍,并且通过关卡很多更容易

此外,在某些情况下,玩家有时间跳两次跳得比正常情况高很多

如何避免这两个问题?

非常感谢任何帮助,甚至任何小信息!

最佳答案

适合您当前方法的一种简单方法是在此脚本中添加一个 bool 字段,用于跟踪按钮当前是否被按住。类似于 private bool buttonHeld;

每当 OnPointerDown 被调用且 buttonHeld == false 时,将其设置为 true 并调用您的命令,否则什么都不做。对于 OnPointerUp,如果 buttonHeld == true,将其设置为 false 并停止移动。为了安全起见,在 void OnDisable() 中,将其设置为 false。

关于c# - 用第一根手指检测按钮按下但如果用更多手指Unity按下则不会,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57984983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com