Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для компьютеров > Unity > Общие вопросы

Общие вопросы вопросы не попадающие ни в один из доступных разделов

Ответ
 
Опции темы
Старый 17.11.2013, 22:17   #16
pax
Unity/C# кодер
 
Аватар для pax
 
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений
(для 5,323 пользователей)
Ответ: Uawi. Вопрос - ответ

наверное надо up++; добавить
__________________
Blitz3d to Unity Wiki
(Offline)
 
Ответить с цитированием
Старый 17.11.2013, 22:40   #17
Uawi
Оператор ЭВМ
 
Регистрация: 08.11.2013
Сообщений: 39
Написано одно полезное сообщение
Ответ: Uawi. Вопрос - ответ

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

Если в Update написать, то все нормально, а вот через нажатие на кнопку не выходит
__________________
Не бойся если ты один...
Бойся если ты ноль...
(Offline)
 
Ответить с цитированием
Старый 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)
 
Ответить с цитированием
Старый 18.11.2013, 00:32   #19
Uawi
Оператор ЭВМ
 
Регистрация: 08.11.2013
Сообщений: 39
Написано одно полезное сообщение
Ответ: Uawi. Вопрос - ответ

Простите за тот же пост...

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

Спасибо
__________________
Не бойся если ты один...
Бойся если ты ноль...
(Offline)
 
Ответить с цитированием
Старый 18.11.2013, 23:25   #20
Uawi
Оператор ЭВМ
 
Регистрация: 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 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;
    }


__________________
Не бойся если ты один...
Бойся если ты ноль...
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com