Прежде всего, ваше регулярное выражение содержит unquantified \d
и соответствует только одиночным цифрам. Вам нужно добавить +
после \d
, чтобы соответствовать 1 или более цифрам.
Чтобы избежать дублирования значений, вы можете использовать
^(?!.*\b(\d+)\b.*\b\1\b)\d+(?:,\d+)*$
^^^^^^^^^^^^^^^^^^^^^^^
См. Регулярное выражение demo
(?!.*\b(\d+)\b.*\b\1\b)
- это отрицательный результат, который не даст совпадения, если после любых символов 0+, кроме символов разрыва строки, есть группа цифр, которые появляются позже в строке ( после других символов 0+, кроме символов разрыва строки).
Подробности
^
- начало строки (?!.*\b(\d+)\b.*\b\1\b)
- a отрицательный результат, который не соответствует совпадению, если идентичные значения появляются в тексте \d+
- 1 + цифры (?:,\d+)*
- ноль или более вхождений ,
- запятая \d+
- 1 + цифры $
- конец строки. Предполагая, что ваш космический корабль - твердое тело, вы должны взглянуть на Rigidbody.AddForce https://docs.unity3d.com/ScriptReference/Rigidbody.AddForce.html
Работая с помощью сил вы можете очень легко получить плавное движение во всех направлениях и настроить его в параметрах Rigidbody (например, в массе) без повторения в скрипте. Это часть физической модели Unity.
Если вы хотите двигаться только в направлении y, введите вектор, подобный (0,1,0), но вы также можете ввести вектор Transform.forward Gameobject вашего космического корабля. Таким образом, он всегда будет двигаться в том направлении, в котором он стоит.
Основанный на вашем собственном коде, самый простой способ решить его может быть что-то вроде этого
//this sets the X position
transform.position += transform.forward * Time.deltaTime * 10f;
//if the button is pressed then modify Y
if (Input.GetKey (KeyCode.UpArrow))
transform.position += new Vector3 (0, 5f * Time.deltaTime * y_speed,0);
y_speed
может быть public float y_speed = 1.0f
в вашем скрипте, чтобы вы могли изменить его из инспектор, чтобы получить эффект, которого вы хотите достичь.
Надеюсь, это поможет!