forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Общие вопросы (http://forum.boolean.name/forumdisplay.php?f=166)
-   -   Uawi. Вопрос - ответ (http://forum.boolean.name/showthread.php?t=18687)

pax 17.11.2013 22:17

Ответ: Uawi. Вопрос - ответ
 
наверное надо up++; добавить

Uawi 17.11.2013 22:40

Ответ: Uawi. Вопрос - ответ
 
Цитата:

Сообщение от pax (Сообщение 270366)
наверное надо up++; добавить

Up - это переменная показывающая на сколько этажей вверх надо подняться, то есть если надо подняться на второй, то массив -> 0 + up, где up = 2.

Если в Update написать, то все нормально, а вот через нажатие на кнопку не выходит

Uawi 17.11.2013 23:18

Ответ: 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;
        }
}

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

Uawi 18.11.2013 00:32

Ответ: Uawi. Вопрос - ответ
 
Простите за тот же пост...

Надо сделать так, чтобы лифт поднимался на регулируюмую мной высоту(этаж) из инспектора и опускался также, но опускался с места позиции лифта.

Спасибо

Uawi 18.11.2013 23:25

Ответ: Uawi. Вопрос - ответ
 
Вот, переписал код, только теперь вообще не поднимается лифт, есть изменения в позиции на доли секунды, а скрипт работает полностью, кроме вот поднятия, точнее работает полностью, только не до конца:
PHP код:

using UnityEngine;
using System.Collections;

public class 
Action MonoBehaviour {

    
// Объект лифта
    
GameObject elevator;
    
// Скорость по Y
    
float yVelocity;

    
// Публичная переменная этажа
    
public int floor 0;
    
// Перменные для контроля передвижения
    
public int updown;
    
// Массив позиций игрока
    
public float[] positions;
    
// Время подъема
    
public float smoothTime;
    
// Перменные флажка для контроля передвижения
    
public bool uppingdowning;

    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 (00Screen.width 4Screen.height), "") && downing == false) {
            
StartCoroutine (Upping ());
        }
        
// Правая кнопка, отвечающая за спуск
        
if (GUI.Button (new Rect (Screen.width Screen.width 40Screen.width 4Screen.height), "") && upping == false) {
            
StartCoroutine (Downing ());
        }
    }

    public 
IEnumerator Upping () {
        
upping true;
        
downing false;

        
floor += up;

        
float newposition Mathf.SmoothDamp(elevator.transform.position.ypositions[floor], ref yVelocitysmoothTime);
        
elevator.transform.position = new Vector3(elevator.transform.position.xnewpositionelevator.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.ypositions[floor], ref yVelocitysmoothTime);
        
elevator.transform.position = new Vector3(elevator.transform.position.xnewpositionelevator.transform.position.z);
        
        yield return new 
WaitForSeconds (smoothTime 3);

        
downing false;
        
upping false;
    }





Часовой пояс GMT +4, время: 16:06.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot