Воскресенье, 28 Апреля 2024, 00:06

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » касательно Angel (в нутри)
касательно Angel
88mml72Дата: Четверг, 13 Марта 2014, 00:13 | Сообщение # 1
частый гость
Сейчас нет на сайте
сложная тема для меня поэтому подход может показаться несколько не адекватным вашим навыкам но все таки вопрос следующий:

имеется следующий код: (суть вопроса, мне нужно чтоб в консоль выводилось сообщение "Visible!" на установленный диапазон угла, потому что на данном этапе дэбуг срабатывает на все 360°

[/code]public float angle = 90f;

void RightClicked(Vector3 clickPosition)
{
//вызов метода
foreach (GameObject unit in unitManager.GetSelectedUnits())
{
unitsSelected = true;
//приказ на движение
unit.SendMessage("MoveOrder", clickPosition);

//поворот юнита на позиуию кликанья
unit.transform.LookAt(clickPosition);
// выводим на экран строку HelloWorld
//вот проблема:
if (Vector3.Angle(unit.transform.position, clickPosition) <= angle)
{
Debug.Log("Visible!");
}

Debug.Log("Hello World!");

}

}
}[code]


Сообщение отредактировал 88mml72 - Четверг, 13 Марта 2014, 00:16
robertonoДата: Четверг, 13 Марта 2014, 00:57 | Сообщение # 2
Чокнутый Кот
Сейчас нет на сайте
88mml72, т.к. я не не знаю vector3.angle я бы просто проверял диапазон. Если угол больше (или равно 0) И меньше (или равно) 90 - виден! Главное что работает, нельзя научится сразу писать лучший код.

Добавлено (13.03.2014, 00:57)
---------------------------------------------
Я так что то типо компаса написал

PoqXertДата: Четверг, 13 Марта 2014, 03:53 | Сообщение # 3
постоянный участник
Сейчас нет на сайте
Ты проверяешь относительно мира (центра координат). Тут угол зависит от РАСТОЯНИЯ объектов друг от друга и от РАСТОЯНИЯ до центра. Куда смотрит юнит тут никак не влияет.
Код
if (Vector3.Angle(unit.transform.position, clickPosition) <= angle)
{
Debug.Log("Visible!");
}

Необходимо привести к проверке относительно локальных координат:
Код
if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= angle)
{
Debug.Log("Visible!");
}

Т.е. нам не важно точное местоположение объектов, нам важно направление векторов.
В данном случае мы берём направление "лица" юнита и направление вектора до места клика.
Извиняйте, лучше объяснить не могу.


Расширения для Unity3D
Блог программиста - PoqXert.ru
88mml72Дата: Суббота, 15 Марта 2014, 18:47 | Сообщение # 4
частый гость
Сейчас нет на сайте
значит такой расклад: код
if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= angle)
работает прекрасно только если функцию
//поворот юнита на позиуию кликанья
unit.transform.LookAt(clickPosition);
поместить после оператора if.

Добавлено (13.03.2014, 12:06)
---------------------------------------------
нужна подсказка касательно этой темы. Скажем так, дэбуг выводит мне координаты по нажатии мышки на соответствующею позицию, однако оперирует функция Angle только на 180 градусов, работает оно так; допустим отчет в 10° и параллельно по обеим фронтам(восток, и запад) до замыкания окружности( до 180°) но мне надо чтоб было на востоке допустим 180° а на западе -180° либо и вовсе 360°

if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 10.0f)
{
Debug.Log("+10°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 20.0f)
{
Debug.Log("+20°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 30.0f)
{
Debug.Log("+30°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 40.0f)
{
Debug.Log("+40°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 50.0f)
{
Debug.Log("+50°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 60.0f)
{
Debug.Log("+60°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 70.0f)
{
Debug.Log("+70°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 80.0f)
{
Debug.Log("+80°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 90.0f)
{
Debug.Log("+90°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 100.0f)
{
Debug.Log("+100°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 110.0f)
{
Debug.Log("+110°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 120.0f)
{
Debug.Log("+120°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 130.0f)
{
Debug.Log("+130°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 140.0f)
{
Debug.Log("+140°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 150.0f)
{
Debug.Log("+150°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 160.0f)
{
Debug.Log("+160°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 170.0f)
{
Debug.Log("+170°");
unit.transform.LookAt(clickPosition);
}
else if (Vector3.Angle(unit.transform.forward, clickPosition - unit.transform.position) <= 180.0f)
{
Debug.Log("+180°");
unit.transform.LookAt(clickPosition);
}

Добавлено (15.03.2014, 17:40)
---------------------------------------------


Сообщение отредактировал 88mml72 - Суббота, 15 Марта 2014, 19:03
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » касательно Angel (в нутри)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг