Я не могу найти документацию CrossPlatformInputManager
, и я ничего не знаю об этом. Но если вам нужно получить событие «отпустить ключ» вместо «нажать клавишу», попробуйте следующее: Input.GetKeyUp .
Описание
Возвращает значение true во время кадра, в течение которого пользователь отпускает ключ, идентифицированный по имени.
Эту функцию необходимо вызывать из функции обновления, так как состояние сбрасывается каждый разРамка. Он не вернет true, пока пользователь не нажмет клавишу и не отпустит ее снова.
Список идентификаторов клавиш см. В разделе «Обычный ввод игры». При работе с вводом рекомендуется использовать Input.GetAxis и Input.GetButton, поскольку это позволяет конечным пользователям настраивать ключи.
using UnityEngine;
using System.Collections;
public class ExampleClass : MonoBehaviour
{
void Update()
{
if (Input.GetKeyUp("space"))
{
print("Space key was released");
}
}
}
Если вы хотите остановить твердое тело, вынужно сбросить его скорость до нуля. Или вы можете использовать Rigidbody2D.MovePosition , чтобы переместить его на определенное расстояние.
Параметры
position Новая позиция для объекта Rigidbody.
Описание
Перемещает жесткое тело в положение.
Перемещает твердое тело в указанное положение, вычисляя соответствующую линейную скорость, необходимую для перемещения твердого тела в это положение во время следующего обновления физики. Во время движения ни гравитация, ни линейное сопротивление не влияют на тело. Это приводит к тому, что объект быстро перемещается из существующего положения через мир в указанное положение.
Поскольку эта функция позволяет быстро перемещать твердое тело в указанное положение по всему миру, любые коллайдеры, прикрепленные кТвердое тело будет реагировать, как и ожидалось, т.е. будет вызывать столкновения и / или триггеры. Это также означает, что, если коллайдеры производят столкновение, то это повлияет на движение твердого тела и потенциально остановит его от достижения указанной позиции во время следующего обновления физики. Если твердое тело является кинематическим, то любые столкновения не будут влиять на само твердое тело и будут влиять только на любые другие динамические коллайдеры.
2D твердые тела имеют фиксированный предел скорости, с которой они могут двигаться, поэтому они пытаются перемещаться на большие расстояния по короткимвременные шкалы могут привести к тому, что твердое тело не достигнет указанной позиции во время следующего обновления физики. Рекомендуется использовать это только для относительно небольших перемещений на расстояние.
Важно понимать, что фактическое изменение положения произойдет только во время следующего обновления физики, поэтому повторно вызывайте этот метод, не ожидая следующего обновления физики. приведет к последнему используемому вызову. По этой причине рекомендуется вызывать его во время обратного вызова FixedUpdate.
Примечание. MovePosition предназначено для использования с кинематическими жесткими телами.
// Move sprite bottom left to upper right. It does not stop moving.
// The Rigidbody2D gives the position for the cube.
using UnityEngine;
using System.Collections;
public class Example : MonoBehaviour
{
public Texture2D tex;
private Vector2 velocity;
private Rigidbody2D rb2D;
private Sprite mySprite;
private SpriteRenderer sr;
void Awake()
{
sr = gameObject.AddComponent<SpriteRenderer>();
rb2D = gameObject.AddComponent<Rigidbody2D>();
}
void Start()
{
mySprite = Sprite.Create(tex, new Rect(0.0f, 0.0f, tex.width, tex.height), new Vector2(0.5f, 0.5f), 100.0f);
velocity = new Vector2(1.75f, 1.1f);
sr.color = new Color(0.9f, 0.9f, 0.0f, 1.0f);
transform.position = new Vector3(-2.0f, -2.0f, 0.0f);
sr.sprite = mySprite;
}
void FixedUpdate()
{
rb2D.MovePosition(rb2D.position + velocity * Time.fixedDeltaTime);
}
}
Оба документа имеют пример,Или вы не хотите использовать пользовательскую клавиатуру, а только кнопки пользовательского интерфейса, попробуйте следующее: IPointerDownHandler и IPointerUpHandler
Описание Интерфейс, который нужно реализовать, если вы хотите получать обратные вызовы OnPointerDown.
Обнаруживает продолжающиеся щелчки мыши до отпускания кнопки мыши. Используйте IPointerUpHandler для обработки нажатия кнопки мыши.
//Attach this script to the GameObject you would like to have mouse clicks detected on
//This script outputs a message to the Console when a click is currently detected or when it is released on the GameObject with this script attached
using UnityEngine;
using UnityEngine.EventSystems;
public class Example : MonoBehaviour, IPointerDownHandler, IPointerUpHandler
{
//Detect current clicks on the GameObject (the one with the script attached)
public void OnPointerDown(PointerEventData pointerEventData)
{
//Output the name of the GameObject that is being clicked
Debug.Log(name + "Game Object Click in Progress");
}
//Detect if clicks are no longer registering
public void OnPointerUp(PointerEventData pointerEventData)
{
Debug.Log(name + "No longer being clicked");
}
}