|
Общие вопросы вопросы не попадающие ни в один из доступных разделов |
17.11.2013, 22:17
|
#16
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Uawi. Вопрос - ответ
наверное надо up++; добавить
|
(Offline)
|
|
17.11.2013, 22:40
|
#17
|
Оператор ЭВМ
Регистрация: 08.11.2013
Сообщений: 39
Написано одно полезное сообщение
|
Ответ: Uawi. Вопрос - ответ
Сообщение от pax
наверное надо up++; добавить
|
Up - это переменная показывающая на сколько этажей вверх надо подняться, то есть если надо подняться на второй, то массив -> 0 + up, где up = 2.
Если в Update написать, то все нормально, а вот через нажатие на кнопку не выходит
__________________
Не бойся если ты один...
Бойся если ты ноль...
|
(Offline)
|
|
17.11.2013, 23:18
|
#18
|
Оператор ЭВМ
Регистрация: 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)
|
|
18.11.2013, 00:32
|
#19
|
Оператор ЭВМ
Регистрация: 08.11.2013
Сообщений: 39
Написано одно полезное сообщение
|
Ответ: Uawi. Вопрос - ответ
Простите за тот же пост...
Надо сделать так, чтобы лифт поднимался на регулируюмую мной высоту(этаж) из инспектора и опускался также, но опускался с места позиции лифта.
Спасибо
__________________
Не бойся если ты один...
Бойся если ты ноль...
|
(Offline)
|
|
18.11.2013, 23:25
|
#20
|
Оператор ЭВМ
Регистрация: 08.11.2013
Сообщений: 39
Написано одно полезное сообщение
|
Ответ: Uawi. Вопрос - ответ
Вот, переписал код, только теперь вообще не поднимается лифт, есть изменения в позиции на доли секунды, а скрипт работает полностью, кроме вот поднятия, точнее работает полностью, только не до конца:
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; }
}
__________________
Не бойся если ты один...
Бойся если ты ноль...
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 13:08.
|