Для наглядности проблемы, видео:
Во первых, позиция мышки в мире определяется не самым лучшим образом (смотрим видео), красной сфере применяется позиция:
Синтаксис:
Используется csharp
ray = current_camera.ScreenPointToRay(Input.mousePosition);
DebugMouseObject.position = new Vector3(ray.GetPoint(100f).x, 167.1944f, ray.GetPoint(100f).z);
DebugMouseObject.position = new Vector3(ray.GetPoint(100f).x, 167.1944f, ray.GetPoint(100f).z);
Но вот в чем проблема:
Сфера должна двигаться по определенной высоте под курсором мыши, но если двигать курсор вверх, кружок за мышкой не "ползет". Если не ограничивать движение сферы по Z, тогда при перемещении мышки вверх экрана он ползет вверх. Как определить координаты курсора на плоскости по X,Z онли?
Вторая менее важная проблема возникает так:
Запускается сцена "главного меню", в ней по нажатии на кнопку подгружается "тестовая сцена", далее в ней жмем Эскейп и видим "внутри-игровое меню" (код ниже), далее в нем жмем "в главное меню", переходим из "главного меню" снова на "тестовую сцену", внутри-игровая менюшка осталась (надо будет пофиксить) и теперь при нажатии Эксейпа меню должно пропасть, а вот нет, редактор тупо вылетает... (Самый конец видео).
Синтаксис:
Используется csharp
public static bool GUI_Enabled = false;
private GUIStyle _windowStyle;
public Texture2D BackGroundTexture;
public float SCPOWidth(float val)
{
return (Screen.width / 2) - (val / 2);
}
void Start()
{
_windowStyle = new GUIStyle();
_windowStyle.normal.background = BackGroundTexture;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
GUI_Enabled = !GUI_Enabled;
if (GUI_Enabled)
{
Time.timeScale = 0;
}
else
{
Time.timeScale = 1;
}
}
}
void OnGUI()
{
if (GUI_Enabled)
{
GUI.Window(1, new Rect(0, 0, Screen.width, Screen.height), InGameWindow, string.Empty, _windowStyle);
}
}
void InGameWindow(int windowID)
{
if (GUI.Button(new Rect(SCPOWidth(140), 224, 140, 30), "В главное меню"))
{
Application.LoadLevel("MainMenu");
Time.timeScale = 1;
}
}
private GUIStyle _windowStyle;
public Texture2D BackGroundTexture;
public float SCPOWidth(float val)
{
return (Screen.width / 2) - (val / 2);
}
void Start()
{
_windowStyle = new GUIStyle();
_windowStyle.normal.background = BackGroundTexture;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Escape))
{
GUI_Enabled = !GUI_Enabled;
if (GUI_Enabled)
{
Time.timeScale = 0;
}
else
{
Time.timeScale = 1;
}
}
}
void OnGUI()
{
if (GUI_Enabled)
{
GUI.Window(1, new Rect(0, 0, Screen.width, Screen.height), InGameWindow, string.Empty, _windowStyle);
}
}
void InGameWindow(int windowID)
{
if (GUI.Button(new Rect(SCPOWidth(140), 224, 140, 30), "В главное меню"))
{
Application.LoadLevel("MainMenu");
Time.timeScale = 1;
}
}
Надеюсь я понятно описал суть проблемы
Решение пытался искать на зарубежных форумах, так-что если это уже обсуждалось здесь - извиняйте, не особо глубоко рыл.