Вот, переписал код, только теперь вообще не поднимается лифт, есть изменения в позиции на доли секунды, а скрипт работает полностью, кроме вот поднятия, точнее работает полностью, только не до конца:
using UnityEngine;
using System.Collections;
public class Action : MonoBehaviour {
// Объект лифта
GameObject elevator;
// Скорость по Y
float yVelocity;
// Публичная переменная этажа
public int floor = 0;
// Перменные для контроля передвижения
public int up, down;
// Массив позиций игрока
public float[] positions;
// Время подъема
public float smoothTime;
// Перменные флажка для контроля передвижения
public bool upping, downing;
public void Awake () {
elevator = (GameObject)GameObject.FindGameObjectWithTag("Лифт");
}
public void OnGUI () {
// Стиль
GUI.skin.button.normal.background = null;
GUI.skin.button.hover.background = null;
GUI.skin.button.active.background = null;
// Левая кнопка, отвечающая за подъем вверх
if (GUI.Button (new Rect (0, 0, Screen.width / 4, Screen.height), "") && downing == false) {
StartCoroutine (Upping ());
}
// Правая кнопка, отвечающая за спуск
if (GUI.Button (new Rect (Screen.width - Screen.width / 4, 0, Screen.width / 4, Screen.height), "") && upping == false) {
StartCoroutine (Downing ());
}
}
public IEnumerator Upping () {
upping = true;
downing = false;
floor += up;
float newposition = Mathf.SmoothDamp(elevator.transform.position.y, positions[floor], ref yVelocity, smoothTime);
elevator.transform.position = new Vector3(elevator.transform.position.x, newposition, elevator.transform.position.z);
yield return new WaitForSeconds (smoothTime * 3);
upping = false;
downing = false;
}
public IEnumerator Downing () {
downing = true;
upping = false;
floor -= down;
float newposition = Mathf.SmoothDamp(elevator.transform.position.y, positions[floor], ref yVelocity, smoothTime);
elevator.transform.position = new Vector3(elevator.transform.position.x, newposition, elevator.transform.position.z);
yield return new WaitForSeconds (smoothTime * 3);
downing = false;
upping = false;
}
}