public GUIStyle ExcursionStyle;//стиль окна с кнопкой
float ExcursionWindowX;
float ExcursionWindowY;
public GUIStyle ExcursionBtnStyle;
bool ExcursionBool;//при тру запускаем код в апдейте
string ThisRoom;//проверяем в какой мы сейчас комнате (я поставил по умолчанию при старте что в 1, в будущем можно передавать параметр комнат)
Vector3[] MarkPosition; //массив точек, заместо Vector3 distance1,distance1;
float[] BetweenTime; //заместо float timeLerp (можно ставить разные значения времени между участками)
bool[] dvi; //заместо dvi1, dvi2,dvi3...
GameObject MainCamGG;//камера ГГ(собсна это мы и есть = ))
bool OneTime;// переключатель для того чтобы камера начинала двигаться не от того положения где мы были при старте сцены, а с первой указанной нами точки
float speed;// так и остался
void Start ()
{
oldTime = Time.time;
OneTime = true;
MainCamGG = GameObject.Find("MainCam");
ThisRoom = "1";
}
void OnGUI()//окно
{
GUI.Window(9, new Rect(0, 0, ExcursionWindowX, ExcursionWindowY), ExcursionWindow, "", ExcursionStyle);
}
void ExcursionWindow(int windowID)
{
GUI.BringWindowToFront(9);
ExcursionWindowX = 59;
ExcursionWindowY = 49;
//кнопка при нажатии на которую запускаем код в апдейте
if (GUI.Button(new Rect(0, 0, ExcursionWindowX, ExcursionWindowY), "", ExcursionBtnStyle))
{
ExcursionBool = true;
}
}
void Update ()
{
if (ExcursionBool)//запускаем код
{
if (ThisRoom == "1")//если комната первая
{
NumMark = 7;//7 точек в комнате
Vector3[] MarkPosition = new Vector3[NumMark]; // 7 точек в комнате
float[] BetweenTime = new float[NumMark - 1];//6 временных интервалов
bool[] dvi = new bool[NumMark - 1];//6 булевых переменных
MarkPosition[0] = new Vector3(32.37901f, 1.922392f, 1.876713f);//первое положение
BetweenTime[0] = 20;//время между 0 и 1 точками
MarkPosition[1] = new Vector3(13.17782f, 1.922392f, 19.61474f);
BetweenTime[1] = 20;
MarkPosition[2] = new Vector3(-15.90358f, 1.922392f, 12.12216f);
BetweenTime[2] = 20;
MarkPosition[3] = new Vector3(-23.59447f, 1.922392f, -5.401195f);
BetweenTime[3] = 20;
MarkPosition[4] = new Vector3(-8.763806f, 1.922392f, -29.94238f);
BetweenTime[4] = 20;
MarkPosition[5] = new Vector3(17.4964f, 1.922392f, -22.29062f);
BetweenTime[5] = 20;
MarkPosition[6] = new Vector3(32.63352f, 1.922392f, -11.34174f);
MainCamGG.transform.position = MarkPosition[0];//переносим камеру в 0 точку
if (OneTime)
{
mPosition = oldPosition = MarkPosition[0];
dvi[0] = true;
OneTime = false;
}
//наш цикл за место кусков кода, он не работает не понимаю почему, мозгов не хватает наверно = )
for (int i = 0; i < NumMark - 1; i++)
{
if (dvi[i])
{
if (mPosition != MarkPosition[i+1])
{
speed = (Time.time - oldTime) / BetweenTime[i];
mPosition = Vector3.Lerp(oldPosition, MarkPosition[i+1], speed);
MainCamGG.transform.position = mPosition;
//yield return new WaitForSeconds(BetweenTime[i]);
}
else
{
if (i + 1 == NumMark)
{
dvi[i] = false;
ExcursionBool = false;
}
else
{
dvi[i] = false;
mPosition = oldPosition = MarkPosition[i + 1];
oldTime = Time.time;
dvi[i + 1] = true;
}
}
}
}
//---------------------------
}
}
}