Знаю что данная тема уже открывалась,
viewtopic.php?f=5&t=1624
но в процессе упрощения кода (в топике выше, было описано как перемещать объект плавно, но приходилось постоянно дублировать код, я захотел сделать это через цикл) у меня возникла странная ситуация. в чем странность объясню в описании кода.
Синтаксис:
Используется csharp
using UnityEngine;
using System.Collections;
public class Excursion : MonoBehaviour
{
public GUIStyle ExcursionStyle;//стиль окна и кнопки
float ExcursionWindowX;
float ExcursionWindowY;
public GUIStyle ExcursionBtnStyle;
bool ExcursionBool;
GameObject MainCamGG; //камера ГГ, ее и будем двигать
GameObject GOText1234567; // создал GUIText для проверки, где была "странность"
string ThisRoom;//значение комнаты, в рассмотренном случае =1
int NumMark;//размер массивов с точками, временем и ключами(bool)
Vector3[] MarkPosition;//тички перемещения, [0]-стартовое
float[] BetweenTime;//время необходимое для преодоление расстояния между точками
bool[] dvi;//массив ключей
bool dvi1, dvi2;
float speed;//скорость выскчитывается от времени
float oldTime = 0f;
Vector3 oldPosition;
Vector3 mPosition;
bool OneTime;//ключ нужен для того чтобы наша камера начала свое передвижение с первой точки а не с того места где камера была на момент старта сцены
bool somebool;
void Start ()
{
GOText1234567 = GameObject.Find("Text1234567");
ThisRoom = "1";
MainCamGG = GameObject.Find("MainCam");
oldTime = Time.time;
OneTime = true;
somebool = true;
}
// Update is called once per frame
void Update ()
{
if (ExcursionBool)
{
if (ThisRoom == "1")
{
NumMark = 3;
Vector3[] MarkPosition = new Vector3[NumMark]; // 3 точки
float[] BetweenTime = new float[NumMark - 1];
bool[] dvi = new bool[NumMark];
MarkPosition[0] = new Vector3(32.37901f, 1.922392f, 1.876713f);//первое положение
BetweenTime[0] = 20;
dvi[0] = false;
MarkPosition[1] = new Vector3(13.17782f, 1.922392f, 19.61474f);
BetweenTime[1] = 20;
dvi[1] = false;
MarkPosition[2] = new Vector3(-15.90358f, 1.922392f, 12.12216f);
BetweenTime[2] = 20;
dvi[2] = false;
MainCamGG.transform.position = MarkPosition[0]; //переносим камеру в первую точку
if (OneTime)
{
mPosition = oldPosition = MarkPosition[0];
//dvi[0] = true;
dvi1 = true;
OneTime = false;
}
if (dvi1)//if (dvi[0])
{
if (mPosition != MarkPosition[1])
{
//при проверка (если заменить все dvi1 на аналогичные значения массивов dvi[0]...) эта часть кода еще выполняется
speed = (Time.time - oldTime) / BetweenTime[0];
mPosition = Vector3.Lerp(oldPosition, MarkPosition[1], speed);
MainCamGG.transform.position = mPosition;
}
else
{
//эта уже нет
dvi1 = false;//dvi[0]=false;
mPosition = oldPosition = MarkPosition[1];
oldTime = Time.time;
dvi2 = true;//dvi[1]=true;
}
}
if (dvi2)//dvi[1]
{
if (mPosition != MarkPosition[2])
{
speed = (Time.time - oldTime) / BetweenTime[1];
mPosition = Vector3.Lerp(oldPosition, MarkPosition[2], speed);
MainCamGG.transform.position = mPosition;
}
else
{
dvi2 = false;//dvi[1]=false;
ExcursionBool = false;
}
}
}
}
}
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;
}
}
}
using System.Collections;
public class Excursion : MonoBehaviour
{
public GUIStyle ExcursionStyle;//стиль окна и кнопки
float ExcursionWindowX;
float ExcursionWindowY;
public GUIStyle ExcursionBtnStyle;
bool ExcursionBool;
GameObject MainCamGG; //камера ГГ, ее и будем двигать
GameObject GOText1234567; // создал GUIText для проверки, где была "странность"
string ThisRoom;//значение комнаты, в рассмотренном случае =1
int NumMark;//размер массивов с точками, временем и ключами(bool)
Vector3[] MarkPosition;//тички перемещения, [0]-стартовое
float[] BetweenTime;//время необходимое для преодоление расстояния между точками
bool[] dvi;//массив ключей
bool dvi1, dvi2;
float speed;//скорость выскчитывается от времени
float oldTime = 0f;
Vector3 oldPosition;
Vector3 mPosition;
bool OneTime;//ключ нужен для того чтобы наша камера начала свое передвижение с первой точки а не с того места где камера была на момент старта сцены
bool somebool;
void Start ()
{
GOText1234567 = GameObject.Find("Text1234567");
ThisRoom = "1";
MainCamGG = GameObject.Find("MainCam");
oldTime = Time.time;
OneTime = true;
somebool = true;
}
// Update is called once per frame
void Update ()
{
if (ExcursionBool)
{
if (ThisRoom == "1")
{
NumMark = 3;
Vector3[] MarkPosition = new Vector3[NumMark]; // 3 точки
float[] BetweenTime = new float[NumMark - 1];
bool[] dvi = new bool[NumMark];
MarkPosition[0] = new Vector3(32.37901f, 1.922392f, 1.876713f);//первое положение
BetweenTime[0] = 20;
dvi[0] = false;
MarkPosition[1] = new Vector3(13.17782f, 1.922392f, 19.61474f);
BetweenTime[1] = 20;
dvi[1] = false;
MarkPosition[2] = new Vector3(-15.90358f, 1.922392f, 12.12216f);
BetweenTime[2] = 20;
dvi[2] = false;
MainCamGG.transform.position = MarkPosition[0]; //переносим камеру в первую точку
if (OneTime)
{
mPosition = oldPosition = MarkPosition[0];
//dvi[0] = true;
dvi1 = true;
OneTime = false;
}
if (dvi1)//if (dvi[0])
{
if (mPosition != MarkPosition[1])
{
//при проверка (если заменить все dvi1 на аналогичные значения массивов dvi[0]...) эта часть кода еще выполняется
speed = (Time.time - oldTime) / BetweenTime[0];
mPosition = Vector3.Lerp(oldPosition, MarkPosition[1], speed);
MainCamGG.transform.position = mPosition;
}
else
{
//эта уже нет
dvi1 = false;//dvi[0]=false;
mPosition = oldPosition = MarkPosition[1];
oldTime = Time.time;
dvi2 = true;//dvi[1]=true;
}
}
if (dvi2)//dvi[1]
{
if (mPosition != MarkPosition[2])
{
speed = (Time.time - oldTime) / BetweenTime[1];
mPosition = Vector3.Lerp(oldPosition, MarkPosition[2], speed);
MainCamGG.transform.position = mPosition;
}
else
{
dvi2 = false;//dvi[1]=false;
ExcursionBool = false;
}
}
}
}
}
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;
}
}
}
Проверял вся проблема в массиве ключей, но я не понимаю какая, когда проверял правильно ли они заполняются и перезаписываются все было замечательно, но стоит поменять простые значения div1 на массивные сразу же перестает работать, если поможете разобраться, то сделать чтобы все было циклом уже не будет проблемой.
Я не понимаю почему происходит эта "Странность"