Я создал пустой игровой объект, придал ему твердое 2D-тело и скрипт для движения.
Сценарий такой: предполагалось переместить игрока вверх, если он нажмет пробел. Это работало, но больше не работает.
Сейчас оно удалено, но раньше я пытался добавить проверку if в методе обновления, чтобы проверить, есть ли какая-либо кнопка регистрируется. Произошло следующее: когда я нажал пробел или любую другую клавишу, ни один из журналов debug.log не показывал мое сообщение. Внезапно это сработало, когда я спамил пробел, а затем множество других кнопок. также входы регистрировали несколько сотен в секунду при нажатии кнопки. Вот почему я добавил время восстановления, которое работало, но мне все равно приходилось спамить, чтобы что-то произошло. Поэтому я думаю, что это проблема с регистрацией ввода.
Вот скрипт для движения игрока (прыжка):
Код: Выделить всё
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Blorb_movement : MonoBehaviour
{
public Rigidbody2D myRigidBody;
[SerializeField] private float flapStrength;
private bool canFlap = true; // Variable for cooldown
void Start()
{
}
void Update()
{
// Check if the space key is pressed and we can flap (cooldown = over)
if (Input.GetKeyDown(KeyCode.Space) && canFlap)
{
Debug.Log("space was pressed");
myRigidBody.linearVelocity = Vector2.up * flapStrength;
canFlap = false;
// Starts cooldown of 0.3 sec
StartCoroutine(FlapCooldown());
}
}
private IEnumerator FlapCooldown()
{
// wait in cooldown before flapping again
yield return new WaitForSeconds(0.3f);
canFlap = true;
}
}
Подробнее здесь: https://stackoverflow.com/questions/792 ... ing-inputs
Мобильная версия