Показать сообщение отдельно
Старый 17.11.2013, 23:18   #18
Uawi
Оператор ЭВМ
 
Регистрация: 08.11.2013
Сообщений: 39
Написано одно полезное сообщение
Ответ: Uawi. Вопрос - ответ

Посмотрите, вот у меня есть код, который должен сделать подъем лифта на два этажа выше(это 1 в _positions) и опустить на 1 вниз от текущей позиции, как сделать так?

У меня не работает возврат, постоянно поднимается на второй и опускается на 1, а надо, чтобы можно было с третьего на второй и тд...

using UnityEngine;
using System.Collections;

public class Action : MonoBehaviour {

	// Объект лифта
	GameObject _lift;
	float yVelocity, _newposition;

	// Массив позиций
	public float[] _positions;
	// Время подъема
	public float _smoothTime;

	// Нужный этаж
	public int floor = 3;
	// Текущий этаж
	public int current = 0;

	// Переменные для показа направленности движения
	public bool _actionUp = false, _actionDown = false;

	public void Awake () {
		// Указываем лифт
		_lift = (GameObject)GameObject.FindGameObjectWithTag("Лифт");
	}

	public void Update () {
		// Если вверх активно
		if (_actionUp) {
			// Вызываем корутину
			StartCoroutine (_WaitUpFalse());

		}
		// Если вниз активно
		if (_actionDown) {
			// Вызываем корутину
			StartCoroutine (_WaitDownFalse());			
		}
	}

	public void OnGUI () {
		if (GUI.Button (new Rect (10, 10, 60, 30), "Вверх") && _actionDown == false) {
			// Вверх активируем
			_actionUp = true;
		}
		if (GUI.Button (new Rect (80, 10, 60, 30), "Вниз") && _actionUp == false) {
			// Вниз активируем
			_actionDown = true;
		}
	}

	// Для отмены действия вверх
	public IEnumerator _WaitUpFalse () {
		// Указыывем новую позицию
		_newposition = Mathf.SmoothDamp(_lift.transform.position.y, _positions[current + 1], ref yVelocity, _smoothTime);
		// Перемещаем объект
		_lift.transform.position = new Vector3(_lift.transform.position.x, _newposition, 0);
		// Ждем
		yield return new WaitForSeconds (_smoothTime * 3);
		// Отменяем действие
		_actionUp = false;
	}

	// Для отмены действия вниз
	public IEnumerator _WaitDownFalse () {
		// АНАЛОГИЧНО
		_newposition = Mathf.SmoothDamp(_lift.transform.position.y, _positions[current - 1], ref yVelocity, _smoothTime);
		_lift.transform.position = new Vector3(_lift.transform.position.x, _newposition, 0);
		yield return new WaitForSeconds (_smoothTime * 3);
		_actionDown = false;
	}
}
То есть нужно оптимизировать так, чтобы я мог сам настраивать нужное мне количество этажей для подъема и спуска, чтобы работало все правильно... Помогите пожалуйста
__________________
Не бойся если ты один...
Бойся если ты ноль...
(Offline)
 
Ответить с цитированием