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 |
|
| |